| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Отсылка комбинации нажатых клавиш окну |
| Автор: rogi08 24.6.2009, 10:16 |
Добрый день, следующая проблема, необходимо отправить окну с заданным хендлом комбинацию клавиш. Следующая комбинация 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 24.6.2009, 10:23 |
| Если приложение твое, зачем так делать? |
| Автор: GremlinProg 24.6.2009, 10:29 |
| используй http://msdn.microsoft.com/en-us/library/ms646310(VS.85).aspx для отсылки сразу списка команд перед вызовом только поставь фокус в окно |
| Автор: rogi08 24.6.2009, 10:56 |
| GremlinProg, Andrey44 Спасибо за ответы. Приложение не моё. нет возможности поставить фокус в окно Можно ли сделать, используя SendMessage\PostMessage ? |
| Автор: GremlinProg 24.6.2009, 11:02 | ||
как нету?
|
| Автор: Andrey44 24.6.2009, 11:08 | ||
Нельзя. Тут проблема вот в чем - если нажать и посмотреть через Spy++ на сообщения, идущие окнам , то при всем желании никаких WM_KEYDOWN/WM_SYSKEYDOWN там не найти. Это потому, что эти нажатия обрабатываются самой ОС, и на окно идет уже готовое сообщение WM_COMMAND. Его, конечно, тоже можно послать самостоятельно, но вот как выловить из приложения идентификаторы команд его меню, которые при этом понадобятся, навскидку не скажу - ИМХО нужно юзать что-то типа редактора ресурсов. А вообще такие вещи без проблем делаются через SendInput - обработку всего ввода и выработку нужных сообщений берет на себя ОС, а приложение просто шлет нажатия клавиш. Но при этом подопытное окно должно быть в фокусе, так что если это неприемлемо (кстати, а почему?), то остается только ковырять WM_COMMAND. Вот пример с SendInput - посылаем Ctrl+F:
|
| Автор: Andrey44 24.6.2009, 11:42 |
| GremlinProg, спасибо, буду знать. |
| Автор: GremlinProg 24.6.2009, 11:50 |
| всегда пожалуйста, я думаю, ты просто забыл выключить фильтрацию в Spy на сообщения клавиатуры, поэтому их и не видел, ничего страшного |