Entwickler-Ecke
Sonstiges (Delphi) - Meldung: Zur Zeit ist kein Standarddrucker gewählt
Lake - Mi 21.06.17 11:33
Titel: Meldung: Zur Zeit ist kein Standarddrucker gewählt
Hallo,
bei mehreren Programmen habe ich folgenden Effekt.
Wenn ich eines der Programm starte erhalte ich ab und zu folgende Fehlermeldung:
Exception EPrinter in Modul Programm.exe bei 00040533
Zur Zeit ist kein Standarddrucker gewählt.
Nun soll das Programms nicht gestartet werden wenn "kein Standarddrucker" vorhanden ist.
Also wenn Standarddrucker vorhanden Programm starten, sonst nicht.
Dies versuche beim Programmstart mit:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| ... Application.Initialize; if PruefeStandardDrucker then begin ... Application.Run; end; |
Die Pruefung des Standardrucker wird nach Recherchen im Netz mit diesen beiden Methoden probiert.
Function PruefeStandardDrucker : Boolean;
einmal mit:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| ... Result := true; GetProfileString('Windows', 'device', '', ResStr, 255); if (Trim(StrPas(ResStr)) = '') then result := false; ... |
und mit:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| ... Result := true; if not EnumPrinters(PRINTER_ENUM_DEFAULT, nil, 5, nil, 0, ByteCnt, StructCnt) and (GetLastError <> ERROR_INSUFFICIENT_BUFFER) then begin bRueck := false; end; ... |
Beides führt nicht zum Erfolg, es erscheint trotzdem dann die Fehlermeldung.
Wie kann ich einen Programmstart verhindern, wenn kein Standarddrucker vorhanden ist?
Delete - Mi 21.06.17 11:40
- Nachträglich durch die Entwickler-Ecke gelöscht -
Lake - Mi 28.06.17 07:43
Hallo Frühlingsrolle,
vielen Dank für den Tip.
Das ist eine gute Lösung wenn der Druckername bekannt ist.
Aber sobald das Programm auf einem anderen Rechner gestartet wird geht das nicht mehr, da der abgefragte Drucker nicht auf dem anderen System vorhanden ist.
Delete - Mi 28.06.17 09:11
- Nachträglich durch die Entwickler-Ecke gelöscht -
Lake - Mi 05.07.17 08:00
Guten Morgen Frühlingsrolle,
vielen Dank auch für diesen Tip.
Nur zur Info, heute wurde trotz dieser Anpassung derselbe Fehler erzeugt.
Delete - Mi 05.07.17 11:28
- Nachträglich durch die Entwickler-Ecke gelöscht -
Holgerx - Mi 05.07.17 11:56
Hmm..
Teste mal:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| function GetDefaultPrinterW(prnName : PWideChar; var bufSize : DWORD ) : BOOL; stdcall; external 'winspool.drv' name 'GetDefaultPrinterW';
function GetDefaultPrinterName: WideString; var lprnName : PWideChar; lBufSize : dword; begin Result := ''; lBufSize := 0;
GetDefaultPrinterW(nil,lBufSize); if(GetLastError = ERROR_INSUFFICIENT_BUFFER) then begin GetMem(lprnName,(lBufsize * SizeOf(WideChar))); try if(GetDefaultPrinterW(lprnName,lBufSize)) and (lprnName[0] <> #0) then Result := lprnName; finally FreeMem(lprnName); end; end; end; |
Ab Windows 2000 wird mit 'GetDefaultPrinter' der Standard-Drucker zurück geliefert.
Dann musst Du nur noch prüfen, ob der String leer ist ;)
Die EnumPrinters ist lt. MS für die Ermittlung des Standard-Druckers nicht mehr zuständig.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!