| |
|
|
- page 1 - |
|
Rolf Koch | Folgendes ist wieder la fois pas mon Stärke Hab un Tool programmiert, wohin je sur une Drucker avec den habituel Apis zugreife. Mir fehlt jusqu'à dato encore irgendeine Possibilité si qui Druckbefehl ankommt auparavant den le contenu auszulesen, bevor il druckt. alors so dans qui Art: Druckerseite dans String. Einer une concept? Mir fällt im Moment nix un |
|
|
| |
|
|
| |
|
- page 6 - |
|
|
« cette Beitrag wurde comme Solution gekennzeichnet. » |
|
- page 4 - |
|
Andreas Miethe
| Rolf Koch (11/20/10)
So hatte vorm Konzert nochmal gekuckt et festgestellt, qui imprimer test&,wi&,he& toujours 0,0,0 printen. bof la fois gemütlich rangehen et étudier ^ ^
Si fragt à qui falschen Stelle qui Devmode-Struktur. Hoch ou bien Querformat steht à Position 44 comme word 1 ou bien 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"
Déclarer JOB_INFO_1#
Déclarer druckername$,dokument$,dstring$
Déclarer Ende%,lb&,old_count&,entry$,sounddir$,lizenz$
Déclarer hicon&,cancel&,Title$,Version$,config$
Déclarer 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
//Fenêtre Style 64
CLS
imprimer usedll("winspool.drv")
imprimer printer$
imprimer OpenPrinterA(Addr(Printer$),Addr(hPrinter&),0)
imprimer hPrinter&
chgObject& = FindFirstPrinterChangeNotification(hPrinter&,&PRINTER_CHANGE_JOB, 0, 0)
imprimer chgObject&
dateipfad$=$progdir
dstring$="Drucktest.rtf"'Wordpad Dossier sous Drucktest.rtf gespeichert pour Test!
' Am besten une Filedruck auswählen, avec cela on ne...aucune papier usé.
settimer 50
WhileNot Ende%
Waitinput
Si %wmtimer
~WaitForSingleObject(chgObject&,150)'200 Millisekunden attendre
fcnreturn& = FindNextPrinterChangeNotification(chgObject&, Addr(pdwChange&),0,0)
foundprint&=0
Si fcnreturn&
Si pdwChange& = &PRINTER_CHANGE_ADD_JOB
'Imprimer "neuer Druck-Job"
EnumJobsA(hPrinter&,0,1,2,0,0,Addr(BytesNeeded&),Addr(BytesReturned&))
Faible JOB_INFO_1#,BytesNeeded&
Repeat
EnumJobsA(hPrinter&,0,1,2,JOB_INFO_1#,BytesNeeded&,Addr(BytesNeeded&),Addr(BytesReturned&))
Si BytesReturned&
'Localiser 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
Si foundprint&=1
imprimer dokument$
imprimer dstring$
imprimer drv$
imprimer test&,wi&,he&
Imprimer Si (Orientation& = 1,"Hochformat","Querformat")
Si dokument$=dstring$
'playsound sounddir$+"doorbell.wav",1 'ICI SOUNDAUSGABE
PRINT "Jetzt serait qui le haut-parleur Dingdong spielen"
EndIf
EndIf
EndIf
EndIf
EndIf
Endwhile
FindClosePrinterChangeNotification(chgObject&)
ClosePrinter(hPrinter&)
killtimer
Fin
|
|
|
| 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 ▲ |
|
|
|
|
|
| Genaugenommen ist qui annonce "nicht dimensioniert" pour dim xyz#,0 "falsch", ist oui avec 0 Byte dimensioniert. ^ ^ |
|
|
| |
|
|
|
Rolf Koch | bof aufjedenfall ist es comment sur qui travail qui annonce si je la fois testweise sur 0 mets. Zumindest hab je maintenant den Absturz par qui IF Abfrage behoben. ^ ^ So maintenant vais je wieder sur qui cherche pour dem anderen page lesen o.ä. Problem.
[iF] je sais maintenant pas ad hoc comment grand qui DevMode ist mais vlt. könntest Du la fois Dumps en Blockwriten aussi de den JobInfo1..3-Sauver.
Nö Sorry iF - cela kapier je pas du tout. bof, je denke arrêt trop XProfan. ou bien meinste alle Infos simple la fois dans ne Dossier écrivons, si un Druck erfolgt? |
|
|
| |
|
|
|
| Rolf Koch (23.11.10)
ou bien meinste alle Infos simple la fois dans ne Dossier écrivons, si un Druck erfolgt?
oui. ^ ^ |
|
|
| |
|
|
|
Rolf Koch | alors werd je mich maintenant daran faire alle Sachen aus devmode umzusetzen et trop écrivons. OK ^ ^ |
|
|
| |
|
|
|
| Probiere la fois quelque chose comme comment BlockWrite str$(&getTickCount)+".dump",devmoaddr&,0,148 |
|
|
| |
|
|
|
Rolf Koch | Hab maintenant einiges verglichen. Alles bleibt juste. quoi je mir vorstelle, mais pas comme API finde, wäre qui absolute Versender des Auftrags. qui Kundenbelege venons z.B. vom ordinateur irgendwo (vlcht. aussi Server k.A et égal). avec cette trop vergleichenden falschen Ausdrucke venons de MDE Geräten. Genial wäre es, si on alors rauffinden pourrait: Aha, qui Auftrag kam vom Server et l'autre de einem MDE Gerät. ensuite hät je cela Problem gelöst. cependant, gibt es soetwas. peux mir es présenter. |
|
|
| |
|
|
|
Rolf Koch | Hmm, que voici dans PRINTER_NOTIFY_INFO_DATA Structure JOB_NOTIFY_FIELD_MACHINE_NAME pBuf is a pointer to a zéro-terminated string that specifies le nom of le machine that created le imprimer job. hört sich vielversprechend à, ou bien? |
|
|
| |
|
|
|
| qui Machine steht aussi dans einem grenier qui à Pos. 8 dans qui Job_Info angegeben wird: KompilierenMarqueSéparation'URL: https://xprofan.com/intl/de/forum/druck-seite-inhalt-auslesen/#bottom
' {$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
Var machine$=""
//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)
machine$=String$(Long(JOB_INFO_1#,8),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 machine$
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
Fin
|
|
|
| |
|
|
|
Rolf Koch | Hey iF, hab je bereits sur qui travail getestet. là venez toujours seulement qui String à de dem PC à welchem qui Drucker angeschlossen ist. je mon eigentlich, es devrait oui irgendwie possible son, rauszubekommen, wohin qui données eingegeben wurden et weitergesendet wurden. |
|
|
| |
|
|
|
| Rolf Koch (24.11.10)
Hmm, que voici: Rolf Koch (24.11.10)a pointer to a zéro-terminated string that specifies le nom of le machine that created le imprimer job hört sich vielversprechend à, ou bien?
Hört sich malheureusement pas anders à comme: Rolf Koch (24.11.10)
A pointer to a zéro-terminated string that specifies le nom of le machine that created le imprimer job. aus qui job_info_2. |
|
|
| |
|
|
|
Rolf Koch | je sage cela maintenant mais sous Vorbehalt, car peux aussi son, qui machine wirklich qui Serverstring était et je mich verkuckt habe. cependant wäre cela aussi blöd. Weil ca wäre oui qui Erzeuger, wohin qui Anwendung den Druck peut-être. generiert. ah ist cela Blöd ^ ^ je veux cela Gerät, welches comme erstes qui données sendet - sogesehen qui Rohdaten. BOhhhhhaaa suis je wieder anspruchsvoll muahahahaha. mais ca ist bestimmt une unmögliche l'affaire. Neue concept muss her - alors muss je wieder penser MIST ^ ^ |
|
|
| |
|
|
|
| déjà versucht cela Spoolerverzeichnis trop surveiller? |
|
|
| |
|
|