Ich habe das jetzt mal getestet.
Habe da jedoch noch eine Frage.
Was gibt dir LP aus wenn du eine Datei löschen tust und sie wieder herstellst ?
Das wäre sehr wichtig zu wissen.
Wenn man es richtig macht, kommen folgende Notify-Events:
Code:
00000004 : SHCNE_DELETE
04000000 : SHCNE_EXTENDED_EVENT
04000000 : SHCNE_EXTENDED_EVENT
00008000 : SHCNE_UPDATEIMAGE
00040000 : SHCNE_FREESPACE
04000000 : SHCNE_EXTENDED_EVENT
Du machst es falsch. Der Ansatz mit dem Enum und den Array ist verkehrt.
So hat bei dir ShellStatus.SHCNE_RENAMEITEM den Wert 0 (in Worten Null) und ShellsStatus.SHCNE_FREESPACE den Wert 18.
Das liegt daran, weil hier nicht die Werte der Konstanten aus der ShlObj genommen werden, sondern das Enum selber durchnummeriert.
Dadurch hatten alle ankommenden Events natürlich den Wert 0 mit dabei und deine Lösung zeigte nur SHCNE_RENAMEITEM an.
Mach es bitte so:
Delphi-Quellcode:
type
TShellStatus = LONG;
function GetShellStatusToString(AShellStatus: TShellStatus): string;
begin
case AShellStatus of
SHCNE_RENAMEITEM:
Result := 'SHCNE_RENAMEITEM'; // 0x00000001L
SHCNE_CREATE:
Result := 'SHCNE_CREATE'; // 0x00000002L
SHCNE_DELETE:
Result := 'SHCNE_DELETE'; // 0x00000004L
SHCNE_MKDIR:
Result := 'SHCNE_MKDIR'; // 0x00000008L
SHCNE_RMDIR:
Result := 'SHCNE_RMDIR'; // 0x00000010L
SHCNE_MEDIAINSERTED:
Result := 'SHCNE_MEDIAINSERTED'; // 0x00000020L
SHCNE_MEDIAREMOVED:
Result := 'SHCNE_MEDIAREMOVED'; // 0x00000040L
SHCNE_DRIVEREMOVED:
Result := 'SHCNE_DRIVEREMOVED'; // 0x00000080L
SHCNE_DRIVEADD:
Result := 'SHCNE_DRIVEADD'; // 0x00000100L
SHCNE_NETSHARE:
Result := 'SHCNE_NETSHARE'; // 0x00000200L
SHCNE_NETUNSHARE:
Result := 'SHCNE_NETUNSHARE'; // 0x00000400L
SHCNE_ATTRIBUTES:
Result := 'SHCNE_ATTRIBUTES'; // 0x00000800L
SHCNE_UPDATEDIR:
Result := 'SHCNE_UPDATEDIR'; // 0x00001000L
SHCNE_UPDATEITEM:
Result := 'SHCNE_UPDATEITEM'; // 0x00002000L
SHCNE_SERVERDISCONNECT:
Result := 'SHCNE_SERVERDISCONNECT'; // 0x00004000L
SHCNE_UPDATEIMAGE:
Result := 'SHCNE_UPDATEIMAGE'; // 0x00008000L
SHCNE_DRIVEADDGUI:
Result := 'SHCNE_DRIVEADDGUI'; // 0x00010000L
SHCNE_RENAMEFOLDER:
Result := 'SHCNE_RENAMEFOLDER'; // 0x00020000L
SHCNE_FREESPACE:
Result := 'SHCNE_FREESPACE'; // 0x00040000L
SHCNE_EXTENDED_EVENT:
Result := 'SHCNE_EXTENDED_EVENT';
SHCNE_EXTENDED_EVENT_PRE_IE4:
Result := 'SHCNE_EXTENDED_EVENT_PRE_IE4';
SHCNE_ASSOCCHANGED:
Result := 'SHCNE_ASSOCCHANGED';
SHCNE_DISKEVENTS:
Result := 'SHCNE_DISKEVENTS';
SHCNE_GLOBALEVENTS:
Result := 'SHCNE_GLOBALEVENTS';
SHCNE_ALLEVENTS:
Result := 'SHCNE_ALLEVENTS';
else
Result := 'Something completly different!';
end;
end;
procedure TForm1.WMShellNotify(var Message: TMessage);
var
Status: TShellStatus;
DebugText: string;
begin
DebugText := GetShellStatusToString(TShellStatus(Message.LParam));
DebugText := IntToHex(Message.LParam, 8) + ' : ' + DebugText;
OutputDebugString(PChar(DebugText));
end;