![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| rogi08 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 18.2.2009 Репутация: нет Всего: нет |
Добрый день, следующая проблема, необходимо отправить окну с заданным хендлом комбинацию клавиш. Следующая комбинация PostMessage(h,WM_KEYDOWN,VK_CONTROL, 0); PostMessage(h,WM_KEYDOWN,VK_F5, 0); PostMessage(h,WM_KEYUP,VK_F5, 0); PostMessage(h,WM_KEYUP,VK_CONTROL, 0); не подходит, потому что между PostMessage окно может потерять\не иметь фокус. Поделитесь опытом, как за один PostMessage\SendMessage отправить сочетания двух клавиш, например CTRL + F5 (Сочетание некоторых клавиш с функциональной иногда имеет свой собственный код, отличный от кодов самих клавиш. для Enter - это 13, для Ctrl+Enter - это 10. PostMessage(h,WM_KEYUP, 10, 0);) |
|||
|
||||
| Andrey44 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: 8 Всего: 26 |
Если приложение твое, зачем так делать?
-------------------- ????? ??, ??????? ?????. |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| rogi08 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 18.2.2009 Репутация: нет Всего: нет |
||||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Andrey44 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: 8 Всего: 26 |
Нельзя. Тут проблема вот в чем - если нажать и посмотреть через Spy++ на сообщения, идущие окнам , то при всем желании никаких WM_KEYDOWN/WM_SYSKEYDOWN там не найти. Это потому, что эти нажатия обрабатываются самой ОС, и на окно идет уже готовое сообщение WM_COMMAND. Его, конечно, тоже можно послать самостоятельно, но вот как выловить из приложения идентификаторы команд его меню, которые при этом понадобятся, навскидку не скажу - ИМХО нужно юзать что-то типа редактора ресурсов. А вообще такие вещи без проблем делаются через SendInput - обработку всего ввода и выработку нужных сообщений берет на себя ОС, а приложение просто шлет нажатия клавиш. Но при этом подопытное окно должно быть в фокусе, так что если это неприемлемо (кстати, а почему?), то остается только ковырять WM_COMMAND. Вот пример с SendInput - посылаем Ctrl+F:
-------------------- ????? ??, ??????? ?????. |
|||
|
||||
| GremlinProg |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
за одно сообщение эти клавиши не посылаются честно говоря, не понял о чем речь VK_RETURN VK_CONTROL 10 - вообще зарезервирован, т.е. не имеет между ними ничего общего
почему же, все видно
нет, эти сообщения без препядствий приходят в окно, транслирует их в WM_COMMAND DefWindowProc, а в WM_CHAR и т.п. - TranslateMessage SendInput - просто удобна для посылки серии команд -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||||
|
|||||||
| Andrey44 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: 8 Всего: 26 |
GremlinProg, спасибо, буду знать.
-------------------- ????? ??, ??????? ?????. |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
всегда пожалуйста,
я думаю, ты просто забыл выключить фильтрацию в Spy на сообщения клавиатуры, поэтому их и не видел, ничего страшного -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |