для Windows, другой способ, чтобы получить окна верхнего уровня (помимо EnumWindows, который использует обратный вызов), чтобы получить первый ребенок на рабочем столе, а затем получить все его братья и сестры:
HWND wnd = GetWindow(GetDesktopWindow(), GW_CHILD);
while (wnd) {
// handle 'wnd' here
// ...
wnd = GetNextWindow(wnd, GW_HWNDNEXT);
}
Что касается воспользовавшись меню , воспользуйтесь функцией GetSystemMenu
, с FALSE в качестве второго аргумента. GetMenu
, упомянутый в других ответах, возвращает нормальное окно.
Обратите внимание, однако, что при добавлении пользовательского элемента меню в окно внешнего процесса легко, ответ на выбор этого элемента немного сложнее. Вам придется либо добавить код к процессу, чтобы можно было подклассифицировать это окно, либо установить глобальный крючок (возможно, или WH_CBT
) для мониторинга сообщений WM_SYSCOMMAND
.
Что такое целевая ОС - Windows? –