| |
|
|
- Page 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 potuto dies irgendwie erreichen? |
|
|
| |
|
|
| |
|
- Page 4 - |
|
|
E.T. |
...Aber leider ist der Systemordner Spooler in der Fa. zugriffgeschützt und ich kann dort naturalmente nichts auslesen. ...
Ist schon schlimm, wenn eine Firma selbst ihren Drucker-Server sichern muß (immer diese Programmierer, die versuchen, an alles mögliche ranzukommen )
@Rolf: Kommst Du denn an die Drucker-Einstellungen ran ?? Wenn das Problem nur in den Zugriffs-Rechten per das Win-Verzeichnis liegt, dann stell doch einfach im Drucker-Server ein anderes Spool-Verzeichnis ein, auf das du dann Zugriff hast. Dem Drucker ists egal, von wo aus er beschickt wird (naturalmente sollte man das Verzeichnis nicht ändern, während Druckaufträge aktiv sind ).
Das Spool-Verzeichnis per alle Drucker kannst du wie folgt ändern: 1. "Drucker und Faxgeräte" öffnen (Systemsteuerung oder Start) 2. In diesem Fenster ins Leere mit der rechtem Maustaste klicken 3. Servereigenschaften wählen 4. Unter "Erweiterte Optionen" das Spool-Verzeichnis ändern und freuen, das du unter z.B. C:MeinSpooler Vollen Zugriff hast.
Wenn du auf diese Einstellung auch nicht zugreifen kannst :
Um auf die File unabhängig vom Auftrag zuzugreifen, sollten diese sofort bei Eintreffen kopiert werden*, dann kannst du diese auswerten, und Win kann sie löschen, wenn Drucker sagt: "haben fertig" oder "Haben alles im Speichel gespeichelt" (sagen aber nur Chinesische "Made-in-Hongkong"-Drucker ).
* zum kopieren bleibt nicht viel Zeit, bis Win diese File bei (Druck-) Erfolg löscht. Aber ein "normaler" Drucker hat nie soviel Speicher, als das die File nicht "lange genug" zum kopieren "da" ist.
(Alle Einstellungen aus Win XP, andere Win-Versionen können ab-(auf-)weichen !!!) |
|
|
| 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... | 23.12.2008 ▲ |
|
|
|
|
Rolf Koch | OK Danke Euch ich werde dann mal weiter schauen. |
|
|
| |
|
|
|
Frank Abbing | iF
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)
Mittels XPIA potrebbe das kein Problem darstellen. Immerhin liegt der Maschinencode dann als Dll vor und alle Vorraussetzungen sind erfüllt. Schon vergessen? Und dank MemoryModulen braucht keine Extradatei gespeichert zu werden. |
|
|
| |
|
|
|
Rolf Koch | @Andreas Hab mit Deinem Schnipsel und meinem Tool ein Programm hinbekommen, wie es nicht besser funktionieren kann -DANKE! Einzig der Timer auf 50 und waitforsingleobject lassen bisschen das Menü leiden. Aber die Leute in unserem Lager benötigen das Menü ja sowieso nicht und wenn halt 2 bis 3 mal klicken COOOOL und nochmals Danke, denn es corre wirklich zufriedenstellend und zuverlässig. @E.T. Auch Dir Danke per die Tipps, hab einiges dadurch hinzuglernt. Klar auch an die anderen Danke per die Tipps |
|
|
| |
|
|
|
Andreas Miethe
| @Rolf,
der Himweis von IF mit dem Zweitprocess war schon richtig, hätte ich so gemacht, wenn ich es programmieren müsste. Einfach die Procedur kompilieren und vom Programm die PRC-File starten lassen. Zwischen den beiden laufenden Threads kann man dann ohne Probleme auch Meldungen austauschen.
Aber gut, wenn es auch so funktioniert, freut es mich auch. |
|
|
| 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 : [...] | 24.12.2008 ▲ |
|
|
|
|
Rolf Koch | Ja Andreas stimmt, aber ich darf in keinster Weise ein Risiko eingehen, da ich mit einem kleinen Problem die ganze Warenausgabe kaputt machen würde und ich in diesem Fall wirklich absolut auf 100% sicher gehen will. |
|
|
| |
|
|
|
Rolf Koch | Leider komm ich mit dem neusten Problem meines Programmi nicht mehr klar. Folgendes: Programm lief Jahrelang einwandfrei durch und machte DING DONG, wenn ein Kundenbeleg gedruckt wurde. Seit ein neuer Drucker, welcher korrekt installiert wurde angeschlossen ist und Windows 7 auf dem Rechner corre, so macht er nur noch ab und zu DING DONG, also wenn er Lust darauf hat. Ich habe nichts geändert. Einer eine Idee? |
|
|
| |
|
|
|
| Juhuhuhu Rolf!
Leider habe ich kein Win7 zu hand aber kannst Du den Quelltext des Kernes der Anwendung mal posten? |
|
|
| |
|
|
|
Rolf Koch | Jepp hier, ist der eine Seite vorher von Andreas: KompilierenMarkierenSeparieren'URL: https://xprofan.com/intl/de/forum/druckerauftrag-ermitteln/?&pg=3
$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& = 1'Abbruchbedingungen vielleicht besser mit einem Button bestimmen ?
FindClosePrinterChangeNotification(chgObject&)
ClosePrinter(hPrinter&)
href='./../../funktionsreferenzen/xprofan/end/'>end
Was mir heute aufgefallen ist, ist die Tatsache, dass die lokal gedruckten Seiten alle ankommen. Wenn jedoch etwas vom Server an den Drucker gesendet wird, so bekommt mein Programm dies nicht "mehr" immer mit. Irgendeine Einstellung? Hmm? |
|
|
| |
|
|
|
Rolf Koch | Erlaube mir nochmal meine Frage erneut zu stellen. Wie geschrieben, wenn local circa Drucker wird erkannt, wenn aber circa Netzwerk gedruckt wird, also Auftrag kommt vom Server und Seite wird circa diesen Drucker geschickt, so wird nichts erkannt
Grüsse Rolf |
|
|
| |
|
|
|
Rolf Koch | Nochwas: Mir fällt gerade ein, daß der Drucker eine eigene IP hat, vielleicht ist hier ja ein Freak (iF ^^ ?), wer eine Idee hat um dort anzusetzen? Also irgendwas an die IP gesendet wird oder so? Nicht direkt mein Fachgebiet, aber ich suche nach Ersatzmöglichkeiten. Thx im Vorraus. |
|
|
| |
|
|
|
Andreas Miethe
| Hallo Rolf,
möglicherweise geht das circa eine WMI - Abfrage (Printjob). Komme im Moment leider nicht zu einem Beispiel, vielleicht am Feiertag oder dem nächstem Wochenende. |
|
|
| 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 : [...] | 28.10.2012 ▲ |
|
|
|