![]() |
|
|
![]()
|
|
| maq |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 28.10.2005 Репутация: нет Всего: нет |
Мне нужно иммитировать нажатия Enter для другой загруженной программы окно которой активно, т.е. иммировать нажатие некоторой кнопки в окне другой программы. Использую WM_KEYDOWN. В результате получается, что я посылаю сообщение фрейму окна, а кнопка так и не получает это сообщение. Как я могу получить указатель или хендл именно контрола, который имеет фокус ввода клавиатуры? В VB 6 это проще – SendKeys ("{ENTER}") и все работает, а как в С++ не нашел.
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
GetFocus (плохо искал). А насчет проще... проще то, что знаешь, так что воздержись впредь от подобных ремарок.
Добавлено через 1 минуту и 57 секунд Еще можно использовать keybd_event или SendInput: это даже лучше, т.к. во-первых эмулирует полноценно нажатие, а во вторых, автоматически будет получено окном с фокусом ввода. -------------------- ... |
|||
|
||||
| maq |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 28.10.2005 Репутация: нет Всего: нет |
Earnest, спасибо за совет
Но я уже его перепробовал прежде чем обратиться с вопросом.
1. Если запустить код, то видно, что GetFocus выдает указатель на окно только если оно отросится к этому же проекту, а не выдает фокус на окна не данного проекта. 2. Но даже когда я получаю фокус, никакого эффекта от SendMessage(WM_KEYDOWN). |
||||
|
|||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Естественно:
Насчет "другой программы" я пропустила, извиняюсь. Прислушайся к совету об эмуляции через SendInput. -------------------- ... |
|||
|
||||
| maq |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 28.10.2005 Репутация: нет Всего: нет |
Я решил проблему с помощью SendInput. Но мне все же интересно как можно получить указатель на активный контрол активного окна если оно не относится к текущему процессу?
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Сказано же - GetForegroundWindow
-------------------- ... |
|||
|
||||
| Rrader |
|
||||
|
Inspired =) ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1535 Регистрация: 7.5.2005 Репутация: 1 Всего: 191 |
|
||||
|
|||||
| maq |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 28.10.2005 Репутация: нет Всего: нет |
Earnest,
еще раз «спасибо». Вы уже кажется второй раз «пропускаете». Так что ваши
попросту неуместны. Кстати, я пробовал и GetForegroundWindow перед тем как открыть тему. из МСДН
А я искал (как уже писал выше) указатель на активный контрол активного окна, имеющий фокус. Rrader, заработало! Спасибо большое! Интересно было разбирать твой код |
||||
|
|||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Ну и написал бы, что у тебя не получилось - я же не телепат. А ведь все-таки черз GetForegrondWindow. Только потом я бы использовала GetGUIThreadInfo: там тебе и фокус и бог знает что еще... Ах да, сначала нужно определить поток, которому принадлежит окно через GetWindowThreadProcessId (а то вдруг сам не найдешь) -------------------- ... |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |