Entwickler-Ecke

Windows API - Probleme mit WaitForSingleObject UND FNotifyInfo!?


NeoXan - So 15.08.04 21:47
Titel: Probleme mit WaitForSingleObject UND FNotifyInfo!?

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
 FFinder := FindFirstPrinterChangeNotification(FPrinter, FFlags, 0nil);
  if FFinder = INVALID_HANDLE_VALUE then
    raise Exception.Create(\'Cannot create notification object\');
  try
    while not Terminated do
      if WaitForSingleObject(FFinder, 50) = WAIT_OBJECT_0 then
      begin
        if FindNextPrinterChangeNotification(FFinder, FFlags, nil, Pointer(FNotifyInfo)) then
        begin
          Synchronize(DoNotify);
          FreePrinterNotifyInfo(FNotifyInfo);
        end;
      end;

  finally
    FindClosePrinterChangeNotification(FFinder);
  end;


Das Prob ist, dass hat schon die Notification ausgelöst wird, wenn ein neuer Job in den PrinterQueue kommt. Nun versuche ich schon ziemlich lange folgendes...
Ich möchte einfach dann wahlweise diesen Job (sprich den letzten oder der der dieses Event ausgelöst hat) zu pausieren bzw. gestatten weiterzulaufen. Gibt es da eine bessere Möglichkeit oder muss ich wenn dieses NotifyEvent ausgelöst wird noch mal eine Prozedur mit EnumJobs etc. etc. machen. Nur wie bekomme ich dann heraus, welchen Job ich schon überprüft habe und welche nicht???

Hoffe mich hat jemand verstanden... :wink:

mfg
NeoXan

Moderiert von user profile iconMotzi: Topic verschoben


BenBE - So 15.08.04 22:02

Du kannst dir doch einfach ein Extra Feld\Variable anlegen, in der du die Daten von deinem derzeitigen Druckjob abspeicherst. Und dieses Feld fragst du dann einfach in deiner DoNotify-Methode ab.


NeoXan - So 15.08.04 22:13

hmm...ich bin noch nicht soooo bewandert, dass ich das so wirklich verstehen könnte ;)...
Hab mich auch schon versucht mit der MSDN herumzuschlagen, die Daten sind so weit ich glaube in FNotifyInfo.Data oder so...aber weiter bin ich leider nicht gekommen... :/

[EDIT]
Das eigentlich Prob ist ja, dass diese Notification ja ausgelöst ist, sobald der Job ankommt...abe noch nicht in der Warteschlange ist! D.h. jeder Versuch diesen Job dann zu löschen etc. scheitert...
Wenn ich z.B. aber ein ShowMessage nach EnumJobs einbaue und dann erst auf OK klicke, wenn der Job in der Warteschlange ist, dann klappt es?! Gibt es da nicht eine einfachere Möglichkeit...