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;
...
...