Seite 1 von 1
FindFirstFileNotification_() & Co.
Verfasst: 17.09.2006 00:29
von AND51
Hallo!
Code: Alles auswählen
path$="C:\"
handle=FindFirstChangeNotification_(@path$, 0, #FILE_NOTIFY_CHANGE_SIZE|#FILE_NOTIFY_CHANGE_LAST_WRITE)
FindNextChangeNotification_(handle)
WaitForSingleObject_(handle, #INFINITE)
Debug "Änderung"
FindCloseChangeNotification_(handle)
Das habe ich mal zusammengebastelt. Lauert darauf, dass irgendeine Datei in C:\ (ohne Unterordner) geändert wird.
Aber welche Datei? Das will ich wissen. Wie komme ich an die Datei ran? Bitte schickt mich nicht den Umweg, die Verzeichnisinhalte per
ExamineDirectory() selbst zu überwachen
Vor allem, wenn ich auch mal Unterordner überwachen will, dauert's ganz schön lange...
Verfasst: 17.09.2006 04:34
von MVXA
Kenn mich da nicht wirklich aus aber MSDN, was du auch nutzen könntest,
hat mir sowas hier ausgespuckt. Das W am Ende deutet aber darauf hin,
dass die Funktion mit Universal Kühen arbeitet.
http://msdn.microsoft.com/library/defau ... angesw.asp
Verfasst: 17.09.2006 04:35
von Kaeru Gaman
MVXA hat geschrieben:dass die Funktion mit Universal Kühen arbeitet.
...ich will Kühe?
Verfasst: 17.09.2006 04:42
von MVXA
Das ist meine Bezeichnung für Unicode

. Ist ne lustige Geschichte.
Um unter Windows98 Programme mit Unicode nutzen zu können, gab
oder eher gibt es immer noch(...) eine DLL namens UniCows.dll . Da
ich aber Unicode nicht besonders mag (2 Bytes für ein Zeichen, was
für ein müll...) nenn ich es lieber abwertend Universal Kühe
Verfasst: 17.09.2006 04:58
von Kaeru Gaman
ahja...
..und ich hab schon befürchtet, das hätte was mit der zeitangabe "wenn Kühe fliegen können" zu tun....
Re: FindFirstFileNotification_() & Co.
Verfasst: 17.09.2006 10:14
von Kiffi
Verfasst: 17.09.2006 15:01
von AND51
@ MXVA: Danke, das habe ich schon gesehen!
@ Kiffi: Deinen Link habe ich auch schon gesehen! Funktioniert auch bei mir. Aber mit Unicode kenne´ich mich noch nicht richtig aus, außerdem läuft der Code nicht unter Windows 9x/ME oder niedriger.
Da habe ich mich bereits gestern hingesetzt und nen Code geschrieben, der die ganze Festplatte scannt, und alle Dateinamen und Ordnernamen un eine Linkedlist schreibt, braucht lt. Taskmanager nur ca. 7 MB RAM. Der Scan geht eiegntlich ganz schnell: 5 Sekunden. Ist das denn real? Würde es sich lohnen, bei Änderung mittels obigem Code die LinkedList zu durchlaufen?
Hier mein Code. Um den unter 4.00 zum Laufen zu bringen, bitte die LinkedList Global machen, UseDirectory() durch FinishDirectory() und NextDirectory() durch [...?...] ersetzen.
Code: Alles auswählen
NewList datei.s()
Procedure scan(pfad.s)
Protected dir, type
dir=ExamineDirectory(#PB_Any, pfad, "")
If dir
UseDirectory(dir)
type=NextDirectoryEntry()
While type
If DirectoryEntryName() <> ".." And DirectoryEntryName() <> "."
AddElement(datei())
If type = 1
datei()=pfad+DirectoryEntryName()
Else
datei()=pfad+DirectoryEntryName()+"\"
scan(datei())
UseDirectory(dir)
EndIf
EndIf
type=NextDirectoryEntry()
Wend
EndIf
EndProcedure
start=ElapsedMilliseconds()
scan("C:\")
Debug ElapsedMilliseconds()-start