![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
Unknown |
![]()
Сообщение
#1
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 104 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Подскажите, пожалуйста, как научить программу отлавливать факт нажатия кнопок клавиатуры в окне другого приложения?
В общем нужно что-то типа клавиатурного шпиона написать... -------------------- go ask Alice
|
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата попробовал сделать по шагам - споткнулся на GetFocus - возвращает ноль. Хм... Надо будет установить себе хотя бы SharpDevelop, посмотреть, что творится в C#, потому как приведенный мной код в C++ отрабатывает прекрасно, GetFocus получает дескриптор активного контрола, и посылка в него, скажем,::SendMessage(hWndOfFocused, WM_SETTEXT, 0,(long int)"Just a test\0");, приводит к появлению этого текста в чужом приложении... НО!!! Не везде, естественно. Универсального способа нет и вряд ли он будет, потому что это сработает только тогда, когда контрол является оконным, то есть, если у него вообще есть HWND. А если нет? А если чужое приложение рисует на канве (как это делал ICQ, например, в форме быстрого ответа. Не знаю, может сейчас уже изменили, и там тоже используются оконные компоненты?), что тогда делать будешь? Кстати, еще один способ (опять же, только для оконных контролов) - получить активное приложение через GetForegroundWindow, а потом пройтись по каждому из его дочерних окон, то есть, перебрать все суб-контролы этого приложения (удобно делается через EnumChildWindows), для каждого получать GetWindowInfo, и проверять в полученной структуре поле dwWindowStatus. Если оно == WS_ACTIVECAPTION, значит, нашел контрол, на котором фокус ввода. |
![]() ![]() |
![]() |
Текстовая версия | 22.06.2025 8:16 |