| |
|
|
- Seite 1 - |
|
Rolf Koch | Hallöchen heut frag ich mal so in die Runde, da ich mit Drucken nie soviel gemacht habe. Folgende Problemstellung: Wir haben bei uns ein Computer mit Drucker auf dem Lager. Wenn ein Kunde ein Gerät gekauft hat und an der Kasse bezahlt hat, so kommt bei uns ein entsprechender Beleg aus dem Drucker, damit wir die Waschmaschine, TV oder solch ein Zeugs raussuchen können. Jetzt würde ich gerne ein nebenbeilaufendes Tool schreiben, welches einen Sound abspielt, wenn ein solcher Beleg aus dem Drucker kommt. Meint Ihr, ich könnte dies irgendwie erreichen? |
|
|
| |
|
|
| |
|
- Seite 3 - |
|
|
Rolf Koch | Juhu mit Timer gehts perfekt. Sound kommt bei Druck *freu* Danke E.T. Jetzt nur bisschen spielen um dann später nen Testlauf in der Fa. zu tätigen ^^ Mal kucken was in der Tempdatei drin steht, damit ich nur auf spezielle Ausdrucke reagieren kann. Denn sonst druckt einer ein normales Dokument und es wird behauptet: Achtung Kunde im Anmarsch *lol* |
|
|
| |
|
|
|
Rolf Koch | Bohhha Danke Andreas wird ja immer cooler ^^ - noch ne Variante Andreas, was meinste, kann man irgendwie erkennen, worum es sich beim Druck handelt? |
|
|
| |
|
|
|
E.T. | Schau mal in die .SPL-Datei im Spooler. Da steht so einiges drinn (woher, Dateiname etc.) (Mach einfach mit Notepad oder so auf...)
EDIT: Der Datei-Name steht nicht drin, aber man nachvollziehen, wo es herkommt: %!PS-Adobe-3.0 %%Title: PRFellow 2001 %%Creator: PScript5.dll Version 5.2 %%CreationDate: 12/21/2008 12:55:44 %%For: Mario %%BoundingBox: (atend) %%Pages: (atend) %%Orientation: Portrait %%PageOrder: Special |
|
|
| 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... | 21.12.2008 ▲ |
|
|
|
|
Rolf Koch | Stimmt E.T. (warum komme ich mir eigentlich komisch vor wenn ich Dich anspreche *lol*) Komme mir im Moment vor wie ein Anfänger. @Andreas: Ich nutze XPSE und FindNextPrinterChangeNotification wird z.b. als undeclariert angemosert. |
|
|
| |
|
|
|
E.T. |
...(warum komme ich mir eigentlich komisch vor wenn ich Dich anspreche *lol*) ...
Wieso, hab ich mir doch selbst rausgesucht. Und unten steht auch noch ein richtiger Name, falls Dir das besser gefällt
Komme mir im Moment vor wie ein Anfänger.
Warum ?? Ich bin auch nur ein Hobby-Programmierer. Ich hab mir bei Profan nur angewöhnt, lieber erst mal nach nem einfachen Weg zu suchen, als irgendwelche APIs zu verwursteln, die es dann bei einem anderen BS wieder mal nicht gibt. |
|
|
| 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... | 21.12.2008 ▲ |
|
|
|
|
E.T. | FindNextPrinterChangeNotification >> siehe Anhang, vielleicht hilfts was.. |
|
|
| 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... | 21.12.2008 ▲ |
|
|
|
|
Rolf Koch | Mensch Mario, klar kenn ich Deinen Namen Aber ich finds eben lustig mit einem Wesen aus meiner Kindheit zu sprechen Naja, das mit Anfänger bezieht sich darauf, weil ich nicht dahinterkomme warum XPSE als undeklariert meckert. |
|
|
| |
|
|
|
Andreas Miethe
| Rolf Koch
@Andreas: Ich nutze XPSE und FindNextPrinterChangeNotification wird z.b. als undeclariert angemosert.
Ich benutze kein XPSE, vielleicht kann If das irgendwann mal erweitern.
Hier ein Code der ein paar Infos ermittelt. KompilierenMarkierenSeparieren $H windows.ph
DEF Get_STDPrinter(1) Substr$(ReadIni$("WIN.INI","Windows","Device"),@&(1),",")
Var InfoBuffer& = 0
Var Spool& = ImportDll("Winspool.drv","")
cls
DEF &PRINTER_CHANGE_JOB $FF00
DEF &INFINITE $FFFFFFFF
DEF &PRINTER_CHANGE_ADD_JOB $100
Declare JOB_INFO_1#
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 Printer$ = Get_STDPrinter(1)
OpenPrinterA(Addr(Printer$),Addr(hPrinter&),0)
chgObject& = FindFirstPrinterChangeNotification(hPrinter&,&PRINTER_CHANGE_JOB, 0, 0)
Repeat
~WaitForSingleObject(chgObject&,200)200 Millisekunden warten
fcnreturn& = FindNextPrinterChangeNotification(chgObject&, Addr(pdwChange&),0,0)
If fcnreturn&
If pdwChange& = &PRINTER_CHANGE_ADD_JOB
Print "neuer Druck-Job"
EnumJobsA(hPrinter&,0,1,1,0,0,Addr(BytesNeeded&),Addr(BytesReturned&))
Dim JOB_INFO_1#,BytesNeeded&
Repeat
EnumJobsA(hPrinter&,0,1,1,JOB_INFO_1#,BytesNeeded&,Addr(BytesNeeded&),Addr(BytesReturned&))
If BytesReturned&
Locate 0,0
Print "Druckername :"+String$(Long(JOB_INFO_1#,4),0)
Print "Dokument : "+String$(Long(JOB_INFO_1#,16),0)
Print "Seiten : "+str$(Long(JOB_INFO_1#,36))
Print "Status : "+str$(Long(JOB_INFO_1#,24))
Endif
Until BytesReturned& = 0
Print "Druck beendet"
endif
Endif
Until A& = 1Abbruchbedingungen vielleicht besser mit einem Button bestimmen ?
FindClosePrinterChangeNotification(chgObject&)
ClosePrinter(hPrinter&)
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 : [...] | 21.12.2008 ▲ |
|
|
|
|
Rolf Koch | @Andreas Deinen Code kann ich irgendwie nicht in meine Anwendung einbauen, da ich einen Timer nutze und diesen auch weiterhin nutzen möchte. Wenn ich den Timer nutze und Deinen Code in %WMTIMER setze, so muss ich den Timer extrem niedrig setzen und alles andere klappt natürlich nicht mehr: Menü in Taskbar und Co aufgrund der kurzen Timerdauer. Es kommen auch nicht alle Dokumentennamen an - z.b. aus Paint, Winhelp u.s.w.
@E.T. Klappt zumindest hier super und perfekt. Aber leider ist der Systemordner Spooler in der Fa. zugriffgeschützt und ich kann dort natürlich nichts auslesen. Und wenns dann klappt mit dem Auslesen und ich die Datei einlesen will (es geht nur die SHD Datei, denn die SPL ist immer leer) dann werden die Dateien von Windows nicht mehr automatisch gelöscht. Einer eine Idee? |
|
|
| |
|
|
|
| Normalerweise haben solche Aufgaben nen eigenen Thread, also bleibt Dir nur der Zweitprozess - erlaubt? |
|
|
| |
|
|
|
Frank Abbing | Du könntest die API StartDoc hooken. Besser vielleicht StartPage, weil die andere API von älteren Programmen mittels Escape simuliert werden könnte. Das wäre eine sehr sichere Methode, denke ich. |
|
|
| |
|
|
|
| Kann er ja eben mit XProfan nicht... darum ja meine Frage ob Rolf sich am nötig Zweitprozess stören würde.
Oder Du bastelst in nen eigenen Thread per DLL Frank! (obwohl ich fast davon überzeugt bin, dass jeder neue Fremd-Thread innerhalb des XProfanprozesses zu Problemen führt - leider nur so selten) |
|
|
| |
|
|