PrintDialog() – PrintQueue und 64bit
unter .NET gibt es (leider) 2 PrintDialog-Klassen, eine unter System.Windows.Forms, eine weitere unter System.Windows.Controls. Die entsprechenden Properties sind nicht deckungsgleich, und so neigt man dazu (wenn man zB die PrintQueue eines Netzwerkdruckers erhalten will), die WPF-Klasse in einer Winforms-Anwendung zu benutzen. Leider funktioniert dann aber das Z-Ordering (und die Modal-Eigenschaft) nicht korrekt, da die entsprechende WPF-Application-Instanz ja nicht initialisiert ist (und diese hält den Pointer auf das Window-Handle).
Die PrintQueue lässt sich aber auch über den normalen PrintDialog erhalten, und zwar wie folgt
System.Windows.Forms.PrintDialog dlg = new System.Windows.Forms.PrintDialog();
dlg.UseEXDialog = true; // notwendig, da sonst unter 64bit der Dialog nicht aufgeht, sondern immer mit Cancel zurückkommt
if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { System.Printing.LocalPrintServer server = new System.Printing.LocalPrintServer(); System.Printing.EnumeratedPrintQueueTypes[] queue_types = {System.Printing.EnumeratedPrintQueueTypes.Local, System.Printing.EnumeratedPrintQueueTypes.Connections};
// // Enumerate through all the printers. // wichtig ist die zweite Eigenschaft // „System.Printing.EnumeratedPrintQueueTypes.Connections“
System.Printing.PrintQueue myQueue = null; foreach (System.Printing.PrintQueue queue in server.GetPrintQueues(queue_types)) { // // fetch the queue by name. //
if (dlg.PrinterSettings.PrinterName.Equals(queue.FullName)) { myQueue = queue; break; } } }
Dieser Eintrag ist vom Autor unter
CC BY 4.0
lizensiert.