|
Вопрос # 6 348/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Возникла проблема при эмуляции нажатия функциональных клавиш F1-F12 (возможно и других, но не проверял). При регистрации одной горячей клавиши(без модификатора) - все работает прекрасно, но если используется модификатор (Alt, Control, Shift или их сочетания) - отсылается некорректный код. Подозреваю что дело в том что отсылается в момент нажатия, а не отпускания, т.е. на момент посылки модификатор остается в нажатом состоянии. Как можно решить данную проблему?
Цель: корректно эмулировать нажатие клавиш при использовании горячей клавиши с модификатором.
Приложение: Переключить в обычный режим-
- procedure WMHotkey ( var msg: TWMHotkey ); message WM_HOTKEY;
-
- Var
-
-
- procedure TfrmMult.FormCreate(Sender: TObject);
- begin
-
- HK:= 9999; RegisterHotKey(Handle, HK, 0, 45); //Insert
-
- HK1:= 1; RegisterHotKey(Handle, HK1, MOD_ALT, 49); // Alt + 1
-
- HK2:= 2; RegisterHotKey(Handle, HK2, 0, 49); // 1
-
- End;
-
- procedure TfrmMult.WMHotKey(var Msg: TWMHotKey);
- Begin
-
-
-
- begin
- PostMessage(hnd, wm_keydown, 112, 0);
- sleep(10);
- PostMessage(hnd, wm_keyup, 112, 0);
- end;
-
-
- begin
- PostMessage(hnd, wm_keydown, 112, 0);
- sleep(10);
- PostMessage(hnd, wm_keyup, 112, 0);
- end;
- End;
Примечание #1 (5 января 2013, 22:55): Пишу в XE3
 |
Вопрос задал: Ins (статус: 1-ый класс)
Вопрос отправлен: 5 января 2013, 21:19
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 2; последнее сообщение — 14 января 2013, 21:21; участников в обсуждении: 1.
|
Ins (статус: 1-ый класс), 8 января 2013, 23:37 [#1]:
В решение нашлось, но оно мне не нравится. вопрос оставляю открытым.
while MyKeyState(vk_menu)=True do
Begin
sleep(100);
Application.ProcessMessages;
End;
|
|
Ins (статус: 1-ый класс), 14 января 2013, 21:21 [#2]:
Данное решение является лишь частичным, работает только если окно программы активно. SetForegroundWindow не решает проблему(
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|