WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Необходимо найти главное окно

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Необходимо найти главное окно
Buck опубликован 15-05-2001 19:11 MSK   Click Here to See the Profile for Buck   Click Here to Email Buck  
Господа, кто подскажет, как можно по имеющемуся HINSTANCE выцепить HWND главного (MDI) окна. Ничего, кроме HINSTANCE не известно. Спасибо.
OlegN опубликован 15-05-2001 19:29 MSK     Click Here to See the Profile for OlegN  Click Here to Email OlegN     
HWND GetActiveWindow();
Buck опубликован 15-05-2001 22:27 MSK     Click Here to See the Profile for Buck  Click Here to Email Buck     
Это было бы слишком просто. Дело в том, что я не уверен, что нужное мне приложение активно.
aldep опубликован 15-05-2001 23:24 MSK     Click Here to See the Profile for aldep  Click Here to Email aldep     
Попробуй так.
EnumDesktopWindows - даст тебе все окна верхнего уровня.
Далее для каждого окна вызывай GetWindowLong с аргументом GWL_HINSTANCE, как только найдешь нужный - тебе повезло.
OlegN опубликован 16-05-2001 13:20 MSK     Click Here to See the Profile for OlegN  Click Here to Email OlegN     
Да нет-же, может спокойно одновременно работать два
или больше приложений с одинаковым
HINSTANCE.
Другое дело - это идентификатор потока, в котором крутится цикл
обработки сообщений основного окна.
Так вот, ID потока уникален, а HINSTANCE - нет.
aldep опубликован 16-05-2001 19:20 MSK     Click Here to See the Profile for aldep  Click Here to Email aldep     
На самом деле ситуация не однозначная:

Смотри например статью из 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
и использовать его.

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.