SHCNE_DRIVEREMOVED: sEvent := '移去驱动器 '+strPath1;
SHCNE_DRIVEADD: sEvent := '添加驱动器 '+strPath1;
SHCNE_NETSHARE: sEvent := '改变目录 '+strPath1+ '的共享属性 ';
SHCNE_ATTRIBUTES: sEvent := '改变文件目录属性 文件名 '+strPath1;
SHCNE_UpdateDIR: sEvent := '更新目录 '+strPath1;
SHCNE_UpdateITEM: sEvent := '更新文件 文件名: '+strPath1;
SHCNE_SERVERDISCONNECT: sEvent := '断开与服务器的连接 '+strPath1+ ' '+strpath2;
SHCNE_UpdateIMAGE: sEvent := 'SHCNE_UpdateIMAGE ';
SHCNE_DRIVEADDGUI: sEvent := 'SHCNE_DRIVEADDGUI ';
SHCNE_RENAMEFOLDER: sEvent := '重命名文件夹 '+strPath1+ '为 '+strpath2;
SHCNE_FREESPACE: sEvent := '磁盘空间大小改变 ';
SHCNE_ASSOCCHANGED: sEvent := '改变文件关联 ';
else
sEvent:= '未知操作 '+IntToStr(lParam);
end;
Result:=sEvent;
end;
function SHNotify_Register(hWnd : Integer) : Bool;
var
ps:PIDLSTRUCT;
begin
{$R-}
Result:=False;
If m_hSHNotify = 0 then begin
//获取桌面文件夹的Pidl
if SHGetSpecialFolderLocation(0, CSIDL_DESKTOP,
m_pidlDesktop) <> NOERROR then
Form1.close;
if Boolean(m_pidlDesktop) then begin
ps.bWatchSubFolders := 1;
ps.pidl := m_pidlDesktop;
// 利用SHChangeNotifyRegister函数注册系统消息处理
m_hSHNotify := SHChangeNotifyRegister(hWnd, (SHCNF_TYPE or SHCNF_IDLIST),
(SHCNE_ALLEVENTS or SHCNE_INTERRUPT),
WM_SHNOTIFY, 1, ps);
Result := Boolean(m_hSHNotify);
end
Else
// 如果出现错误就使用 CoTaskMemFree函数来释放句柄
CoTaskMemFree(m_pidlDesktop);
End;
{$R+}
end;
function SHNotify_UnRegister:Bool;
begin
Result:=False;
If Boolean(m_hSHNotify) Then
//取消系统消息监视,同时释放桌面的Pidl
If Boolean(SHChangeNotifyDeregister(m_hSHNotify)) Then begin
{$R-}
m_hSHNotify := 0;
CoTaskMemFree(m_pidlDesktop);
Result := True;
{$R-}
End;
end;
procedure TForm1.WMShellReg(var Message:TMessage); //系统消息处理函数
var
strPath1,strPath2:String;
charPath:array[0..259]of char;
pidlItem:PSHNOTIFYSTRUCT;
begin
pidlItem:=PSHNOTIFYSTRUCT(Message.wParam);
//获得系统消息相关得路径
SHGetPathFromIDList(pidlItem.dwItem1,charPath);
strPath1:=charPath;
SHGetPathFromIDList(pidlItem.dwItem2,charPath);
strPath2:=charPath;
Memo1.Lines.Add(SHEvEntName(strPath1,strPath2,Message.lParam)+chr(13)+chr(10));









