Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#12

AW: SHChangeNotifyRegister Event

  Alt 11. Mai 2017, 18:45
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.

Kann es sein das dort gar nichts sinnvolles bei rum kommt?
Denn bei mir ist es immer SHCNE_RENAMEITEM! was hat das mit dem löschen von Dateien zu tun?
Delphi-Quellcode:
Type
  ShellStatus =(
    SHCNE_RENAMEITEM,
    SHCNE_CREATE,
    SHCNE_DELETE,
    SHCNE_MKDIR,
    SHCNE_RMDIR,
    SHCNE_MEDIAINSERTED,
    SHCNE_MEDIAREMOVED,
    SHCNE_DRIVEREMOVED,
    SHCNE_DRIVEADD,
    SHCNE_NETSHARE,
    SHCNE_NETUNSHARE,
    SHCNE_ATTRIBUTES,
    SHCNE_UPDATEDIR,
    SHCNE_UPDATEITEM,
    SHCNE_SERVERDISCONNECT,
    SHCNE_UPDATEIMAGE,
    SHCNE_DRIVEADDGUI,
    SHCNE_RENAMEFOLDER,
    SHCNE_FREESPACE
  );
  TShellStatus = ShellStatus;
Delphi-Quellcode:
const
  cShellStatus : Array[TShellStatus] of String =(
    'SHCNE_RENAMEITEM', // 0x00000001L
    'SHCNE_CREATE', // 0x00000002L
    'SHCNE_DELETE', // 0x00000004L
    'SHCNE_MKDIR', // 0x00000008L
    'SHCNE_RMDIR', // 0x00000010L
    'SHCNE_MEDIAINSERTED', // 0x00000020L
    'SHCNE_MEDIAREMOVED', // 0x00000040L
    'SHCNE_DRIVEREMOVED', // 0x00000080L
    'SHCNE_DRIVEADD', // 0x00000100L
    'SHCNE_NETSHARE', // 0x00000200L
    'SHCNE_NETUNSHARE', // 0x00000400L
    'SHCNE_ATTRIBUTES', // 0x00000800L
    'SHCNE_UPDATEDIR', // 0x00001000L
    'SHCNE_UPDATEITEM', // 0x00002000L
    'SHCNE_SERVERDISCONNECT', // 0x00004000L
    'SHCNE_UPDATEIMAGE', // 0x00008000L
    'SHCNE_DRIVEADDGUI', // 0x00010000L
    'SHCNE_RENAMEFOLDER', // 0x00020000L
    'SHCNE_FREESPACE'         // 0x00040000L
  );
Delphi-Quellcode:
procedure RegisterRecyleBin(WinHandle: HWND);
var
  hNotifyRBin: ULONG;
   pidlRecycleBin: PItemIDList;
  stPIDL: TSHChangeNotifyEntry;
  hr: HRESULT;
begin

  hr := SHGetSpecialFolderLocation(WinHandle, CSIDL_BITBUCKET, pidlRecycleBin);
  if Succeeded(hr) then
  begin
    stPIDL.pidl := pidlRecycleBin;
    stPIDL.fRecursive := True;

    hNotifyRBin := SHChangeNotifyRegister(WinHandle, SHCNF_ACCEPT_INTERRUPTS or
      SHCNF_ACCEPT_NON_INTERRUPTS, SHCNE_ALLEVENTS, WM_SHELLNOTIFY, 1, stPIDL);

    if 0 = hNotifyRBin then
      RaiseLastOSError(GetLastError);
  end
  else
    RaiseLastOSError;
end;
Delphi-Quellcode:
var
  Status : ShellStatus;
Delphi-Quellcode:
    WM_SHELLNOTIFY:
      begin
        Status := ShellStatus(lP);
        ShowMessage(cShellStatus[Status]);
      end;


gruss

Geändert von EWeiss (11. Mai 2017 um 20:10 Uhr)
  Mit Zitat antworten Zitat