Hi allerseits,
Delphi 4 (update 3), WinNT4 bzw. WinXP
Ich habe eine Anwendung, die auf diverse Drucker drucken soll. Dabei soll der Benutzer nicht mit der Druckerauswahl belästigt werden, sondern ich habe die Auswahl des Druckers fest in einer ini-Datei eingebaut. Um den Drucker festzulegen, verwende ich folgenden Code (s.u.), der in diversen Newsforen empfohlen wurde.
Delphi-Quellcode:
procedure TFMain.SetDefaultPrinter(PrinterName: String);
var
i: Integer;
Device, Driver, Port : PChar;
HdeviceMode: Thandle;
aPrinter : TPrinter;
begin
Printer.PrinterIndex := -1;
OriginalDrucker := Printer.Printers[Printer.PrinterIndex];
getmem(Device, 255);
getmem(Driver, 255);
getmem(Port, 255);
aPrinter := TPrinter.create;
for i := 0 to Printer.printers.Count-1 do
begin
if (uppercase(Printer.printers[i]) = uppercase(PrinterName)) then
begin
aprinter.printerindex := i;
aPrinter.getprinter(device, driver, port, HdeviceMode);
StrCat(Device, ',');
StrCat(Device, Driver );
StrCat(Device, Port );
WriteProfileString('windows', 'device', Device);
StrCopy( Device, 'windows' );
SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, Longint(@Device));
end;
end;
Freemem(Device, 255);
Freemem(Driver, 255);
Freemem(Port, 255);
aPrinter.Free;
end;
Es ist jetzt schon zu häufig passiert, dass der Drucker nicht wechselt, sondern auf den Windows-Standard-Drucker ausgegeben wird. Erst beim Neustart des Programms funktioniert der Wechsel wieder. Der Fehler tritt unter NT4 auf, da unsere Clients vorwiegend NT-Maschinen sind.
Woran kann das liegen?
Oder kann mir jemand einen Tipp geben, wie ich das ganze umgehen kann?
Gruß
Peter
P.S.: SORRY, habe gerade gemerkt, dass ich den falschen Code eingefügt hatte. Das ist aber jetzt korrigiert!