Здравствуйте, x64, Вы писали:
А>>Разве FindFirstChangeNotification работает для отдельного файла, помоему только для директории. Есть ли анолог для файла?
x64>Если реально надо только и исключительно для одного файла, тогда только файловый фильтр (драйвер).
Исключительно для файла можно так:
#define SHCNRF_ShellLevel 0x0002
#define WM_FILE_CHANGED WM_USER + 100
ULONG g_cookie = 0;
// WndProc
case WM_CREATE:
{
LPITEMIDLIST pidl = NULL;
HRESULT hr = ::SHParseDisplayName(L"c:\\temp\\1.txt", NULL, &pidl, SFGAO_FILESYSTEM, NULL);
if(SUCCEEDED(hr))
{
SHChangeNotifyEntry entry = { pidl, FALSE };
g_cookie = ::SHChangeNotifyRegister(hWnd, SHCNRF_ShellLevel,
SHCNE_ALLEVENTS, WM_FILE_CHANGED, 1, &entry);
::CoTaskMemFree(pidl);
if(g_cookie == 0)
{
// error
}
}
}break;
case WM_DESTROY:
{
if(g_cookie)
SHChangeNotifyDeregister(g_cookie);
PostQuitMessage(0);
}break;
case WM_FILE_CHANGED:
{
MessageBox(hWnd, L"WM_FILE_CHANGED",0,0);
}break;
+CoInitialize.
Вместо SHCNE_ALLEVENTS можно использовать другие флаги(см. SHChangeNotify)