Последние записи
- Преобразовать массив байт в вещественное число (single)
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
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
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)