Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Standarddrucker ändern (https://www.delphipraxis.net/6981-standarddrucker-aendern.html)

Grim Fandango 29. Jul 2003 11:56


Standarddrucker ändern
 
Hallöle,

ich suche eine Beispiel für's ändern des Windows Standartdruckers. Es muss wohl mit SetDefaultPrinter gehen, aber ich hab keinen Schimmer wie ich das in Delphi benutze!!. Wäre sehr dankbar, wenn mir jemand ein Beispiel aufschreibt was ich nachher in meinen Code reinkopieren kann.

Vielen Dank schon mal!!

Grim Fandango :coder:

APP 29. Jul 2003 12:57

Re: Standarddrucker ändern
 
Hallo,

Delphi-Quellcode:
var
  Device: array[0..255] of char;
  Driver: array[0..255] of char;
  Port: array[0..255] of char;
  hDeviceMode: THandle;
begin
  Printer.PrinterIndex := ....; {select printer to make default}
  Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
  StrCat( Device, ',');
  StrCat( Device, Driver );
  StrCat( Device, ',');
  StrCat( Device, Port );
  WriteProfileString( 'windows', 'device', Device );
  StrCopy( Device, 'windows' );
  SendMessage( HWND_BROADCAST, WM_WININICHANGE, 0, longint( @Device ));
end;
Quelle: How to set the default printer in Windows

sakura 5. Jul 2007 10:56

Re: Standarddrucker ändern
 
Lange ist es her, aber ich habe jetzt bei einem Kunden mit genau dieser Funktionen ein Problem gehabt, welches zum Absturz der Gesamtanwendung geführt hat. Die Lösung liegt im SendMessage, anstatt einfach folgende Änderung (zzgl. einiger Anpassungen as needed bei mir) :)
Delphi-Quellcode:
uses
  WinSpool;

function SetDefaultPrinter(aPrinterName: string) Boolean;
type
  TSetDefaultPrinterA = function (prnName: LPCTSTR): BOOL; stdcall;
var
  WS: HINST;
  SetDefaultPrinterA: TSetDefaultPrinterA;
begin
  WS := GetModuleHandle(PChar(winspl));
  SetDefaultPrinterA := GetProcAddress(WS, 'SetDefaultPrinterA');

  if Assigned(SetDefaultPrinterA) then
  begin
    Result := SetDefaultPrinterA(PChar(aPrinterName));
    if Result then
      SendNotifyMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0);
  end
  else
  begin
    Result := False;
  end;
end;
...:cat:...


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz