![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| Fedia |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 465 Регистрация: 2.8.2006 Где: первым встречаю р ассвет Репутация: 1 Всего: 13 |
Приветствую всех !
Задачка такая: запускаю приложение через ShellExecute и как результат функции ShellExecute получаю его указатель. Например:
Необходимо по указателю hApp получить хендл активного окна запущенного приложения в том виде, в котором его возвращает функция FindWindow. Например:
Т.е. мне необходимо из hApp получить AHWND. Возможно ли это реализовать ? Это сообщение отредактировал(а) Fedia - 5.9.2006, 02:49 -------------------- Накануне решающей битвы Я иду, и надеждою зыбкой Озаряется эта дорога, Я мечтаю увидеть улыбку На лице победившего Бога… |
||||
|
|||||
| bazzzman |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 24.7.2006 Репутация: нет Всего: 2 |
Не совсем понял вопрос...
Если надо найти дочернее окно какого-то конкретного окна, то: 1. GetWindow 2. EnumChildWindows 3. FindWindowEx |
|||
|
||||
| Fedia |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 465 Регистрация: 2.8.2006 Где: первым встречаю р ассвет Репутация: 1 Всего: 13 |
Мне нужно найти хендл активного окна приложения, зная хендл самого приложения. Хендл приложения получаю при его запуске посредством ShellExecute. -------------------- Накануне решающей битвы Я иду, и надеждою зыбкой Озаряется эта дорога, Я мечтаю увидеть улыбку На лице победившего Бога… |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 7 Всего: 158 |
CreateProcess + EnumThreadWindows( pi.dwThreadId, ...
|
|||
|
||||
| bazzzman |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 24.7.2006 Репутация: нет Всего: 2 |
Это не то... При чем тут CreateProcess, если "нужно найти хендл активного окна приложения, зная хендл самого приложения"? Вот как это делаю я:
По-хорошему надо сделать более серьезную проверку ошибок... |
||||
|
|||||
| Fedia |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 465 Регистрация: 2.8.2006 Где: первым встречаю р ассвет Репутация: 1 Всего: 13 |
Не работает. Проверяю так:
bazzzman, кстати сейчас проверил, твоя функция возвращает хендл окна, запустившего приложение. -------------------- Накануне решающей битвы Я иду, и надеждою зыбкой Озаряется эта дорога, Я мечтаю увидеть улыбку На лице победившего Бога… |
|||
|
||||
| bazzzman |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 24.7.2006 Репутация: нет Всего: 2 |
Значит это окно имеет фокус ввода. Что не так?
Надо что-то другое? Тогда сформулируй нормально вопрос. hAp:=ShellExecute(0, 'open', 'C:\test.exe', nil, nil, SW_SHOWNORMAL); - возвращает не handle окна:
Значит GetWindowThreadProcessID(hWnd, nil); мы не можем сделать. Нежен threadId => CreateProcess как и предлагал dumb или ShellExecuteEx. И уже потом AttachThreadInput. Думаю информации и так уже достаточно, чтобы ты самостоятельно с этим разобрался. Читай MSDN. |
|||
|
||||
| Fedia |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 465 Регистрация: 2.8.2006 Где: первым встречаю р ассвет Репутация: 1 Всего: 13 |
Вопрос я вроде сформулировал довольно четко:
Твоя функция возвращает: , а нужно: хендл активного окна запущенного через ShellExecute приложения. Разница надеюсь понятна ?
Как раз разбираюсь. За советы спасибо. Думаю перечисленных в этой ветке функций точно хватит для реализации сабжа. А еще спрашиваешь, что не так ... Значит если запускать приложение посредством ShellExecute, то по результату, возвращаемому этой функцией хендл активного окна запущенного (именно через ShellExecute) приложения не получить ? Это сообщение отредактировал(а) Fedia - 5.9.2006, 07:17 -------------------- Накануне решающей битвы Я иду, и надеждою зыбкой Озаряется эта дорога, Я мечтаю увидеть улыбку На лице победившего Бога… |
||||
|
|||||
| Romikgy |
|
||||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
почему? можно
здесь надо заюзать ф-цию pid:=GetProcessId(hApp); дабы поличить пид, а далее юзая EnumThreadWindows(pid,.... Добавлено @ 10:25 правда
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
||||
|
|||||
| Fedia |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 465 Регистрация: 2.8.2006 Где: первым встречаю р ассвет Репутация: 1 Всего: 13 |
По этой функции ничего нет в справке Windows SDK. Модуль Winbase также отсутствует. Не могу найти модуль, который необходимо было бы подключить, для использования этой функции. Кроме того, функция ShellExecute возвращает:
ЗЫ: спасибо, что отвечаешь, хочу таки добить этот вопрос, давно меня волновавший. -------------------- Накануне решающей битвы Я иду, и надеждою зыбкой Озаряется эта дорога, Я мечтаю увидеть улыбку На лице победившего Бога… |
||||
|
|||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
получается да , т.к. я видел что для получения своего хистенса надо юзать GetModuleHandle с параметром nil (хотя я и не разобрался конкретно что есть этот инстанс А ключевая фраза здесь вот какая ниже ХР СП1 этой фичи нет! (имхо если этой ф-ции нет то проще будет перечислить все процессы в системе и от них взять хендлы и сравнить с нужным) -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Fedia |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 465 Регистрация: 2.8.2006 Где: первым встречаю р ассвет Репутация: 1 Всего: 13 |
Я вообще не придал этой фразе значения, потому, что у меня Windows XP SP2
Ок. Завтра попробую, если время на это будет. -------------------- Накануне решающей битвы Я иду, и надеждою зыбкой Озаряется эта дорога, Я мечтаю увидеть улыбку На лице победившего Бога… |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
тогда это в кернеле32, есть такая ф-ция, можно динамически открыть ее через лоадлибрари и попросить адрес этой ф-ции -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Fedia |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 465 Регистрация: 2.8.2006 Где: первым встречаю р ассвет Репутация: 1 Всего: 13 |
Добрался я таки и до этой части. В общем ты частично прав, в библиотеке kernel32.dll есть функция GetProcessId. Правда если в качестве параметра ей передавать результат возвращаемый функцией ShellExecute, то GetProcessId возвращает 0. Следовательно, не такой параметр ей требуется. -------------------- Накануне решающей битвы Я иду, и надеждою зыбкой Озаряется эта дорога, Я мечтаю увидеть улыбку На лице победившего Бога… |
|||
|
||||
| Romikgy |
|
||||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
GetProcessId требует хендл процесса , а не его хистенс Добавлено @ 08:56 http://www.codeproject.com/win32/Remote.asp -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
||||
|
|||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |