Отслеживание изменения метки тома
Несколько лет назад я демонстрировал, как можно легко и просто отслеживать изменения в каком-нибудь каталоге. Кроме отслеживания подобных глобальных движений, система позволяет отслеживать изменения более точечно, например, на отдельных объектах файловой системы. Для этого есть функция SHChangeNotifyRegister. В качестве примера я разберу, как можно отслеживать изменение метки тома. На самом деле функция SHChangeNotifyRegister обладает гораздо более широкими возможностями по отслеживанию различных системных уведомлений.Сперва небольшое количество данных для работы, которые отсутствуют в инклудах FASM.
Code (Assembler) : Убрать нумерацию
- struct SHChangeNotifyEntry
- pidl dd ?
- fRecursive dd ?
- ends
- SHCNRF_ShellLevel = 0x0002
- SFGAO_FILESYSTEM = 0x40000000
- SHCNE_RENAMEFOLDER = 0x00020000
Code (Assembler) : Убрать нумерацию
- ; Настроить отслеживаемый объект
- invoke SHParseDisplayName,szWatch,NULL,\
- pidl,SFGAO_FILESYSTEM,NULL
- ; Заполнить массив отслеживаемых объектов
- mov eax,[pidl]
- mov [shentry.pidl],eax
- mov [shentry.fRecursive],FALSE
- ; Зарегистрировать обработчик уведомлений
- invoke SHChangeNotifyRegister,\
- [hwnddlg],\
- SHCNRF_ShellLevel,\
- SHCNE_RENAMEFOLDER,\
- WM_LABEL_CHANGED,\
- 1,\
- shentry
- mov [cookie],eax
- ; Освободить неиспользуемую память
- invoke CoTaskMemFree,[pidl]
Код WM_LABEL_CHANGED - это пользовательское сообщение окну приложения, его можно описать, например, как WM_LABEL_CHANGED = WM_USER + 200. При поступлении уведомления от системы именно это сообщение будет отправлено целевому окну обработчика. В параметре lParam находится код события, что очень полезно, когда приложение подписано сразу на несколько событий.
Когда обработка событий больше не требуется, надо освободить перехватчик с помощью функции SHChangeNotifyDeregister.
Code (Assembler) : Убрать нумерацию
- invoke SHChangeNotifyDeregister,[cookie]
В приложении пример программы с исходным текстом, которая отслеживает изменение метки тома на диске C:\ и выводит об этом сообщение.
Просмотров: 528 | Комментариев: 0
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Комментариeв нет
Добавить комментарий
Заполните форму для добавления комментария