Текущий архив: 2003.05.29;
Скачать: CL | DM;
Вниз
Найти HWND главного окна имея HINSTANCE Найти похожие ветки
← →
AndrewY © (2003-03-31 17:49) [0]Имеется надобность запустить некую EXE-шку. EXE-шка чужая, какие классы описаны в этом приложении я понятия не имею. Запуск через ShellExecute проходит без проблем и возвращается HINSTANCE. Но как найти HWND главного окна приложения имея только HINSTANCE.
← →
Игорь Шевченко © (2003-03-31 17:57) [1]Никак
← →
AndrewY © (2003-03-31 18:17) [2]Отсутствие результата тоже результат. Спасибо.
← →
jack128 © (2003-04-01 14:41) [3]использовать не ShellExecute, a CreateProcess - там возвращается хендл основного потока, а потом перечислить все окна, найти поток, который этот это окно создал (GetWindowThreadProcessId)
Гемор одним словом(хотя может и другие способы есть)
← →
Игорь Шевченко © (2003-04-01 16:19) [4]
> потом перечислить все окна, найти поток, который этот это
> окно создал (GetWindowThreadProcessId)
Все окна создались одним потоком, дальше что ? Какое из них главное ?
← →
jack128 © (2003-04-01 17:12) [5]А вообще, что такое ГЛАВНОЕ окно? помоему все окна равнозначны(кроме дочерних, конечно, но тогда можно узнать их родителя)
← →
i-C3H7OH © (2003-04-01 18:36) [6]если приложение не сложное а-ля блокнот, то после (после мааленькой задержечки)запуска екзешника можно вызвать GetForegroundWindow и скорее всего это окно будет главным
← →
DVM © (2003-04-01 20:39) [7]В большинстве случаев главное окно то, что создается первым, топ-левел, и не имеет родителя. Хотя не факт, что это всегда.
> GetForegroundWindow и скорее всего это окно будет главным
Главное окно может быть вообще невидимо и иметь нулевые размеры.
Вывод: главное окно определить нельзя, потому, что нельзя сказать, что значит быть главным окном.
← →
Morfein © (2003-04-01 20:59) [8]Перед запуском "некой EXE-шки" установи хук WH_CBT... он позволяет перед созданием окна (главного/первого, если хочешь) отловить структуру CREATESTRUCT, которая содержит всю инфу о зарегистрированном классе, на основании котрого было создано окно...
Этот же хук позволяет изменять параметры этой структуры перед созданием окна...
← →
DVM © (2003-04-01 21:06) [9]А что толку? Ну, допустим, я в проге создаю два окна, одно за другим (CreateWindowEx), оба абсолютно одинаковые, оба не имеют родителя, которое из них главное, которое первое создано?
А в программах, написанных на Delphi, вообще чехарда. Первым создается окно объектом TApplication, которое потом ныкается, и "главным" становится первое созданное окно. А главное то, на самом деле именно окно TApplication-а.
← →
i-C3H7OH © (2003-04-01 21:08) [10]
> DVM © (01.04.03 20:39)
> Главное окно может быть вообще невидимо и иметь нулевые
> размеры.
> Вывод: главное окно определить нельзя, потому, что нельзя
> сказать, что значит быть главным окном.
Да я не спорю, что нельзя определить , но в простых приложениях это мож сработать
> Morfein © (01.04.03 20:59)
так можно перечислить все окна в приложении. и не более
а все-таки, чем главное окно отличается от неглавного? На мой взгляд только лишь реакцией на закрытие, закрываем главное окно - прибиваем приложение.
← →
DVM © (2003-04-01 21:13) [11]
> На мой взгляд только лишь реакцией на закрытие, закрываем
> главное окно - прибиваем приложение.
Тогда у программы созданной на Delphi два "главных" окна :)
← →
Morfein © (2003-04-01 21:23) [12]Такое ощущение, что вы про стили окна ничего не слышали...
сделайте проверку на стили WS_OVERLAPPED или WS_OVERLAPPEDWINDOW... и на отсутствие стиля WS_CHILD и WS_POPUP... это раз...
два... человек говорит про конкретную программу... значит надо взять и запустить её, потом запустить WinSight и посмотреть стили, классы и заголовки... и по всему этому отлавливать!
← →
i-C3H7OH © (2003-04-01 21:35) [13]
> Тогда у программы созданной на Delphi два "главных" окна
> :)
не, а почему бы и нет?
и вообще ВинАпи не различает главное окошко неглавное, главным оно будет только для программиста с пользователем.
когда создаешь окно (скажем при помощи CreateWindowEx) передавая вместо ParentHwnd 0, то иконка окошка появится в таскбаре, верно?
можно конечно предположить, что что все окошки с Parent == 0 типа главные, тогда устанавливаем хук на WM_CREATE, извлекаем структуру (CREATESTRUCT) и смотрим Parent.
кстати возвращаемая у ShellExecute HINSTANCE - ненастоящая HINSTANCE, служит только для контроля ошибок
← →
DVM © (2003-04-01 21:47) [14]
> и вообще ВинАпи не различает главное окошко неглавное, главным
> оно будет только для программиста с пользователем.
Вот именно! Простой пример - ПРОВОДНИК. Которое его окно главное? Закрытие одного - не закрывает приложение, но закрытие последнего - да.
← →
Morfein © (2003-04-01 22:03) [15]ты уточни, чё за проводник... iexplore.exe или explorer.exe? %)
← →
DVM © (2003-04-01 22:16) [16]explorer.exe. Имеется ввиду случай, когда окно Progman-а отсутствует по каим-либо причинам (например оболочкой установлена другая программа). Тогда все окна равны.
Страницы: 1 вся ветка
Текущий архив: 2003.05.29;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.022 c