![](/logo_grey.gif)
Последние записи
- Как в Python+Selenium webdriver открыть новую вкладку в уже открытом браузере?
- Lazarus, проверка существования строки таблице
- BASM и record, обращение к полям записи
- Web PHP Framework Symfony
- Относительный путь для вывода картинки на html странице
- Массовое открытие гиперссылок в браузере
- Скопировать значение строки из таблицы в textarea
- Рамки для страниц отчетов
- Вывод StdOut консоли в TMemo
- Чтение из файла большого размера (нехватка памяти)
![](http://programmersclub.ru/slurm3.jpg)
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
![](http://programmersclub.ru/katajpg.jpg)
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
29th
Фев
Захвата и переопределение клавиш в чужом приложении
Posted by Chas under Delphi
Aliens_wolfs
Для глобального Хука могут быть проблемы со всеми клавишами, например остальные клавиши которые не эмулируются уже не будут работать их нужно будет прорписывать для эмуляции. Вот вариант для захвата определенных клавиш
private
procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
//Если известен хендл окна то работай по сообщениям нажатия в самом окне
procedure SetKeyMessage(Handle: HWND; Key: DWORD);
begin
SendMessage(Handle, WM_KEYDOWN, Key, 0);
SendMessage(Handle, WM_KEYUP, Key, 0);
end;
//Эмуляция клавиши
procedure SetKey(Key: DWORD);
begin
keybd_event(Key, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
keybd_event(Key, 0, KEYEVENTF_EXTENDEDKEY, 0);
keybd_event(Key, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
//Захватываем клавиши
RegisterHotKey(handle, ord('Z'), 0, ord('Z'));
RegisterHotKey(handle, ord('X'), 0, ord('X'));
RegisterHotKey(handle, ord('C'), 0, ord('C'));
RegisterHotKey(handle, 37, 0, 37); //стрелка в лево
RegisterHotKey(handle, 39, 0, 39); //стрелка в право
RegisterHotKey(handle, 39, 0, 38); //стрелка в верх
RegisterHotKey(handle, 39, 0, 40); //стрелка в низ
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
//Освобождаем клавиши
UnRegisterHotKey(handle, ord('Z'));
UnRegisterHotKey(handle, ord('X'));
UnRegisterHotKey(handle, ord('C'));
UnRegisterHotKey(handle, 37);
UnRegisterHotKey(handle, 39);
UnRegisterHotKey(handle, 38);
UnRegisterHotKey(handle, 40);
end;
//Ловим нажатие клавиш и эмулируем нажатие других клавиш.
procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
Case Msg.HotKey of
ord('Z'): SetKey(Ord(J)); //или если хендел окна игры известен то SetKeyMessag(Хендел игны, Ord(J));
ord('X'): SetKey(Ord(K));
ord('C'): SetKey(Ord(L));
37: SetKey(Ord(A));
39: SetKey(Ord(D));
38: SetKey(Ord(W));
38: SetKey(Ord(S));
end;
end;
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
![пеллетные котлы](http://programmersclub.ru/respective.jpg)
пеллетные котлы
![пеллетный котел](http://programmersclub.ru/emtas.jpg)
Пеллетный котел Emtas
![форум программистов](http://programmersclub.ru/banf336х280.gif)
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)