钩子函数控制键盘输入

wangxuelid 2009-11-08 08:43:56
如:
预设Ctrl+B才能输入数据或打开某个界面,其它按键则没有反应(如: windows启动一样,ctrl+alt+del才可起作用,其它则没有反应)
...全文
183 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hjkto 2009-11-17
  • 打赏
  • 举报
回复

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
PKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT;
KBDLLHOOKSTRUCT = record
vkCode: DWORD;
ScanCode: DWORD;
Flags: DWORD;
Time: DWORD;
dwExtraInfo: DWORD;
end;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
Hook: HHOOK;
implementation

{$R *.dfm}
function HookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var
p: PKBDLLHOOKSTRUCT;
y: Integer;
begin
y:= 0;
if nCode = HC_ACTION then
begin
case WParam of
WM_KEYDOWN, WM_SYSKEYDOWN:
begin
p:= PKBDLLHOOKSTRUCT(Lparam);
if (GetKeyState(162) <0) and (p^.vkCode=66) then
begin
y:=1;
winexec(pchar('notepad.exe'),sw_show);
end;

end;
WM_KEYUP, WM_SYSKEYUP:
begin
p:= PKBDLLHOOKSTRUCT(Lparam);
if (GetKeyState(162) <0) and (p^.vkCode=66) then
begin
y:=1;
end;
end;
end;
end;
if y = 1 then Result:= 1 else Result:= CallNextHookEx(hook,nCode,WParam,LParam);
end;

function SetHook: Boolean; stdcall;

begin
if hook <> 0 then
begin
Result:= False;
Exit;
end;
hook:= SetWindowsHookEx(13, @HookProc, HINSTANCE, 0);
Result:= hook <> 0;
end;

function DelHook: Boolean; stdcall;
begin
if hook <> 0 then
begin
UnhookWindowshookEx(hook);
hook:= 0;
end;
Result:= hook = 0;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
SetHook;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
DelHook;
end;

end.

键盘低级钩子
d7+sp2,测试通过
gyk120 2009-11-17
  • 打赏
  • 举报
回复
rogueskilldan 2009-11-17
  • 打赏
  • 举报
回复
建议用热键阿。。这样效率会比较高。。
hjkto 2009-11-09
  • 打赏
  • 举报
回复
注册一个热键行不
贝隆 2009-11-08
  • 打赏
  • 举报
回复
百度一下,有一堆
wangxuelid 2009-11-08
  • 打赏
  • 举报
回复
待高手,,先谢谢。

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧