Einzelnen Beitrag anzeigen

wuff01

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

Windows 11 Standarddrucker ändern

  Alt 15. Jul 2022, 07: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 08:01 Uhr) Grund: Delphi-Tags eingefügt
  Mit Zitat antworten Zitat