| |
|
|
| KompilierenMarcaSeparaciónSource wurde am 15.07.2007 aus der MMJ-Quellcodesammlung (Dietmar Horn) in die Babyklappe auf XProfan.Com abgelegt:
Verzeichnisse: Einen Ordner permanent auf Änderungen überwachen
PRFellow-Vorlage
Autor: Thomas Hölzer
Einen Ordner permanent auf Änderungen überwachen:
z.B. Dateien einfügen,löschen, speichern, Dateidatum ändern
Zum Testen bitte erst einen Ordner namens C:TEST anlegen.
Dann dieses Programm starten (>= Profan 5.0 - 32).
Bei allen Änderungen in C:TEST gibt es einen beep aus.
Die Prozessorbelastung bei dem im Beispiel eingestellten
Überwachungs-Interval von 500 Milli-Sekunden beträgt nur 2%.
Achtung: Der zu überwachende Ordner sollte unbedingt existieren!
Wird der Ordner nicht gefunden, steigt die Prozessorauslastung auf 100%!
Bitte auch Kommentar zum Beispiel genau lesen!
Def FindFirstChangeNotification(3) !KERNEL32,FindFirstChangeNotificationA
Def FindNextChangeNotification(1) !KERNEL32,FindNextChangeNotification
Def FindCloseChangeNotification(1) !KERNEL32,FindCloseChangeNotification
Def WaitForSingleObject(2) !KERNEL32,WaitForSingleObject
Declare folder#
Proc FolderSpy
Parameters folder$,milliseconds&
Declare hchangeobject&,exit%
Dim folder#,Add(Len(folder$),1)
String folder#,0=folder$
WhileNot exit%
Let hchangeobject&=FindFirstChangeNotification(folder#,0,1)
If Equ(WaitForSingleObject(hchangeobject&,milliseconds&),0)
Hier nun die Aktion, die bei einer Änderung im überwachten
Verzeichnis ausgeführt werden soll.
Im Beispiel ist es nur ein
Beep
EndIf
FindNextChangeNotification(hchangeobject&)
Die nächste Zeile ist nur für das TestProgramm
Case GetFocus(endbutton%): Let exit%=1
Case Equ(%message,2000): Let exit%=1
Wend
MessageBox(Add$(Add$(Die Überwachung von ,folder$), wird beendet!),Hinweis,64)
FindCloseChangeNotification(hchangeobject&)
Dispose folder#
EndProc
Beispiel
Das Spy-Programm muß auf jeden Fall ein Dummy-Fenster haben!!
Es darf ruhig unsichtbar oder jenseits des Bildschirms sein -
Hauptsache es kann Nachrichten empfangen und senden
Für das Beispielprogramm wurde ein Ende-Button eingefügt.
Vor Übernahme in eigene Programme muß man sich etwas anderes überlegen
Getesteter Vorschlag:
Ein Programm als Spy laufen lassen und ein
Monitorprogramm schreiben, das dieses steuert
und es mit der benutzerdefinierten Message PostMessage(handle_spy&,2000,0,0)
ordentlich beendet.
Declare endbutton%
Cls
Let endbutton%=CreateButton(%hwnd,&Ende,0,0,64,23)
FolderSpy C:TEST,500
|
|
|
| |
|
|