| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Как послать сообщение о нажатии комбинации клавиш |
| Автор: StayAtHome 3.7.2004, 01:26 |
| Нужно послать контролу сообщение о нажатии комбинации клавиш. Надо что-то вроде WM_KEYDOWN пользовать. Вроде ничего сложного: Perform(WM_KEYDOWN, VK_Insert, 0). Но, это работает только если "нажимается" одиночная клавиша. А если мне надо послать нажатие комбинации клавиш, к примеру Ctrl+Insert? Читал справку, но не совсем понял. Надо передавать то-то в WParam, но не получается. Поделитесь куском кода, плз. Желательно универсального (чтоб можно было передать и Ctrl+Alt+Shift+Enter к примеру) |
| Автор: _hunter 3.7.2004, 12:06 |
| один МАЛЕНЬКИЙ когда ты вешеш хот-кей ты его вешаеш на какую клавишу? на Ctrl+Alt+Shift+Enter или может всетаки на Enter с соответствующими клавишами? или когда ты ловиш нажатия клавиш ты что ловиш? тоже, по-моему, Enter соответственно и посылать нужно так же: шлеш клавишу а с помощью SetKeyboardState() устанавливаеш состояние функциональных клавиш |
| Автор: StayAtHome 3.7.2004, 19:59 |
| _hunter Логично. А все-таки кусок кода можно? |
| Автор: _hunter 3.7.2004, 20:01 |
| дык в чем еще проблема? |
| Автор: _hunter 3.7.2004, 20:18 |
| BYTE keyboardState[255]; keyboardState[0x41] = 1;//A keyboardState[0x10] = 1;//SHIFT key SetKeyboardState(keyboardState); в результате должно получится Shift+A (но не проверял ) |
| Автор: Guest 5.7.2004, 01:08 |
| Регистрация горячих клавиш в системе RegisterHotKey(Handle, atom, MOD_ALT or MOD_CONTROL, VK_Insert and 13); Не уверен только в подчёркнутом, не пробовал. При завершении приложения должен уничтожить регистрацию: UnregisterHotKey(Handle, atom); atom: Integer ,он не должен лежать в диапазоне $C000 ДО $FFFF и лежать в диапазоне от 0 до $BFFF. Или можно задать уникальный индификатор с помощью функциуй GlobalAddAtom(PChar(s)); где s - строка с адресом вызываемоо приложения. Пример обработчика: .... private { Private declarations } procedure WMHotKey(var a:TWMHotKey); message WM_HOTKEY; .... procedure TForm1.WMHotKey(var a:TWMHotKey); begin if (a.HotKey=25) then begin // здесь вызываем приложение end; end; Работает даже если приложение не активно |
| Автор: Albinos_x 5.7.2004, 01:11 |
| Guest это я |
| Автор: _hunter 5.7.2004, 18:12 |
| и каким боком обработка нажатия клавиши относится к нажатию клавиши? |