Italia
Foro

Druck Seite Inhalt auslesen

 
- 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
 
17.11.2010  
 



« 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?
 
17.11.2010  
 




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.
 
17.11.2010  
 




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.
 
17.11.2010  
 




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 ^^
 
17.11.2010  
 




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.
 
17.11.2010  
 




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 ^^
 
17.11.2010  
 




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.
 
17.11.2010  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

47.256 Views

Untitledvor 0 min.
Christof Neuß20.05.2018
Manfred Barei26.07.2015
Uwe Lang06.09.2013
Pauli14.05.2013
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie