Deutsch
Forum

Druck Seite Inhalt auslesen

 
- Seite 1 -



Rolf
Koch
Folgendes ist wieder mal nicht meine Stärke
Hab ein Tool programmiert, wo ich auf einen Drucker mit den üblichen 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. »

- Seite 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 Datei unter Drucktest.rtf gespeichert für 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  
 



 
- Seite 6 -


Rolf Koch (24.11.10)
Hmm, das hier:

Rolf Koch (24.11.10)
a pointer to a null-terminated string that specifies the name of the machine that created the print job


hört sich vielversprechend an, oder?


Hört sich leider nicht anders an als:
Rolf Koch (24.11.10)
A pointer to a null-terminated string that specifies the name of the machine that created the print job.

aus der job_info_2.
 
25.11.2010  
 




Rolf
Koch
Ich sage das jetzt aber unter Vorbehalt, denn kann auch sein, daß Maschine wirklich der Serverstring war und ich mich verkuckt habe.
Jedoch wäre das auch blöd. Weil dies wäre ja der Erzeuger, wo die Anwendung den Druck evtl. generiert. Ach ist das Blöd ^^
Ich will das Gerät, welches als erstes die Daten sendet - sogesehen die Rohdaten.
BOhhhhhaaa bin ich wieder anspruchsvoll muahahahaha.
Aber dies ist bestimmt eine unmögliche Sache. Neue Idee muss her - also muss ich wieder denken MIST ^^
 
25.11.2010  
 



 
- Seite 7 -


Schon versucht das Spoolerverzeichnis zu überwachen?
 
25.11.2010  
 




Rolf
Koch
Jo ist geschützt und komme nicht ran. Kommst ja nicht mal im Explorer ran.
Leider, das wäre es, wenn ein Druck anliegt, direkt kmpl. Datei in String lesen und auswerten.
Achso: Und nicht auf die Idee kommen, anderes Spoolverz. zu wählen - darf ich nicht
 
25.11.2010  
 



Rolf Koch (25.11.10)
Kommst ja nicht mal im Explorer ran.


Besonders der Explorer würde ein "geschütztes" Verzeichnis _nicht anzeigen - da kann es schon sein das man dennoch normal darauf zugreifen kann - würde ich dennoch mal per cmd probieren.
 
25.11.2010  
 




Rolf
Koch
Ok, gesetzt der Fall es würde gehen. Würde die Zeit reichen um vor dem automatischen löschen die Datei einzulesen?
 
25.11.2010  
 



Das kann ich mir gut vorstellen zumal Du imho auch nicht grad die letzten paar Bytes benötigst. Auf welchem OS läuft Dein Programm?
 
25.11.2010  
 



Ausserdem... vlt. liesse sich die Datei auch zum Lesen öffnen und dann würde sie nicht gelöscht. ^^
 
25.11.2010  
 




Rolf
Koch
Läuft auf XP.
Wäre aber sehr schlecht wenn die nicht gelöscht würde, oder? Dann füllt sich das Verzeichnis.
Also hier kann ich zwar auf das Verzeichnis per Programm zugreifen, da ich aber Fileprint mache, wird sehrwahrscheinlich nicht gespoolt. Halt schlecht zum testen.
 
25.11.2010  
 



Rolf Koch (25.11.10)
Läuft auf XP.


Damit fällt leider die CommitSpoolData Funktion weg da erst ab Vista.  [...] 

Rolf Koch (25.11.10)
Wäre aber sehr schlecht wenn die nicht gelöscht würde, oder?


Zumindest würde sie nicht gelöscht solange sie zum Lesen geöffnet...
 
25.11.2010  
 




Rolf
Koch
Naja jetzt zuerst mal Bettchen. Aber ich kann mich vage daran erinnern, daß wir das Thema schonmal hatten, bevor ich das Tool in den jetztigen Stand brachte, weil es kein Zugriff gab.
Damals wollte ich den Spoolordner auf Dateien kontrollieren und es funktionierte nicht.
Naja jetzt zu müde um ....
Ich gehe jetzt meine Gedanken in den Spoolträumeordner ablegen ^^ - da hab ich wenigstens Zugriffsrechte drauf
 
25.11.2010  
 



Rolf Koch (25.11.10)
Ich gehe jetzt meine Gedanken in den Spoolträumeordner ablegen ^^ - da hab ich wenigstens Zugriffsrechte drauf


Temporär!
 
25.11.2010  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

46.956 Betrachtungen

Unbenanntvor 0 min.
Christof Neuß20.05.2018
Manfred Barei26.07.2015
Uwe Lang06.09.2013
Pauli14.05.2013
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


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