Druckeroptionen setzen - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +---- Forum: ActiveX & .Net (/Forum-ActiveX-Net) +---- Thema: Druckeroptionen setzen (/Thread-Druckeroptionen-setzen) |
Druckeroptionen setzen - M Nussbaumer - 19.08.2011 06:59 Guten Tag Ich versuche momentan die Druckoption für doppelseitiges drucken programmatisch einzustellen. Da LabVIEW selbst keine Funktion dafür bietet (hab zumindest keine gefunden...) habe ich mich mal mit den .NET Funktionen beschäftigt. Den Druckdialog (Windows.Forms(2.0.0.0).PrintDialog) so voreinzustellen und anzuzeigen funktioniert problemlos -> Problem gelöst könnte man meinen, leider wird bei uns ein spezieller Druck-Dialog aufgerufen über welchen man zusätzliche Elemente im Ausdruck hinzufügen kann... Meine Frage ist nun, ob es möglich ist quasi das ablaufen zu lassen, was passiert wenn ich beim Windows-Drucker Dialog auf ok drücke. Die Printer-Settings kann ich ohne Probleme setzen. Bzw. Die Einstellungen der Drucksettings ohne den Dialog setzen zu können... Vielen Dank für eure Hilfe Gruss Marc RE: Druckeroptionen setzen - A.Berndsen - 02.09.2011 13:52 Hallo Marc, der Thread ist schon ein paar Tage alt. So ganz habe ich Dein Problem nicht verstanden. Die Einstellungen für den Druckdialog die hast Du über .NET eingestellt. Dann mußt Du nur noch den Druck anstoßen. Oder wo habe ich etwas übersehen in Deiner Schilderung. Grüße Andreas RE: Druckeroptionen setzen - M Nussbaumer - 05.09.2011 07:40 (02.09.2011 13:52 )A.Berndsen schrieb: Hallo Marc, Mein Problem ist, dass wir einen LabVIEW-Druckdialog verwenden, welcher an spezielle Userwünsche angepasst wurde. Daher kann ich diesen leider nicht mit dem .NET-Druckdialog ersetzten Nun kann man ja die Druckoptionen für den .NET-Druckdialog bereits vor Aufruf setzten, diese Optionen möchte ich nun übernehmen für den nächsten Druck ohne den .NET-Dialog aufrufen zu müssen. Das Problem ist, dass die Optionen ohne Aufruf des .NET-Dialogs nicht übernommen werden... bzw ich nicht weiss wie ich es ohne den blöden .NET-Dialog machen soll Ganz konkret geht es mir darum, dass ich dem Drucker sagen kann, dass er den nächsten Druckauftrag doppelseitig drucken soll... Drucker-API ansprechen wäre auch keine Lösung, da wir Drucker von verschiedenen Marken verwenden... Hoffe ich konnte das ganze irgendwie verständlich rüberbringen Gruss Marc RE: Druckeroptionen setzen - rasta - 05.09.2011 11:09 Hallo Marc, vielleicht kommst Du mit einem .Net Constructor aus System.Printing (3.0.0.0) weiter. Gruß Ralf RE: Druckeroptionen setzen - M Nussbaumer - 05.09.2011 15:14 (05.09.2011 11:09 )rasta schrieb: Hallo Marc, Danke für den Hinweis, genau die Parameter muss ich einstellen können! Nun weiss ich leider nicht wie ich die neuen Einstellungen an den Mann bzw Drucker bringen soll, hab nicht soviel Erfahrung mit .NET... Wäre echt überglücklich, falls wir das ganze zum funktionieren bringen würden Edit: Der Druckreport wird über das Report Generation Toolkit realisiert, manuelles aufrufen der Druck-Funktion ist daher nicht möglich Gruss Marc RE: Druckeroptionen setzen - M Nussbaumer - 09.09.2011 14:20 Lösung über .Net scheint nicht möglich, da der Report selbst mit ActiveX zu funktionieren scheint... Jedoch ist es Möglich über die Registry die Druckereinstellungen zu ändern Der anzupassende Key ist: HKEY_CURRENT_USER\Printers\Connections\*Druckername*\DevMode Nun habe ich das Problem, dass ich die Datenstruktur nur für C habe und daher nicht genau weiss wie ich das ganze auswerten muss:-S Mein benötigter Wert besitzt den Offset von 98 (dmDuplex), möchte jedoch gleich ein VI für die ganzen Einstellungen machen damit sich nach mir keiner mehr damit abmühen muss Hier die Definition von Microsoft aus: typedef struct _devicemode { TCHAR dmDeviceName[CCHDEVICENAME]; WORD dmSpecVersion; WORD dmDriverVersion; WORD dmSize; WORD dmDriverExtra; DWORD dmFields; union { struct { short dmOrientation; short dmPaperSize; short dmPaperLength; short dmPaperWidth; short dmScale; short dmCopies; short dmDefaultSource; short dmPrintQuality; }; struct { POINTL dmPosition; DWORD dmDisplayOrientation; DWORD dmDisplayFixedOutput; }; }; short dmColor; short dmDuplex; short dmYResolution; short dmTTOption; short dmCollate; TCHAR dmFormName[CCHFORMNAME]; WORD dmLogPixels; DWORD dmBitsPerPel; DWORD dmPelsWidth; DWORD dmPelsHeight; union { DWORD dmDisplayFlags; DWORD dmNup; }; DWORD dmDisplayFrequency; #if (WINVER >= 0x0400) DWORD dmICMMethod; DWORD dmICMIntent; DWORD dmMediaType; DWORD dmDitherType; DWORD dmReserved1; DWORD dmReserved2; #if (WINVER >= 0x0500) || (_WIN32_WINNT >= 0x0400) DWORD dmPanningWidth; DWORD dmPanningHeight; #endif #endif } DEVMODE, *PDEVMODE, *LPDEVMODE; Mir geht es vorallem darum die Offsets zu bestimmen, dazu fehlt mir jedoch die Ahnung wieviel Platz die ganzen structs einnehmen, die Datentypen sind mir grösstenteils (bis auf TChar und Pointl) bekannt... Hoffe jemand kann mir weiterhelfen. Vielen dank schon mal im vorraus RE: Druckeroptionen setzen - M Nussbaumer - 12.09.2011 14:25 So hab mich mal durch das binäre File gekämpft Hier meine Lösung, falls ihr Duplex-Optionen für einen Netzwerkdrucker setzten wollt Für einen lokalen Drucker müsste man den passenden Registry-Eintrag im VI "PrinterSettings" anpassen, der Rest sollte wie gehabt funktionieren. Da beim VI in der Drucker-Registry rumgefingert wird distanziere ich mich von möglichen Problemen, welche beim benutzen des VIs entstehen können. Bei mir hat jedoch alles wie gewünscht funktioniert LabVIEW 2009: [attachment=35818] Viel Spass damit |