Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 562

/ вопрос открыт /

Здравствуйте уважаемые эксперты!
Каким образом можно реализовать захват окна (например блокнот1), чтобы моя программа отправляла нажатие клавиши только этому окну, даже если оно будет неактивно и если будет открыто второе такое же окно (например блокнот2)?

scream Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: scream (статус: Посетитель)
Вопрос отправлен: 25 марта 2009, 15:10
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 5; последнее сообщение — 26 марта 2009, 11:57; участников в обсуждении: 2.
Вадим К

Вадим К (статус: Академик), 25 марта 2009, 16:00 [#1]:

есть несколько способов отправить нажатия клавиш. Если через посылку сообщения WM_CHAR - то тут достаточно найти хендл нужного окна. (это FindWindow).
Но есть другие способы. Например симуляция клавиатуры. Тут уже нужно обязательно, что бы окно было в фокусе.
Галочка "подтверждения прочтения" - вселенское зло.
scream

scream (статус: Посетитель), 25 марта 2009, 16:10 [#2]:

но если открыто 2 одинаковых окна, тогда у них хендл будет одинаковый. Как моя программа поймёт какому именно окну нужно послать нажатие?
Вадим К

Вадим К (статус: Академик), 25 марта 2009, 16:46 [#3]:

у них не может быть одинаковый хендл. никак. Если это и случиться, то это уже будет не важно, так как скорее всего после этого последует синенький экран.
Галочка "подтверждения прочтения" - вселенское зло.
scream

scream (статус: Посетитель), 26 марта 2009, 11:27 [#4]:

Я получаю хендл активного окна (header:=GetForegroundWindow). Переменную header объявляю глобальной (var header: HWND;....implementation), чтобы её значения передавались во все процедуры. Но как мне потом отправить нажатие клавиши окну, чей хендл хранится в переменной header? После получения хендла окно становится неактивным.
Вадим К

Вадим К (статус: Академик), 26 марта 2009, 11:57 [#5]:

а главное хендл получить. потом уже не принципиально, активно оно или нет. клавиши можно посылать через посылку WM_CHAR. только в случае блокнота, надо не окну посылать, а окну ввода (то, что обычно называем Memo)
сама посылка будет где то такой
SendMessage(header, WM_CHAR, ord('A'), 0);
Галочка "подтверждения прочтения" - вселенское зло.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 16:48
Выполнено за 0.02 сек.