| |
|
|
- 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 |
|
|
| |
|
|
|
« 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. |
|
|
| |
|
|
|
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 ^^ |
|
|
| |
|
|
| |
|
- Seite 7 - |
|
|
| Schon versucht das Spoolerverzeichnis zu überwachen? |
|
|
| |
|
|
|
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 |
|
|
| |
|
|
|
| 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. |
|
|
| |
|
|
|
Rolf Koch | Ok, gesetzt der Fall es würde gehen. Würde die Zeit reichen um vor dem automatischen löschen die Datei einzulesen? |
|
|
| |
|
|
|
| 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? |
|
|
| |
|
|
|
| Ausserdem... vlt. liesse sich die Datei auch zum Lesen öffnen und dann würde sie nicht gelöscht. ^^ |
|
|
| |
|
|
|
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. |
|
|
| |
|
|
|
| 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... |
|
|
| |
|
|
|
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 |
|
|
| |
|
|
|
| Rolf Koch (25.11.10)
Ich gehe jetzt meine Gedanken in den Spoolträumeordner ablegen ^^ - da hab ich wenigstens Zugriffsrechte drauf
Temporär! |
|
|
| |
|
|