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  
 



 
- Page 5 -


« Dieser Beitrag wurde als Lösung gekennzeichnet. »

- Page 4 -



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  
 




Rolf
Koch
Leider ist das Thema doch nicht erledigt. Alles andere auf der Arbeit kapiert es schön, von wegen Quer und Hochformat. Ausser genau dieses Teil was ich unterscheiden muss, bleibt mit anderen Ausdrucken gleich und schreibt: Hochformat. Also muss ich doch eine andere Lösung finden, wie Inhalt lesen oder so
 
22.11.2010  
 




Rolf
Koch
Nachtrag: Wobei ich nicht weis, wie die dann das Querformat herstellen und drucken in der Anwendung. Bin mich am druchkämpfen in den Api's.
Irgendwas muss es geben um herauszubekommen, bei gleichem Titel irgendwas unterschiedliches im Druckdokument zu finden. Es gibt doch eigentlich nichts, was nicht geht, oder?
 
23.11.2010  
 



Ich weiß jetzt nicht ad hoc wie grande die DevMode ist aber vlt. könntest Du mal Dumps davon Blockwriten wie auch von den JobInfo1..3-Speichern.

Das klärt imho zwar nicht das Auslesen der Druckersteuerzeichen aber hilft halt beim Vergleichen.
 
23.11.2010  
 




Rolf
Koch
Ich werd noch verrückt.
Neues Problem, obwohl das Programm in der Form seit langer Zeit corre.
Programm startet morgens um 09:00 und zum 3ten mal bekomme ich so um 19:00 Uhr eine Meldung: Bereichsvariable nicht dimensioniert. Komisch. Es gibt ja nur eine Bereichsvariable und die ist dimensioniert. Code liegt ja hier vor. Aber warum nach so langer Zeit?
Ich setze ja einen Timer auf 50. Ob es was mit diesem zu tun hat? Wäre unlogisch, aber possibile ist alles.
Es wird auch kein Dispose genutzt, lt. Aiuto gestattet, es wird also immer neu Dim benutzt. Aber ob es vlcht. daran liegt?
 
23.11.2010  
 



Rolf Koch (23.11.10)

Ich werd noch verrückt.


Haha!

Rolf Koch (23.11.10)

Neues Problem, obwohl das Programm in der Form seit langer Zeit corre.


Die vorherige Version oder die Neuere?

Rolf Koch (23.11.10)

Programm startet morgens um 09:00 und zum 3ten mal bekomme ich so um 19:00 Uhr eine Meldung: Bereichsvariable nicht dimensioniert. Komisch. Es gibt ja nur eine Bereichsvariable und die ist dimensioniert. Code liegt ja hier vor. Aber warum nach so langer Zeit?


Im Code steht Dim JOB_INFO_1#,BytesNeeded& - wenn BytesNeeded& 0 ist?

Denn Fall würde ich abprüfen.
 
23.11.2010  
 




Rolf
Koch
Die neue Version. Aber kann es 0 sein? - weil ja dort bereits ein Druckauftrag vorliegt.
 
23.11.2010  
 



Es ist steht imho nicht geschrieben das dort immer Werte > 0 ankommen. ^^

Die Meldung jedenfalls kann man mit:
KompilierenMarkierenSeparieren"provozieren".
 
23.11.2010  
 




Rolf
Koch
Aja, grad mal im Taskmanager beobachtet. Immer wenn ein Druck erkannt wurde und fertig ist, so steigt der Speicher um mind. 4k ??? Muss ich wohl doch etwas freigeben.
 
23.11.2010  
 




Rolf
Koch
Stimmt iF die Meldung kommt. Müsste ich also noch ein if drumrumbasteln, wenn bytesneeded = 0lig ist ^^
 
23.11.2010  
 



Rolf Koch (23.11.10)

Aja, grad mal im Taskmanager beobachtet. Immer wenn ein Druck erkannt wurde und fertig ist, so steigt der Speicher um mind. 4k ??? Muss ich wohl doch etwas freigeben.


Im obigen Code steht das Dim im Hauptprogramm wo die zugehörige Variable nur 1mal deklariert und immer bekannt ist - wenn Du das im eigentlichen Programm aber in einer Funktion ablaufen lässt dann fehlt naturalmente ein dispose. ^^
 
23.11.2010  
 




Rolf
Koch
Das Dim und die Variable wird ja nur im Hauptprogramm genutzt. Obiger Code ist fast der identische. Da gibt es nicht mehr viel mehr.
 
23.11.2010  
 




Rolf
Koch
Ich hab jetzt mal
KompilierenMarkierenSeparieren
if bytesneeded& > 0

    Dim JOB_INFO_1#,BytesNeeded&
    ..............
    ..............

endif

reingehauen. Mal kucken auf der Arbeit, was passiert.
Danke iF für die Idee :-pan>
 
23.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.257 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