![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отловить нажатие кнопок на клавиатуре [D6, WinXP]
Монгол © (2006-11-15 17:47:00)Помогите чайнику!!!Как можно отловить нажатие кнопок на клавиатуре и сохранить их в текстовый файл?
Нужен пример. Заранее спасибо.
Rouse_ (2006-11-15 17:53:00) [1]Из Мемо в файл думаю сумеешь скинуть?
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
end;
var
Form1: TForm1;
implementation
var
hHook: THandle;
{$R *.dfm}
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 = 'Keyboard message = %s ';
RPT_LPARAM_DATA = 'scan code = %s [%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_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;
procedure TForm1.FormDestroy(Sender: TObject);
begin
if not UnhookWindowsHookEx(hHook) then RaiseLastOSError;
end;
end.
Array (2006-11-15 17:51:00) [2]google + hook
http://delphiworld.narod.ru/base/set_hook.html