Deutsch
Forum

Druckerauftrag ermitteln

 
- 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?
 
20.12.2008  
 



 
- 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*
 
21.12.2008  
 




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?
 
21.12.2008  
 




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.
 
21.12.2008  
 




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..

4 kB
Hochgeladen:21.12.2008
Ladeanzahl133
Herunterladen
 
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.
 
21.12.2008  
 




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& = 0Var 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?
 
22.12.2008  
 



Normalerweise haben solche Aufgaben nen eigenen Thread, also bleibt Dir nur der Zweitprozess - erlaubt?
 
22.12.2008  
 




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.
 
22.12.2008  
 



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)
 
23.12.2008  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

111.280 Betrachtungen

Unbenanntvor 0 min.
rquindt17.05.2020
Rainer Hoefs10.03.2018
Rolf Koch20.01.2018
p.specht08.02.2017
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