Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Druckerwareschlange überwachen / SprinterSpy von Peter Below (https://www.delphipraxis.net/188346-druckerwareschlange-ueberwachen-sprinterspy-von-peter-below.html)

swestner 23. Feb 2016 10:46

Druckerwareschlange überwachen / SprinterSpy von Peter Below
 
Hallo,

ich stehe vor dem problem, die Druckerwarteschlange zu überwachen.

Peter Below hat da ja was vor 13 Jahren entwickelt:
http://cc.embarcadero.com/Item/20307

Ich habe mir das mal angesehen (unter Delphi 2007) und grundsätzlich funktioniert das ja, bis auf:

1. Als Dokumentname wird mir immer "Lokale Druckerdatendatei" ausgegeben und nicht z. B. "Microsoft Word - Dokument1" wie es im Spooler steht

2. Wenn der Code mit Range Checks compiliert wird, gibt es Range Check-Fehler. Das liegt wohl an dem komischen Konstrukt:

Code:
  _PRINTER_NOTIFY_INFO = record
    Version: DWORD;
    Flags: DWORD;
    Count: DWORD;
    aData: array[0..0] of TPrinterNotifyInfoData;
  end;
und der Schleife

Code:
For i:=0 To pni^.Count-1 Do
  Case pni^.aData[i].Field Of
Das TPrinterNotifyInfoData wiederholt sich Count-1-mal ist aber nur mit [0..0] deklariert. Range Check abschalten und dann Count-mal das auslesen wäre also in Ordnung, ist aber nicht Delphi-like. Wie könnte das anders gemacht werden?

3. Seitennummer, usw. werden auch nicht korekt ausgelesen.

Hat mit der Komponente jemand Erfahrung und diese vielleicht erweitert / korrigiert?

Grüße

Stefan

Assarbad 6. Sep 2016 10:32

AW: Druckerwareschlange überwachen / SprinterSpy von Peter Below
 
Zu 2.: Also wegen der Bereichsüberprüfung mach dir mal keine Sorgen. Die kannst du bekanntlich lokal ausschalten. Das "komische Konstrukt" ist übrigens völlig normal und wird in verschiedenen Teilen der Win32-API so verwendet.

Ich kann mir leider dieses alte Projekt nicht einmal herunterladen, da Embarcadero dafür ein Konto verlangt. Das habe ich meiner Erinnerung schon lange nicht mehr.

Zu 1.: Die Beschreibung erwähnt aber MSDN-Library durchsuchenFindFirstPrinterChangeNotification und du interessierst dich vermutlich ausschließlich für Benachrichtigungen des Typs PRINTER_CHANGE_JOB. Damit kann man arbeiten. Welche ID (einer JOB_NOTIFY_FIELD_*-Werte) hat denn der ausgelesene Eintrag? Handelt es sich da um JOB_NOTIFY_FIELD_DOCUMENT oder was genau liest der Code von Peter Below aus?

Siehe MSDN-Library durchsuchenPRINTER_NOTIFY_INFO_DATA structure.

Zu 3.: siehe meine Frage zu 1. Welchen Typs ist der Eintrag welcher ausgelesen wird um die Seitennummer zu ermitteln?

swestner 6. Sep 2016 10:42

AW: Druckerwareschlange überwachen / SprinterSpy von Peter Below
 
Danke für die Antwort. Inzwischen hat das aber keine Relevanz mehr weil wir festgestellt haben, daß sich nur lokale Drucker mit dem Tool überwachen lassen und keine Netzwerkdrucker. Damit ist es für uns unbrauchbar.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz