AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Windows 11 Standarddrucker ändern

Ein Thema von wuff01 · begonnen am 15. Jul 2022 · letzter Beitrag vom 15. Jul 2022
 
wuff01

Registriert seit: 8. Okt 2007
9 Beiträge
 
#1

Windows 11 Standarddrucker ändern

  Alt 15. Jul 2022, 06:57
Guten Morgen,

hat jemand unter Windows 11 aus Delphi heraus den Standarddrucker ändern können? Bis Windows 10 habe ich das so gemacht:

Delphi-Quellcode:
procedure TForm1.SetDefaultPrinter(NewDefPrinter: string);
var
  ResStr: array [0 .. 255] of char;
begin
  StrPCopy(ResStr, NewDefPrinter);
  WriteProfileString('windows', 'device', ResStr);
  StrCopy(ResStr, 'windows');
   SendNotifyMessage(HWND_BROADCAST, WM_WININICHANGE, 0, LongInt(@ResStr));
end;
Windows 11 reagiert auf den Code nicht.

Die 2 folgende Variante welche man häufig im Internet findet, bringt bei mir unter Windows 10 & 11 den Fehler 'Systemfehler. Code: 1801.
Der Druckername ist unzulässig'

Delphi-Quellcode:
 procedure SetWinDefaultPrinter(const Name: String);
  var
    fnSetDefaultPrinter: function(pszPrinter: PChar): Bool; stdcall;
    H: THandle;
    Size, Dummy: Cardinal;
    PrinterInfo: PPrinterInfo2;
begin
   if (Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion >= 5) then begin
     @fnSetDefaultPrinter := GetProcAddress(GetModuleHandle(winspl), 'SetDefaultPrinterA');
     if (@fnSetDefaultPrinter = NIL) then
       RaiseLastOSError;
     if NOT fnSetDefaultPrinter(PChar(Name)) then
       RaiseLastOSError;
   end
   else begin
     if NOT OpenPrinter(PChar(Name), H, NIL) then
       RaiseLastOSError;
     try
       GetPrinter(H, 2, NIL, 0, @Size);
       if GetLastError <> ERROR_INSUFFICIENT_BUFFER then
         RaiseLastOSError;
       GetMem(PrinterInfo, Size);
       try
         if NOT GetPrinter(H, 2, PrinterInfo, Size, @Dummy) then
           RaiseLastOSError;
         PrinterInfo^.Attributes := PrinterInfo^.Attributes or PRINTER_ATTRIBUTE_DEFAULT;
         if NOT Winspool.SetPrinter(H, 2, PrinterInfo, PRINTER_CONTROL_SET_STATUS) then
           RaiseLastOSError;
       finally
         FreeMem(PrinterInfo);
       end;
     finally
       ClosePrinter(H);
     end;
   end;
Hat jemand einen Tipp für mich?

Geändert von TBx (15. Jul 2022 um 07:01 Uhr) Grund: Delphi-Tags eingefügt
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz