Benutzer mit den meisten Antworten
Befehl: set printer = "Printername" reagiert nicht

Frage
-
Für das alte VB6 gibt es in der Fachliteratur (und auch im Programm) noch den oben genannten Befehl. Hiermit soll es möglich sein, statt über die Systemsteuerung (z.B. bei XP) einen anderen Drucker als Standarddrucker zu deklarieren, diesen Befehl für die Neuzuordnung eines anderen Druckers zum Standarddrucker zu verwenden. In einem Kellnerprogramm kann man dem Bedienpersonal nicht zumuten, diesen umständlichen Weg über das Betriebssystem zu gehen. Das muß innerhalb des Programms für das Bedienpersonal "automatisch" funktionieren.
Dieser Set-Befehl aber funktioniert nicht. Ich habe fast 4 Wochen damit zugebracht, alle Textversionen durchzutesten, aber völlig ohne Erfolg. Entweder, ich erhielt sofort eine Fehlermeldung, oder aber, der Befehl wurde fehlerlos akzeptiert, veränderte aber den Standarddrucker nicht. Also auch erfolglos.
Ich suche die Article-Nr. in der hierzu in der MSDN Stellung bezogen wird. Ich hatte diese schon einmal gefunden und dort fand ich die Antwort, daß diese Befehls-Routine in VB6 fehlerhaft ist und deswegen eine Ersatzroutine in dieseem "article" genannt wurde.Diesen "article" aber finde ich nicht wieder und schon gar nicht diese Ersatzroutine, in der auch die Rede von "kernel" war.
Ich gehe davon aus, daß es sich hierbei um ein Programmierbeispiel für ein Zusatz-OCX-Modul handeln könnte, das dann bei den Komponenten mit ins Programm eingebunden werden könnte. Vielleicht gibt es ja auch ein solches Modul als Zusatzkomponente auf dem Freien Markt. Kennt da jemand etwas in diesem Sinne. Meinen Versuch mit dem OPOS von Epson möchte ich nicht weiterverfolgen, weil das für den Letztanwender zu umständlich sein könnte. Weil ich damit ebenfalls manipulierte, verwarf ich dummerweise die Sache mit der Ersatzroutine aus MSDN.
Kann jemand helfen. Brauche dringend diesbezüglich Hilfe.Beste Grüße aus Raum Frankfurt/M
ottohansadolf
Antworten
-
Hallo,
das Printer Objekt bezieht sich auf den Standard-Drucker für das aktuelle VB6 Programm, darüber kannst Du nicht den Windows Standard-Drucker festlegen. Für den VB Standard-Drucker funktioniert es wie folgt:
Public Sub Main() Dim p As Printer Debug.Print "Standard vorher: " & VB.Global.Printer.DeviceName ' Alle Drucker auflisten For Each p In VB.Global.Printers Debug.Print p.DeviceName Next p ' Gewünschten Drucker suchen & setzen For Each p In VB.Global.Printers If p.DeviceName = "Generic / Text Only" Then Set VB.Global.Printer = p Exit For End If Next p Debug.Print "Standard nachher: " & VB.Global.Printer.DeviceName End Sub
Und für den Windows-Standarddrucker siehe: VB 5/6-Tipp 0093: Standard-Drucker systemweit setzen
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing- Als Antwort markiert Thorsten DörflerModerator Sonntag, 12. Juni 2011 09:20
-
Hallo,
über den Befehl Set Printer = Printers(x) setzt Du den Standarddrucker für Deine aktuelle Anwendungsinstanz. Auf den Standarddrucker des Systems hat dies keine Auswirkung, was in den meisten Anwendungsfällen auch nicht gewünscht ist. Um den Drucker über seinen Namen zu finden kann man hier über die Printers Sammlung iterieren:
Dim p As Printer For Each p In Printers If p.DeviceName = "Printer Name" Then Set Printer = p Exit For End If Next
Wenn Du tatsächlich den Standarddrucker systemweit ändern möchtest, kannst Du das einfach über den Windows Scripting Host erledigen:
CreateObject("WScript.Network").SetDefaultPrinter ("Printer Name")
SetDefaultPrinter Method
http://msdn.microsoft.com/en-us/library/2ccwwdct.aspxAufwändiger geht es auch direkt über API:
How To Set Which Printer Is the System Default Printer
http://support.microsoft.com/kb/266767/en-us
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort markiert Thorsten DörflerModerator Sonntag, 12. Juni 2011 09:20
Alle Antworten
-
Hallo,
das Printer Objekt bezieht sich auf den Standard-Drucker für das aktuelle VB6 Programm, darüber kannst Du nicht den Windows Standard-Drucker festlegen. Für den VB Standard-Drucker funktioniert es wie folgt:
Public Sub Main() Dim p As Printer Debug.Print "Standard vorher: " & VB.Global.Printer.DeviceName ' Alle Drucker auflisten For Each p In VB.Global.Printers Debug.Print p.DeviceName Next p ' Gewünschten Drucker suchen & setzen For Each p In VB.Global.Printers If p.DeviceName = "Generic / Text Only" Then Set VB.Global.Printer = p Exit For End If Next p Debug.Print "Standard nachher: " & VB.Global.Printer.DeviceName End Sub
Und für den Windows-Standarddrucker siehe: VB 5/6-Tipp 0093: Standard-Drucker systemweit setzen
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing- Als Antwort markiert Thorsten DörflerModerator Sonntag, 12. Juni 2011 09:20
-
Hallo,
über den Befehl Set Printer = Printers(x) setzt Du den Standarddrucker für Deine aktuelle Anwendungsinstanz. Auf den Standarddrucker des Systems hat dies keine Auswirkung, was in den meisten Anwendungsfällen auch nicht gewünscht ist. Um den Drucker über seinen Namen zu finden kann man hier über die Printers Sammlung iterieren:
Dim p As Printer For Each p In Printers If p.DeviceName = "Printer Name" Then Set Printer = p Exit For End If Next
Wenn Du tatsächlich den Standarddrucker systemweit ändern möchtest, kannst Du das einfach über den Windows Scripting Host erledigen:
CreateObject("WScript.Network").SetDefaultPrinter ("Printer Name")
SetDefaultPrinter Method
http://msdn.microsoft.com/en-us/library/2ccwwdct.aspxAufwändiger geht es auch direkt über API:
How To Set Which Printer Is the System Default Printer
http://support.microsoft.com/kb/266767/en-us
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort markiert Thorsten DörflerModerator Sonntag, 12. Juni 2011 09:20
-
Hallo Olaf Helper,
Durch diese Routine wird tatsächlich die Variable P.deviceName auf den gewünschten Drucker umgestellt und ist dann in VB.Global.Printer.DeviceName enthalten, aber in der Basiseinstellung innerhalb das Systems ändert sich leider nichts und der Druck kommt auch auf dem Drucker raus, der über das System noch eingestellt ist.
Allerdings hatte ich diese Routine innerhalb des sonstigen Codes eingesetzt und nicht expliziet in die Sub Main, wie vorgegeben. Ich muß ja ermöglichen, daß während des Programmablaufs permanent die Drucker wechseln. Einmal die Küche, dann die Bar (für Getränke) und der Kellnerdrucker, für eine Gastrechnung usw. usw.
So komme ich leider nicht weiter.
Es wäre zu schön gewesen, als wahr zu sein.
Bei der anderen Alternative, aber, die im Artikel 266767 enthalten ist, habe ich in einem angeschlossenen Beitrag gesehen, daß diese angebl. nicht unter XP läuft und die neueren wie Win Vista und Win7 werden gar nicht genannt.Kann ich Sie auch anrufen (?) oder ist dieser Support nur ausschließlich auf "hier" limitiert?
Meine Tel.Nr. steht unter meiner WWW.duvesoft.de
Ich stehe also leider weiterhin auf dem berühmten Schlauch!!!???
Grüße ottohansadolf
-
VB.Global.Printer.DeviceName enthalten, aber in der Basiseinstellung innerhalb das Systems ändert sich leider nichts und der Druck kommt auch auf dem Drucker raus, der über das System noch eingestellt ist.
Hallo,wie Thorsten und ich schon schrieben, mit dem VB Printer Objekt wird nur der Standard-Drucker der VB Applikations-Instanz geändert, nicht der Windows System-Standarddrucker. Das geht nur über die Code Beispiele, die als Link angegeben waren.
Über welche Reporting Engine wird den gedruckt und hast Du die Möglichkeit, den Source Code zu ändern? Normalerweise bietet jede Reporting Engine (wie z.B. Crytal Reports, ComponentOne u.ä.) ein Druckersteuerung, über die man regeln kann, auf welchem Drucker (und welchem Schacht) der Report gedruckt werden soll. Hier würde ich eher ansetzten, statt jedes mal den Standard-Drucker abzuändern.
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing- Als Antwort markiert ottohansadolf Donnerstag, 26. Mai 2011 18:30
- Tag als Antwort aufgehoben Thorsten DörflerModerator Sonntag, 12. Juni 2011 09:20
-
Hallo Olaf Helper,
vielen Dank für Ihre Mühe. Ich habe jetzt die Lösung gefunden. Ist zwar etwas aufwendig, aber es klappt.
Es ist die Article-Nr 266767 die ich erfolgreich als Test eingesetzt habe. Jetzt werde ich dieses Programm-Konstrukt in mein Programm einbetten und dann müßte es laufen.
Es ist ja an dem Terminal eigentlich immer nur jeweils einer zugange und deswegen gibt es hier keine Überschneidungen und zu evtl. anderen Systemen im Hausschon garnicht. Diese Drucker sind dann nicht im Kellnersystem installiert. Wenn ein Kellner ein Bier bestellt, so geht der Bestellbon direkt zum Bardrucker, der dann der augenblickliche Standarddrucker ist. Bestellt ein anderer Kellner Speisen, dann geht diese Bestellung automatisch zum durch 766767 veränderte Standardwahl des Druckers eben zum Küchendrucker.
Usw usw.
Es ist zwar ein wenig umständlich für den Programmierer, aber der Kellner hat es dann wesentlich leichter.In der Testversion klappte alles. Jetzt muß ich nur noch alles entsprechend umfriemeln und in mein Hauptprogramm einbetten.
Ich glaube also, mit dieser Hilfe jetzt zurechtzukommen und betrachte die Frage als erfolgreich gelöst.
Vielen Dank.