![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
MuForum |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 427 Регистрация: 13.6.2007 Где: Молдова, Кишинев Репутация: нет Всего: 4 |
доброе время суток.
- Программа пишется на 'C++ Builder 6.0'. (Знаю, стоит руки оторвать, но сказали писать именно на Borland) =( - Интересует следующий вопрос. # Задача: Нужно узнать 'HANDLE' окна, не зная его 'class' и 'caption'. (Но, данную программу запускает моя программа). P.S. -> Я решил пойти через Open/CreateProcess.
- Далее я понимаю, что нужно как-то обратится к процессу по PID и уже извлечь HANDLE. Пробовал следующее:
- Ошибки о использование неизвестных переменных. (Хотя нужные классы вроде подключил) Это сообщение отредактировал(а) MuForum - 26.2.2008, 19:18 -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли) |
||||
|
|||||
anwe |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: 1 Всего: 23 |
MuForum, да по PID'у можно узнать хэндл, но только ПРОЦЕССА! PID - это идентификатор процесса, а не окна - process identifier.
Это сообщение отредактировал(а) anwe - 25.2.2008, 23:15 |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
Перечисляешь окна функцией EnumWindows, узнаёшь идентификатор процесса с помощью GetWindowThreadProcessId и сравниваешь идентификаторы. Если совпали, то ты нашёл свое окно.
Добавлено через 1 минуту и 38 секунд окон может быть найдено несколько |
|||
|
||||
MuForum |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 427 Регистрация: 13.6.2007 Где: Молдова, Кишинев Репутация: нет Всего: 4 |
Это мне понятно, и не только мне, но и ежу... (Я немного некорректно выразился, мне минус...) - Просто в C# я делал следующим образом:
# Вот функция, в которой идёт обращение к процессу по PID.
P.S. -> Спора нет, я понимаю, что это C# и тут много возможностей и многое облегченно для работы, но, по сути, если у тебя есть PID процесса, то ты непосредственно можешь обращается к процессу, а следовательно и к свойствам его, а следовательно как-то ты должен выходить именно на MainWindow. - Если я не прав, но рассталкуйте... Это сообщение отредактировал(а) MuForum - 25.2.2008, 23:46 -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли) |
||||||
|
|||||||
MuForum |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 427 Регистрация: 13.6.2007 Где: Молдова, Кишинев Репутация: нет Всего: 4 |
# for all - Может кому пригодится...
# Вопрос: Как узнать 'Handle' окна, зная только PID процесса? # Способ №1:
# Способ №2:
Это сообщение отредактировал(а) MuForum - 26.2.2008, 19:14 -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли) |
||||
|
|||||
MuForum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 427 Регистрация: 13.6.2007 Где: Молдова, Кишинев Репутация: нет Всего: 4 |
Вот я сейчас как раз столкнулся... - Ищу Handle окна по PID. - И мне находит несколько окон... # Вопрос: Как найти Handle главного окна? - И вообще как их можно разобрать, чтобы было ясно, какое окно? Это сообщение отредактировал(а) MuForum - 22.4.2008, 23:45 -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли) |
|||
|
||||
anwe |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: 1 Всего: 23 |
||||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
Определить стиль окна. У главного окна наверняка есть системное меню и заголовок, нету стиля WS_CHILD, и нету родителя GetParent(hWnd) == NULL
http://forum.vingrad.ru/index.php?showtopi...t&p=1430830 |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Если это программа писанная на BCB, то это не так - BCB создает невидимое окно (оно соотвествует переменной Application), а главная форма является его потомком. |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
В WinAPI нету понятия главного окна. Это понятие действует внутри приложения (внутри VCL - библиотеки визуальных компонентов). Если будет несколько форм, то снаружи невозможно узнать, главная ли эта форма, ли нет, не обращаясь к классу формы или VCL. Все окна создаются одинаково - через CreateWindowEx. Можно попробовать искать видимое окно со стилем WS_CAPTION, но бывают же главные окна без заголовка. Можно предположить, что главные окна отображаются на панели задач, а у таких окон нету родительского окна и стиля WS_CHILD. |
|||
|
||||
xvr |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Да, но пользователь в таких тонкостях не разбирается ![]()
Именно это я и хотел подчеркнуть своим предыдущим постом. |
||||
|
|||||
MuForum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 427 Регистрация: 13.6.2007 Где: Молдова, Кишинев Репутация: нет Всего: 4 |
# for all - В моём случае проверка на 'WS_CHILD' и 'WS_CAPTION' не помогла...
- Решить проблему удалось следующим образом:
Это сообщение отредактировал(а) MuForum - 24.4.2008, 16:57 -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли) |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
MuForum, а не проще было FindWindow воспользоваться?
|
|||
|
||||
MuForum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 427 Регистрация: 13.6.2007 Где: Молдова, Кишинев Репутация: нет Всего: 4 |
Для частичной защиты игры от читов, было сделано динамическое создание текста 'class', Чтобы нельзя было находить окно при помощи WinApi функции: 'FindWindows()'. P.S. -> То есть при каждом новом запуске игры, у окна будет другой 'class' и 'caption'. Это сообщение отредактировал(а) MuForum - 24.4.2008, 18:23 -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |