Festellen wann bei Windows Dateien umbenannt werden
-
Hallo!
Ist es auf irgendeine Weise möglich festzustellen ob auf Windows gerade eine Datei umbenannt wird, also per Rechtsklick Umbenennen oder so in der Art! Ist das irgendwie möglich?Wäre klasse
Mfg
Andi
-
Stichwort: Api Hook
-
Suchst du sowas wie FindFirstChangeNotification mit FILE_NOTIFY_CHANGE_FILE_NAME:
Any file name change in the watched directory or subtree causes a change notification wait operation to return. Changes include renaming, creating, or deleting a file name.
Dieser Thread wäre dazu auch noch ganz interessant
-
Wenn ich diese API benutze muss ich ja in einer Schleife immer überprüfen ob eine Datei geändert wurde!
while(TRUE)
{
hFile = FindFirstChangeNotification("C:\", TRUE, FILE_NOTIFY_CHANGE_FILE_NAME);
if(hFile != INVALID_HANDLE_VALUE)
{
MessageBox(0, "changed", 0, 0);}
}Somit müsste doch eine msg kommen wenn eine Datei umbenannt wird! Jedoch kommt immer wieder changed! Ich will aber dass erst nach Dateien die umbenannt werden gesucht wird, wenn das Programm startet und die Dateien nach dem Start umbenannt werden! Werden mit meiner Funktion auch alle Unterordner von C:\ einbezogen?
Danke für die super Hilfe!
Andi
-
Mach dir doch wenigstens bitte mal die Mühe und schau dir die Dokumentation zu der Funktion in der MSDN richtig an.
-
Hmm ich habe jetzt versucht das WaitForSingleObject einzubauen, jedoch will das auch nicht so richtig - jetzt bekomme ich keine Meldung wenn ich in C:\ eine Datei rename
hFile = FindFirstChangeNotification("C:\\", TRUE, FILE_NOTIFY_CHANGE_FILE_NAME); while(TRUE) { dwWaitStatus = WaitForSingleObject(hFile, INFINITE); } switch (dwWaitStatus) { case WAIT_OBJECT_0: MessageBox(0,"hallo", 0, 0); FindNextChangeNotification( hFile); break; } break;
Andi
-
Schau dein Programm nochmal an...
while(TRUE) { dwWaitStatus = WaitForSingleObject(hFile, INFINITE); }
Wie nennt man diese while-Schleife? ... Genau: Endlosschleife. Du wolltest wahrscheinlich die switsch-Anweisung noch in den Schleife packen, oder?
-
UPPPPPS!! Danke!!
Wie blind bin ich eigentlich? *keyboard anknabber*Andi
-
Noch ne Frage dazu! Kann ich eignetlich nich alle Drives auf einmal angeben? Oder muss ich dann für C:\ D:\ das ganze einzeln laufen lassen? Ich habs schon mit "" und mit "\" versucht - geht aber nicht
Gibts da eine Möglichkeit?
Anderl
-
Kann man mit dem zurückgegebenen Handle den Dateinamen herauskriegen?
-
Vielleicht könnte dir da ReadDirectoryChangesW helfen?!