15,979
社区成员
发帖
与我相关
我的任务
分享
typedef struct _FILECHANGEINFO {
DWORD cbSize;
LONG wEventId;
ULONG uFlags;
DWORD dwItem1;
DWORD dwItem2;
DWORD dwAttributes;
FILETIME ftModified;
ULONG nFileSize;
} FILECHANGEINFO;
typedef struct tagFILECHANGENOTIFY {
DWORD dwRefCount;
FILECHANGEINFO fci;
} FILECHANGENOTIFY;
监控函数(无关的部分略):
SHChangeNotifyEntry shEntry = {0};
LPITEMIDLIST pidl = NULL;
if (FAILED(SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &pidl)))
{
pMalloc->Release();
return FALSE;
}
shEntry.fRecursive = TRUE;
shEntry.pidl = pidl;
if (0 == (m_ulNotifyId = SHChangeNotifyRegister(m_hWnd,
SHCNRF_ShellLevel,
SHCNE_MKDIR | SHCNE_RMDIR,
WM_DESKTOP_NOTIFY,
1,
&shEntry)))
{
bResult = FALSE;
}
监控回调函数
VOID OnFolderNotify(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
{
FILECHANGENOTIFY* pFileChangeNotify = (FILECHANGENOTIFY*)wParam;
if (NULL == pFileChangeNotify)
{
return 1;
}
FILECHANGEINFO* pChangeFile = &(pFileChangeNotify->fci);
TCHAR szFileName1[MAX_PATH] = {0};
switch (lParam)
{
case SHCNE_MKDIR:
if (SHCNF_PATH & pChangeFile->uFlags)
{
(1) SHGetPathFromIDList((LPCITEMIDLIST)(pChangeFile->dwItem1), szFileName1);
(2) //dwResult = SHGetFileInfo((TCHAR*)(pChangeFile->dwItem1), 0, &shFileInfo1, sizeof(SHFILEINFO), SHGFI_PIDL | SHGFI_DISPLAYNAME);
}
break;
case SHCNE_RMDIR:
if (SHCNF_PATH & pChangeFile->uFlags)
{
(1) SHGetPathFromIDList((LPCITEMIDLIST)(pChangeFile->dwItem1), szFileName1);
(2) //dwResult = SHGetFileInfo((TCHAR*)(pChangeFile->dwItem1), 0, &shFileInfo1, sizeof(SHFILEINFO), SHGFI_PIDL | SHGFI_DISPLAYNAME);
}
break;
default:
break;
}
}
FILECHANGENOTIFY* pFileChangeNotify = (FILECHANGENOTIFY*)wParam;
if (NULL == pFileChangeNotify)
{
return 1;
}
FILECHANGEINFO* pChangeFile = &(pFileChangeNotify->fci);
FILECHANGEINFO* pChangeFile = (FILECHANGEINFO*)wParam;