![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| Skiminok |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 5.4.2006 Где: Киев Репутация: нет Всего: нет |
Требуется несколько раз эмулировать нажатия клавиши в другой программе. Для этого я использовал код из FAQ, но есть некоторая проблема. Данный код обновляет то окно, которое в данный момент является активным. Поэтому мне требуется разрешить такую проблему: определить, какое окно сейчас является активным, послать клавишу (AppActivate и SendKeys) и вернуться в то же окно. GetActiveWindow не помогает. Заранее спасибо.
З.Ы. Если уж на то пошло, можете ли, пожалуйста, объяснить, как с помощью SendMessage посылать клавиши, не имеющие ASCII-кода? Это может решить проблему. Заранее ещё одно спасибо. |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
||||
|
||||
| Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 13 Всего: 111 |
Что за клавиши такие?
Используй GetForegroundWindow Что значит "вернуться"? Добавлено @ 15:57 Про ASCII стормозил. Извиняюсь. |
|||
|
||||
| Skiminok |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 5.4.2006 Где: Киев Репутация: нет Всего: нет |
А какие добавочные два параметра передавать в SendMessage?
При посылке окно автоматически становится активным. Мне требуется вернуться, т.е. сделать активным окно, бывшее активным до того. |
||||
|
|||||
| vv3 |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 75 Регистрация: 29.4.2006 Репутация: нет Всего: нет |
function SendMessage(Wnd: HWnd; Msg, wParam: Word; lParam: Longint): Longint;
Wnd - хэндл окна, которому посылается сообщение ($FFFF - послать сообщение всем окнам системы) Msg - тип сообщения (в твоем случае либо WM_KEYDOWN, либо WM_KEYUP, либо WM_CHAR) wParam - дополнительная информация о сообщении (в твоем случае код клавиши или ASCII) lParam - дополнительная информация о сообщении (в твоем случае - 0, сообщения-то бывают разные) Таким образом, чтобы нажать в чужом окне F1, ты пишешь что-то вроде:
Чтобы отослать чужому окну Backspace и он отработал свое действие, т.е. вставил #8:
И, наконец, чтобы вставить в чужое окно 15 символов Ё пишем:
Кстати, зачем выносить окно в Foreground, чтобы отослать ему сообщение и опять тут же спрятать? Ведь твое приложение, отослав сообщение, ждать не будет, пойдет работать дальше. А окно и без активации сообщение принять должно. Это сообщение отредактировал(а) vv3 - 24.5.2006, 11:04 |
||||||
|
|||||||
| BinaryEvil |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 4.3.2006 Репутация: -1 Всего: 2 |
SendMessage никатит, нада SendInput если XP, и keybd_event если 98.
|
|||
|
||||
| vv3 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 75 Регистрация: 29.4.2006 Репутация: нет Всего: нет |
Да неужто? А у меня что стоит? 3.11 For Workgroup? Итак, запускаем Блокнот, например... И Дельфи (тоже например и пишем такое:
Кликаем по кнопочке Button1 и наслаждаемся тем, что не катит... |
|||
|
||||
| Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 13 Всего: 111 |
От себя добавлю, что лучше использовать PostMessage или SendMessageTimeout, т.к. программа чужая и что с ней может случиться не предугадать...
Это сообщение отредактировал(а) Yanis - 24.5.2006, 18:31 |
|||
|
||||
| BinaryEvil |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 4.3.2006 Репутация: -1 Всего: 2 |
лиха ты... умный...у мя чёта ниработаит... отета:
работает без проблем Добавлено @ 20:42 у мя xp Это сообщение отредактировал(а) BinaryEvil - 24.5.2006, 20:46 |
|||
|
||||
| Skiminok |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 5.4.2006 Где: Киев Репутация: нет Всего: нет |
А если я, к примеру, шлю F5 в обычное окно Windows-браузера? Или просто в IE... |
|||
|
||||
| Skiminok |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 5.4.2006 Где: Киев Репутация: нет Всего: нет |
BinaryEvil, не работает(на XP!).
|
|||
|
||||
| vv3 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 75 Регистрация: 29.4.2006 Репутация: нет Всего: нет |
Да, оно, конечно, лучше...
Ну и что? Главное - отослать тому, кому надо. Кому отсылать (класс, имя), можно всегда подглядеть в WinSight'e Это должно означать только то, что именно у тебя не работает... Не злись, пожалуйста |
|||
|
||||
| Skiminok |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 5.4.2006 Где: Киев Репутация: нет Всего: нет |
||||
|
||||
| Angel_19 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 5.4.2005 Репутация: нет Всего: нет |
Уважаемые, а как послать комбинацию клавиш? Т.е. например Ctrl+Ins с помощью SendMesage ?
|
|||
|
||||
| BinaryEvil |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 4.3.2006 Репутация: -1 Всего: 2 |
Angel_19, с помощью SendInput
работает на 100%, если нужное окно активно. если нет, то иногда не проходят нажатия, я ставлю задержку перед sendinput: WO := CreateEvent(nil, True, False, '');WaitForSingleObject(WO, 10);CloseHandle(wo); |
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |