
23.05.2015, 01:28
|
Прохожий
|
|
Регистрация: 20.02.2015
Сообщения: 27
Версия Delphi: Delphi 7
Репутация: 10
|
|
Откопал такой код, методом хука. но проблема осталась та же.
Код:
type
PKbdDllHookStrukt = ^TKbdDllHookStrukt;
_KBDLLHOOKSTRUCT = record
vkCode: DWORD;
scanCode: DWORD;
flags: DWORD;
time: DWORD;
dwExtraInfo: PDWORD;
end;
TKbdDllHookStrukt = _KBDLLHOOKSTRUCT;
const
RPT_WPARAM_DATA = 'Keyboard message = %s ';
RPT_LPARAM_DATA = 'scan code = %s [%d]';
var
StrResult: String;
var
Form1: TForm1;
hHook: THandle;
implementation
{$R *.dfm}
function LowLevelKeyboardProc(nCode: Integer; WParam: WPARAM; LParam: LPARAM): LRESULT stdcall;
begin
StrResult := '';
if nCode = HC_ACTION then
Result := CallNextHookEx(hHook, nCode, WParam, LParam);
case WParam of
WM_KEYDOWN: StrResult := Format(RPT_WPARAM_DATA, ['WM_KEYDOWN']);
WM_KEYUP: StrResult := Format(RPT_WPARAM_DATA, ['WM_KEYUP']);
WM_SYSKEYDOWN: StrResult := Format(RPT_WPARAM_DATA, ['WM_SYSKEYDOWN']);
WM_SYSKEYUP: StrResult := Format(RPT_WPARAM_DATA, ['WM_SYSKEYUP']);
end;
StrResult := StrResult + Format(RPT_LPARAM_DATA, [Chr(PKbdDllHookStrukt(LParam)^.vkCode), PKbdDllHookStrukt(LParam)^.vkCode]);
Form1.Memo1.Lines.Add(StrResult);
end;
procedure TForm1.FormCreate(Sender: TObject);
const
WH_KEYBOARD_LL = 13;
begin
hHook := SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInstance, 0);
if hHook = 0 then RaiseLastOSError;
end;
end.
Последний раз редактировалось Anton93, 23.05.2015 в 20:16.
|