Автор
|
Тема: Необходимо найти главное окно
|
Buck |
опубликован 15-05-2001 19:11 MSK
Господа, кто подскажет, как можно по имеющемуся HINSTANCE выцепить HWND главного (MDI) окна. Ничего, кроме HINSTANCE не известно. Спасибо.
|
OlegN
|
опубликован 15-05-2001 19:29 MSK
HWND GetActiveWindow();
|
Buck
|
опубликован 15-05-2001 22:27 MSK
Это было бы слишком просто. Дело в том, что я не уверен, что нужное мне приложение активно. |
aldep
|
опубликован 15-05-2001 23:24 MSK
Попробуй так. EnumDesktopWindows - даст тебе все окна верхнего уровня. Далее для каждого окна вызывай GetWindowLong с аргументом GWL_HINSTANCE, как только найдешь нужный - тебе повезло. |
OlegN
|
опубликован 16-05-2001 13:20 MSK
Да нет-же, может спокойно одновременно работать два или больше приложений с одинаковым HINSTANCE. Другое дело - это идентификатор потока, в котором крутится цикл обработки сообщений основного окна. Так вот, ID потока уникален, а HINSTANCE - нет.
|
aldep
|
опубликован 16-05-2001 19:20 MSK
На самом деле ситуация не однозначная:Смотри например статью из MSDN Q127030 "How to Find a Window Handle Based on an Instance Handle" Там именно тот же подход применен. И говориться что должно работать (не применял сам). С другой стороны ты прав, в другом месте -Q103644, Microsoft пишет In Win32, instance handles are not unique in the global scope of the system; Так что если честно я в сомнении. В любом случае, лучше наверное использовать следующий подход: EnumDesktopWindows - дает hWnd top-level окон. GetWindowThreadProcessId - дает ProcessID владеющего процесса. Если действительно hInstance не уникальна(т.е. первый подход не сработает), то надо в том месте где получаешь hInstance получить также ProcessID и использовать его. |