小编bob*_*y_z的帖子

SetWindowsHookEx冻结我的键盘和鼠标,以及其他奇怪的事情发生

我在Delphi中编写笑话程序(发出奇怪的声音,用户使用鼠标或键盘),它使用全局钩子捕获鼠标和键盘事件.
这是负责处理这个钩子的函数:

procedure MKHOOK(code: Integer;wp: wParam;lp: lParam); stdcall;
var
hh: HHOOK;
begin
  PlaySound('fart.wav');
  CallNextHookEx(hh,code,wp,lp);
end;
Run Code Online (Sandbox Code Playgroud)

当Form创建时,Hook开始:

procedure TForm6.FormCreate(Sender: TObject);
begin
   MH := SetWindowsHookEx(WH_MOUSE_LL,@MKHOOK,hInstance,0);
   KH := SetWindowsHookEx(WH_KEYBOARD_LL,@MKHOOK,hInstance,0);
end;
Run Code Online (Sandbox Code Playgroud)


当程序结束时,MH和KH是HHOOK Hook的类型被删除的地方:

procedure TForm6.FormDestroy(Sender: TObject);
begin
   UnhookWindowsHookEx(MH);
   UnhookWindowsHookEx(KH);
end;
Run Code Online (Sandbox Code Playgroud)

问题开始,当我尝试运行它时会发生奇怪的事情:

  • 鼠标和键盘停止工作,我必须使用ctrl + alt + del来恢复它
  • 一些键在程序执行后没有工作,当我停止它时(ctrl,alt,tab)
  • 有些键会改变它们的行为,例如,当我使用箭头键时,它们会转动我的屏幕视图.

这段代码有什么问题?为什么它不起作用?对不起我的英语不好 ;)

delphi winapi

1
推荐指数
1
解决办法
644
查看次数

标签 统计

delphi ×1

winapi ×1