#c_sharp #winapi
В документация по функции CreateDesktop на msdn описывается следующая сигнатура:
HDESK WINAPI CreateDesktop(
_In_ LPCTSTR lpszDesktop,
_Reserved_ LPCTSTR lpszDevice,
_Reserved_ DEVMODE *pDevmode,
_In_ DWORD dwFlags,
_In_ ACCESS_MASK dwDesiredAccess,
_In_opt_ LPSECURITY_ATTRIBUTES lpsa
);
Меня интересует параметр dwDesiredAccess с типом ACCESS_MASK: (документация).
Если более конкретно, то значение DESKTOP_HOOKCONTROL.
DESKTOP_HOOKCONTROL (0x0008L) Required to establish any of the window hooks.
Получается, что он нужен для установления любого хука.
Т.е. если DESKTOP_HOOKCONTROL не будет, то на вновь созданном desktop нельзя будет
установить хуки? Но это не так, я проверил.
Тогда что означает этот параметр?
private enum DesktopAccess : uint
{
DesktopNone = 0,
DesktopReadobjects = 0x0001,
DesktopCreatewindow = 0x0002,
DesktopCreatemenu = 0x0004,
DesktopHookcontrol = 0x0008,
DesktopJournalrecord = 0x0010,
DesktopJournalplayback = 0x0020,
DesktopEnumerate = 0x0040,
DesktopWriteobjects = 0x0080,
DesktopSwitchdesktop = 0x0100,
GenericAll = (DesktopReadobjects | DesktopCreatewindow | DesktopCreatemenu
// | DesktopHookcontrol
| DesktopJournalrecord | DesktopJournalplayback |
DesktopEnumerate
| DesktopWriteobjects | DesktopSwitchdesktop),
}
CreateDesktop(nameDesktop, IntPtr.Zero, IntPtr.Zero, 0x0001, (uint)DesktopAccess.GenericAll,
IntPtr.Zero);
Весь код можете найти тут: https://stackoverflow.com/questions/29902715/how-close-all-process-on-new-desktop
Ответы
Ответ 1
Т.е. если DESKTOP_HOOKCONTROL не будет, то на вновь созданном desktop нельзя будет установить хуки? Но это не так, я проверил. Как вы проверили этот момент? Если просто собрали код по приведенной ссылке без флага DesktopHookcontrol, то это ничего не дает, так как этот пример переключает окна на себя и закрывает их. Для этого достаточно DESKTOP_SWITCHDESKTOP и (возможно)DESKTOP_WRITEOBJECTS. DESKTOP_HOOKCONTROL нужен для того, чтобы можно было перехватывать события у окон с помощью функции SetWindowsHookEx. Приведенный пример никакие события не перехватывает и функцию SetWindowsHookEx не использует. Подробнее про хуки здесь: https://msdn.microsoft.com/en-us/library/windows/desktop/ms644959%28v=vs.85%29.aspx
Комментариев нет:
Отправить комментарий