![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Как правильно перехватывать нажатия на клаву во ВСЕХ приложениях?
Как перехватить нажатие, изменить значение на нужное и послать дальше винде (переназначить)? |
|
#2
|
||||
|
||||
|
Цитата:
Несколько исходников в придачу: - Keyboard hook - Key Logger - Key Statistic - ScanKey |
|
#3
|
|||
|
|||
|
нашел как без dll получить цифровой код. А кто подскажет как конвертировать его в название кнопки?
|
|
#4
|
||||
|
||||
|
Цитата:
|
|
#5
|
|||
|
|||
|
Запросто:
Код:
var //переменные в Юните
hHook: THandle;
VKey:integer;
function LowLevelKeyboardProc(nCode: Integer;
WParam: WPARAM; LParam: LPARAM): LRESULT stdcall;
type
PKbdDllHookStrukt = ^TKbdDllHookStrukt;
_KBDLLHOOKSTRUCT = record
vkCode: DWORD;
scanCode: DWORD;
flags: DWORD;
time: DWORD;
dwExtraInfo: PDWORD;
end;
TKbdDllHookStrukt = _KBDLLHOOKSTRUCT;
const
RPT_WPARAM_DATA = '%s';
RPT_LPARAM_DATA = '%d';
var
StrResult: String;
begin
StrResult := '';
if nCode = HC_ACTION then
Result := CallNextHookEx(hHook, nCode, WParam, LParam);
case WParam of
WM_KEYDOWN: StrResult := Format(RPT_WPARAM_DATA, ['']);
WM_KEYUP: StrResult := Format(RPT_WPARAM_DATA, ['']);
WM_SYSKEYDOWN: StrResult := Format(RPT_WPARAM_DATA, ['']);
WM_SYSKEYUP: StrResult := Format(RPT_WPARAM_DATA, ['']);
end;
StrResult := Format(RPT_LPARAM_DATA, [PKbdDllHookStrukt(LParam)^.vkCode]);
VKey:=strtoint(strresult); //Получаем VKey нажатой клавиши
end;
procedure InstallHook;
const
WH_KEYBOARD_LL = 13;
begin
hHook := SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInstance, 0);
if hHook = 0 then RaiseLastOSError;
end;
procedure RemoveHook;
begin
if not UnhookWindowsHookEx(hHook) then RaiseLastOSError;
end;Собственно как теперь мне нреобразовать цифровой код в название нажатой клавиши? |
|
#6
|
||||
|
||||
|
Chr(VKey). Должно помочь.
Функция возвращает сам символ. |
|
#7
|
|||
|
|||
|
Короче проблема вот в чем
... Я пишу кейлоггер(dll) мне нужно получить строку с именем активного окна ...Api функции типа getactivewnd пытался ... не получилось ... так подскажите как ... может криво делал..Заранее невероятно благодарен...))) ![]() |