| |
|
|
- Page 1 - |
|
Rolf Koch | Folgendes ist wieder mal nicht meine Stärke Hab ein Tool programmiert, wo ich auf einen Drucker mit den solito Apis zugreife. Mir fehlt bis dato noch irgendeine Möglichkeit wenn der Druckbefehl ankommt vorher den Inhalt auszulesen, bevor er druckt. Also so in der Art: Druckerseite in String. Einer eine Idee? Mir fällt im Moment nix ein |
|
|
| |
|
|
|
« Dieser Beitrag wurde als Lösung gekennzeichnet. » |
|
Andreas Miethe
| Rolf Koch (11/20/10)
So hatte vorm Konzert nochmal gekuckt und festgestellt, daß print test&,wi&,he& Immer 0,0,0 printen. Naja mal gemütlich rangehen und studieren ^^
If fragt an der falschen Stelle der Devmode-Struktur. Hoch oder Querformat steht an Position 44 als word 1 oder 2
{$cleq}
$H Windows.ph
$H winspool.ph
DEF Get_STDPrinter(1) Substr$(ReadIni$("WIN.INI","Windows","Device"),@&(1),",")
DEF &PRINTER_CHANGE_JOB $FF00
DEF &INFINITE $FFFFFFFF
DEF &PRINTER_CHANGE_ADD_JOB $100
DEF OpenPrinterA(3) !"winspool.drv","OpenPrinterA"
DEF FindFirstPrinterChangeNotification(4) !"winspool.drv","FindFirstPrinterChangeNotification"
DEF FindNextPrinterChangeNotification(4) !"winspool.drv","FindNextPrinterChangeNotification"
DEF EnumJobsA(8) !"winspool.drv","EnumJobsA"
DEF FindClosePrinterChangeNotification(1) !"winspool.drv","FindClosePrinterChangeNotification"
DEF ClosePrinter(1) !"winspool.drv","ClosePrinter"
Declare JOB_INFO_1#
Declare druckername$,dokument$,dstring$
Declare Ende%,lb&,old_count&,entry$,sounddir$,lizenz$
Declare hicon&,cancel&,Title$,Version$,config$
Declare wav$,dateipfad$,belege$,wurde$,new$,abelege%
Var InfoBuffer& = 0
Var BytesNeeded& = 0
Var BytesReturned& = 0;
Var A& = 0
Var L& = 0
Var chgObject& = 0
Var pdwChange& = 0
Var fcnreturn& = 0
Var hPrinter& = 0
Var foundprint& = 0
Var Printer$ = Get_STDPrinter(1)
Var devmoaddr&=0
Var drv$=""
Var wi&=0
Var he&=0
Var Orientation&=0
Var test&=0
//WindowStyle 64
CLS
print usedll("winspool.drv")
print printer$
print OpenPrinterA(Addr(Printer$),Addr(hPrinter&),0)
print hPrinter&
chgObject& = FindFirstPrinterChangeNotification(hPrinter&,&PRINTER_CHANGE_JOB, 0, 0)
print chgObject&
dateipfad$=$progdir
dstring$="Drucktest.rtf"'Wordpad File unter Drucktest.rtf gespeichert per Test!
' Am besten einen Filedruck auswählen, damit man kein Papier verbraucht.
settimer 50
WhileNot Ende%
Waitinput
If %wmtimer
~WaitForSingleObject(chgObject&,150)'200 Millisekunden warten
fcnreturn& = FindNextPrinterChangeNotification(chgObject&, Addr(pdwChange&),0,0)
foundprint&=0
If fcnreturn&
If pdwChange& = &PRINTER_CHANGE_ADD_JOB
'Print "neuer Druck-Job"
EnumJobsA(hPrinter&,0,1,2,0,0,Addr(BytesNeeded&),Addr(BytesReturned&))
Dim JOB_INFO_1#,BytesNeeded&
Repeat
EnumJobsA(hPrinter&,0,1,2,JOB_INFO_1#,BytesNeeded&,Addr(BytesNeeded&),Addr(BytesReturned&))
If BytesReturned&
'Locate 0,0
druckername$=String$(Long(JOB_INFO_1#,4),0)
dokument$=String$(Long(JOB_INFO_1#,16),0)
foundprint&=1
devmoaddr&=Long(JOB_INFO_1#,40)
test&=long(devmoaddr&,104)
wi&=long(devmoaddr&,108)
he&=long(devmoaddr&,112)
Orientation&=word(devmoaddr&,44)
drv$=string$(devmoaddr&,0)
EndIf
Until BytesReturned& = 0
If foundprint&=1
print dokument$
print dstring$
print drv$
print test&,wi&,he&
Print If (Orientation& = 1,"Hochformat","Querformat")
If dokument$=dstring$
'playsound sounddir$+"doorbell.wav",1 'HIER SOUNDAUSGABE
PRINT "Jetzt würde der Lautsprecher Dingdong spielen"
EndIf
EndIf
EndIf
EndIf
EndIf
EndWhile
FindClosePrinterChangeNotification(chgObject&)
ClosePrinter(hPrinter&)
killtimer
End
|
|
|
| Gruss Andreas ________ ________ ________ ________ _ Profan 3.3 - XProfanX2 Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher Homepage : [...] | 20.11.2010 ▲ |
|
|
|
|
|
| Ich zumindest verstehe nicht so ganz was Du meinst. ^^
Drucken ist ja im Grunde auch nur auf nem DC pinseln - Du könntest vor EndPaint einfach mal probieren von %pdc nach %hdc zu kopieren.
Meinst Du sowas? |
|
|
| |
|
|
|
Rolf Koch | Lol Sorry - Nein ich hab da doch ein Programm in der Fa. laufen, welches erkennt, wenn ein bestimmter Druckbefehl vorliegt, also wenn ein Kunde bezahlt hat und die Ware abholen kommt. Ich hab den Druck ja nicht geschrieben, sondern überwache nur den Drucker. Also wenn Du es so schreibst, wird es wohl nicht possibile sein, den Inhalt des an den Drucker gesandten Textes herauszubekommen, da es sich um Grafik handelt? Vorher war der String an den Drucker eindeutig und lautete Warenausgabe.grp jetzt lautet er nur noch JavaPrinting und dieser bezieht sich auch auf andere Vorgänge die der Drucker ausdruckt. Deshalb müsste ich zusätzliche Dinge herausfinden, welche sich nur im Text erkennen lassen welcher der Drucker rauswirft. |
|
|
| |
|
|
|
E.T. | Könnte man den Drucken-Befehl nicht 2x veranlassen, 1x in File (was eigentl. jeder Druckertreiber kann) und dann nochmal zum Drucker ?? |
|
|
| Grüße aus Sachsen... Mario WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte... | 17.11.2010 ▲ |
|
|
|
|
Rolf Koch | Nein ich hab keinen Einfluss auf den Drucker. Es ist die Firmensoftware und ich warte halt auf dem Rampencomputer aus. Da hab ich nichts mit zu tun - absolut höhere Macht Im Moment erkenne ich ja wenn ein Druck kommt und erkenne den Dokumententitel und reagiere darauf. Es müsste also noch zusätzlich was geben wie: Inhalt in Variable lesen - Verarbeiten .... Di più kann ich dort nicht machen. |
|
|
| |
|
|
|
Rolf Koch | Wobei mir es so langsam nach Treibergeschichte aussieht, oder - dann lasse ich die Gedanken jetzt lieber mal LOL. Hoffe, daß dem nicht so ist ^^ |
|
|
| |
|
|
|
E.T. | Kannst Du nicht an deinem RampenComputer den Drucker so einstellen, das dieser perm. in un File druckt ?? Dies sollte ja, unabhängig vom Programm, welches druckt, possibile sein. Und dann einfach per eigenem Prog feststellen, ob eine "Druckerdatei" vorliegt, diese auswerten und dann erst ggf. zum Drucker schicken (weglöschen und auf die nächste warten) ??? |
|
|
| Grüße aus Sachsen... Mario WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte... | 17.11.2010 ▲ |
|
|
|
|
Rolf Koch | Lol ich glaub ich kann mich nicht richtig ausdrücken. Ich kann und darf da nicht einfach einstellen in File, weil dort wichtige Belege z.B. per die Unterschrift per die Ausgabe an Kunden rauskommen. Ich kann ja nicht die File mit dem Gerät an die Ausgabe nehmen ^^ P.S. Ich kann also nicht einfach Druck in File einstellen. Höchste Ebene wie gesagt. |
|
|
| |
|
|
|
E.T. | Ah ja, ich kappier es: Du könntest nicht mal beeinflussen, ob ein Druck auf diesem oder jenem Drucker (bei z.B. 2 Druckern) rauskommt. Das iss dann nat. doof... |
|
|
| Grüße aus Sachsen... Mario WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte... | 17.11.2010 ▲ |
|
|
|
|
Rolf Koch | Eben Mario so sieht es aus. Es werden ja noch wesentlich mehr Sachen dort circa Drucker gesendet. Es muss wirklich Druckerinhalt nach Variable sein. Wenns nicht geht mach ich mir weitere Gedanken die Parameter zur Erkennung ob es der richtige Auftrag ist zu erkennen und verwerfe den jetzigen Gedanken. Wobei: Andreas Miethe war heut noch nicht hier - LOOOOOOL - da setz ich schwer Hoffnung rein ^^ |
|
|
| |
|
|
|
E.T. | Muss aber trotzdem nochmal dumm fragen (man kann ja nur lernen):
...Vorher war der String an den Drucker eindeutig und lautete Warenausgabe.grp jetzt lautet er nur noch JavaPrinting....
Seh ich das jetzt falsch, das vorher die File "Warenausgabe.grp" an deinen Comp. zum drucken geschickt wurde ?? Kannst du, wenn alles "JavaPrinting" heist, in die File schauen (welche zum Drucker gesendet wird), ob du einen Dokumenten-Titel auslesen könntest ?? Oder darfst du das auch nicht...
(Nur mal so, weils mich interessiert...) |
|
|
| Grüße aus Sachsen... Mario WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte... | 17.11.2010 ▲ |
|
|
|
|
Rolf Koch | Darum geht es ja. Vorher brauchte ich nicht in die File zu schauen, welche den wichtigen auszufilternden Titel Warenausgabe.grp trug. Jetzt ist es vereinheitlicht worden und der Titel lautet in vielen Teilen JavaPrinting. Somit wird meine Aktion nicht nur bei Warenausgabe corsa, sondern bei auch anderen Druckaufträgen.
Du schreibst halt genau das was ich will: Jetzt müsste ich in die File schauen. Wir selbst schubsen diese File aber nicht an, sondern die kommt vom Server und.... und... und... - wir haben keinen Einfluss auf die File u.s.w. - die wird von der Firmen Hauptanwendung generiert.
Nachtrag: Der Dokumententitel ist ja jetzt JavaPrinting anstatt Warenausgabe.grp - beides das gleiche Verfahren. |
|
|
| |
|
|