#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
Комментариев нет:
Отправить комментарий