Ich bin nicht sicher, dass Sie können erhalten die Standardeinstellung für einen bestimmten Drucker zu studieren. Sie können jedoch die tatsächlichen aktuellen Werte abrufen, wenn Sie kreativ sind. Sie müssen sich jedoch die DEVMODE-Struktur ansehen, wenn Sie sicherstellen möchten, dass Sie über die richtigen Informationen verfügen. Dies ist keine einfache Operation und wird einige ausgefallene Win32 Fu erfordern. Dies ist aus ein paar Quellen angepasst, aber arbeitete an meinen (zugegebenermaßen fleckigen) Tests.
[DllImport("kernel32.dll")]
static extern bool GlobalFree(IntPtr hMem);
[DllImport("kernel32.dll")]
public static extern IntPtr GlobalLock(IntPtr handle);
[DllImport("kernel32.dll")]
public static extern IntPtr GlobalUnlock(IntPtr handle);
private static short IsPrinterDuplex(string PrinterName)
{
IntPtr hDevMode; // handle to the DEVMODE
IntPtr pDevMode; // pointer to the DEVMODE
DEVMODE devMode; // the actual DEVMODE structure
PrintDocument pd = new PrintDocument();
StandardPrintController controller = new StandardPrintController();
pd.PrintController = controller;
pd.PrinterSettings.PrinterName = PrinterName;
// Get a handle to a DEVMODE for the default printer settings
hDevMode = pd.PrinterSettings.GetHdevmode();
// Obtain a lock on the handle and get an actual pointer so Windows won't
// move it around while we're futzing with it
pDevMode = GlobalLock(hDevMode);
// Marshal the memory at that pointer into our P/Invoke version of DEVMODE
devMode = (DEVMODE)Marshal.PtrToStructure(pDevMode, typeof(DEVMODE));
short duplex = devMode.dmDuplex;
// Unlock the handle, we're done futzing around with memory
GlobalUnlock(hDevMode);
// And to boot, we don't need that DEVMODE anymore, either
GlobalFree(hDevMode);
return duplex;
}
Ich benutzte die DEVMODE structure Definition von pinvoke.net. Beachten Sie, dass der Zeichensatz, der auf pinvoke.net definiert ist, möglicherweise nach den Kommentaren zu original link von B0bi optimiert werden muss (nämlich, CharSet = CharSet.Unicode in StructLayoutAttriute auf DEVMODE zu setzen). Sie benötigen auch die DM enum. Und vergessen Sie nicht, System.Runtime.InteropServices hinzuzufügen;
Sie sollten in der Lage sein, von hier aus einzuschätzen, welche Variationen Sie in Ihrer Druckereinrichtung erhalten.
Ich versuche mir vorzustellen, warum es wichtig wäre, und versagt. –
@Damien_The_Unbeliever - Wir versuchen, eine Reihe von Dokumenten in einem einzigen Dokument zum Drucken in einem einzigen Druckauftrag zusammenzuführen. Wir müssen jedoch die Duplex-Optionen berücksichtigen, die bei diesem Druckauftrag auftreten, damit die Dokumente entsprechend getrennt werden können, sodass jedes Dokument auf einer neuen Seite (nicht auf der Rückseite eines anderen Dokuments) beginnt. – Reddog
Können Sie nicht sicherstellen, dass jedes Dokument durch 2 teilbar ist? Wenn die ungeraden Seitenzahlen eine leere Seite hinzufügen. Dann wird es niemals auf der Rückseite einer anderen Dokumentseite gedruckt. –