Форум: "Потрепаться";
Текущий архив: 2003.08.14;
Скачать: [xml.tar.bz2];
ВнизЛовушка WH_KEYBOARD Найти похожие ветки
← →
Akvilon (2003-06-14 14:21) [0]Здравствуйте мастера, такая проблема: ставлю ловушку WH_KEYBOARD, считываю через WPARAM код клавиши, а как узнать ее состояние: нажали или отпустили. Вроде через lparam можно с использованием KF_UP, а вот как?
← →
Yanis (2003-06-14 14:44) [1]Так лови
WM_KEYUP, WM_KEYDOWN
← →
Akvilon (2003-06-14 15:19) [2]А как их ловить?
← →
Yanis (2003-06-14 15:53) [3]Ставишь ловушку и ловишь.
Код не мой.
var
HookHandle: hHook;
function HookProc(Code: integer; WParam: word; LParam: Longint): Longint; stdcall;
var
msg: PEVENTMSG;
key: integer;
begin
if Code >= 0 then begin
result := 0;
msg := Pointer(LParam);
with Form1 do
case msg.message of
WM_MOUSEMOVE: Caption := IntToStr(msg.ParamL) + #32 + IntToStr(msg.ParamH);
WM_LBUTTONDOWN: CheckBox1.Checked := true;
WM_LBUTTONUP: CheckBox1.Checked := false;
WM_RBUTTONDOWN: CheckBox2.Checked := true;
WM_RBUTTONUP: CheckBox2.Checked := false;
WM_KEYUP: CheckBox3.Checked := false;
WM_KEYDOWN: begin
CheckBox3.Checked := true;
key := msg.paramL and 255;
if key in [48..57, 65..90]
then Edit1.Text := Edit1.Text + chr(key);
end;
end;
end else
result := CallNextHookEx(HookHandle, code, WParam, LParam);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.FormStyle := fsStayOnTop;
CheckBox1.Enabled := false;
CheckBox1.Caption := "left button";
CheckBox2.Enabled := false;
CheckBox2.Caption := "right button";
CheckBox3.Enabled := false;
CheckBox3.Caption := "keyboard";
HookHandle := SetWindowsHookEx(WH_JOURNALRECORD, @HookProc, HInstance, 0);
Edit1.Text := "";
Edit1.Enabled := false;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
if HookHandle > 0 then
( HookHandle)Ставишь ловушку и ловишь.
Код не мой.
var
HookHandle: hHook;
function HookProc(Code: integer; WParam: word; LParam: Longint): Longint; stdcall;
var
msg: PEVENTMSG;
key: integer;
begin
if Code >= 0 then begin
result := 0;
msg := Pointer(LParam);
with Form1 do
case msg.message of
WM_MOUSEMOVE: Caption := IntToStr(msg.ParamL) + #32 + IntToStr(msg.ParamH);
WM_LBUTTONDOWN: CheckBox1.Checked := true;
WM_LBUTTONUP: CheckBox1.Checked := false;
WM_RBUTTONDOWN: CheckBox2.Checked := true;
WM_RBUTTONUP: CheckBox2.Checked := false;
WM_KEYUP: CheckBox3.Checked := false;
WM_KEYDOWN: begin
CheckBox3.Checked := true;
key := msg.paramL and 255;
if key in [48..57, 65..90]
then Edit1.Text := Edit1.Text + chr(key);
end;
end;
end else
result := CallNextHookEx(HookHandle, code, WParam, LParam);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.FormStyle := fsStayOnTop;
CheckBox1.Enabled := false;
CheckBox1.Caption := "left button";
CheckBox2.Enabled := false;
CheckBox2.Caption := "right button";
CheckBox3.Enabled := false;
CheckBox3.Caption := "keyboard";
HookHandle := SetWindowsHookEx(WH_JOURNALRECORD, @HookProc, HInstance, 0);
Edit1.Text := "";
Edit1.Enabled := false;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
if HookHandle > 0 then
UnhookWindowsHookEx(HookHandle);
end;
Код выставляется с сохранением авторских прав.(шутка)
← →
Akvilon (2003-06-14 20:17) [4]спасибо, very much, за WH_JOURNALRECORD, то что надо.
← →
Shluz (2003-06-15 12:57) [5]забей на все эти глупости, оставь wh_keybord, зырь:
function KeyboardProc (nCode:integer; wParam, LPARAM:Longint):Longint;stdcall;
begin
if nCode < 0 then
Result := CallNextHookEx(HookHandle,nCode, wParam, LPARAM)
else
begin
Result := 0;
( (wParam>=65) забей на все эти глупости, оставь wh_keybord, зырь:
function KeyboardProc (nCode:integer; wParam, LPARAM:Longint):Longint;stdcall;
begin
if nCode < 0 then
Result := CallNextHookEx(HookHandle,nCode, wParam, LPARAM)
else
begin
Result := 0;
if ((wParam>=65) and(wParam<=90)) or ((wParam>=97) and(wParam<=122))or ((wParam>=48) and(wParam<=57)) then ...
end;
end;
//здесь в wparam передается код клавиш, например A - 65 , Z-90...
и есть хорошие функции chr и ord :)
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2003.08.14;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c