Die eigentlich interessante Frage die sich mir stellt: Wenn die Treiber das prinzipiell anders machen, wie kommen dann andere Programme damit klar? Irgendwie kann ich mir nicht vorstellen, dass die alle eine Sonderfunktion für Minolta-Geräte eingebaut haben. Mit ein bisschen Gestöber habe ich
das hier für Purebasic gefunden. Vielleicht lässt sich ja daraus was ableiten.
Daneben ist mir an deiner Routine noch was aufgefallen. Du fragst nur dmDuplex ab, nicht jedoch dmFields:
Delphi-Quellcode:
function CanDuplex: Boolean;
var
Device: array [0..255] of Char;
Driver: array [0..255] of Char;
Port: array [0..255] of Char;
hDevMode: THandle;
pDevMode: PDeviceMode;
begin
Result := False;
Printer.GetPrinter(Device, Driver, Port, hDevMode);
pDevMode := GlobalLock(hDevMode);
if ((dmFields or DM_DUPLEX) <> 0) or
(pDevMode.dmDuplex <> DMDUP_SIMPLEX) then
begin
Result := True;
end;
GlobalUnlock(hDevMode);
end;
Falls das nicht wirkt, versuchs doch mal so:
Delphi-Quellcode:
function CanDuplex: Boolean;
var
Device, Driver, Port: array[0..255] of Char;
hDevMode: THandle;
begin
Printer.GetPrinter(Device, Driver, Port, hDevmode);
Result:= WinSpool.DeviceCapabilities(
Device, Port, DC_DUPLEX, NIL, NIL
) <> 0;
end;
Mangels duplexfähigem Drucker kann ich das grad nicht testen. Diese Lösung stammt von
hier.