![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: нет Всего: 110 |
всем доброго дня.
есть список процессов полученный с помощью CreateToolhelp32Snapshot(). отсюда у меня есть имя исполняемого файла, и ID процесса(PROCESSENTRY32::th32ProcessID). подскажите, как мне из того что имеется, получить текст заголовка(title?, caption?) окна? спасибо. |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
EnumThreadWindows() ?
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: нет Всего: 110 |
Dem_max,
перечисление дочерних окон мне не нужно. тут наверное нужно получить HANDLE основного окна, и уже у него взять текст в заголовке. но я не знаю как это сделать. Добавлено через 6 минут и 52 секунды хотя...
я не знаю как это понимать.. только основные окна? окна без детей? |
||||
|
|||||
| DiGGeRR |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 10.5.2009 Репутация: нет Всего: нет |
nonchild - то есть те, у которых нет родителя (точнее, есть - HWND_DESKTOP = NULL). Не факт, что это главное окно. Оно может быть вообще невидимо, и юзаться для получения broadcast сообщений.
К тому же окон может быть несколько, равнозначных для приложения. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: нет Всего: 110 |
кто-то может внятно объяснить, что нужно сделать чтоб получить текст заголовка основного окна зная ID процесса?
|
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 3 Всего: 14 |
GetWindowText
-------------------- |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: нет Всего: 110 |
500mhz, спасибо.
осталось понять, как зная ID процесса(PROCESSENTRY32::th32ProcessID) получить HWND(HANDLE?) окна. |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 3 Всего: 14 |
GetWindowHandle )))
-------------------- |
|||
|
||||
| DiGGeRR |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 10.5.2009 Репутация: нет Всего: нет |
Никак. У приложения может быть НЕСКОЛЬКО окон, и для системы они все равнозначны.
Можно только с помощью EnumThreadWindows получить список nonchild окон. Если окно видимо (IsWindowVisible) и имеет ненулевые размеры (GetWindowRect), то, скорее всего, это главное окно. |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 3 Всего: 14 |
двоешники )))
винда какбэ не дает возможности получит handle окна по pid но можно пойти другим путем делаем GetTopWindow получаем handle окна делаем GetWindowThreadProcessId получаем pid ну и сравниваем с интересуюшим нас pid -------------------- |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 13 Всего: 85 |
500mhz, ну в общем да, но как мы вызовем GetTopWindow ? ей же нужно какой-то HWND дать, а у нас как я понял только ProcessId
Я бы сделал это так.
|
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 3 Всего: 14 |
заменим на GetActiveWindow или GetForegroundWindow
-------------------- |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 13 Всего: 85 |
||||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
под одним PID'ом будут все окна интересующего приложения я бы смирился с частным вариантом: изучить иерархию окон интересующего приложения (Spy) и получить исходя из нее заголовок :) -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| ASMatic |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 254 Регистрация: 14.3.2009 Репутация: 1 Всего: 1 |
500mhz, а если наше окно не TopWindow?
*произвольное окно в произвольном состоянии* GetWindowRect() тож не показатель - одним тредом, пусть даже единственным в процессе, можно "раздавать" мессаги нескольким "полноценным" окнам.. = главное окно приложения, неверное выражение, т.к. нету такова.) и как говорит GremlinProg, нужно сигнатурки создавать, иногда ищу окна по их классу\положению относительно других окон с определённым класом\стилем\положением (это с дочерными так) А "главное" , да - по имени класса\тексту заголовка оптимальный вариант., темболее есть PID. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |