Delphi屏蔽指定热键


本文整理自网络,侵删。

 //以下代码在Delphi7 + XP SP3下测试通过
//button1为注册钩子屏蔽,button2为卸载钩子取消屏蔽F1

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

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;
WM_Sock :Integer;
hHandle :HWND;
Hook :HHook;
implementation

{$R *.dfm}
function LowLevelKeyboardProc(vNode:Integer;wParam:WPARAM;lParam:LPARAM):LRESULT;stdcall;
type
KbDllHookStruct = record
vkCode:DWord;
ScanCode:DWord;
Flags:DWord;
Time:DWord;
dwExtraInfo:DWord;
end;
var
P:^KbDllHookStruct;
begin
Result := 0;
P := Pointer(LPARAM);
if vNode = HC_ACTION then
begin
case wParam of
WM_KEYDOWN,WM_SYSKEYDOWN,WM_KEYUP,WM_SYSKEYUP:
if p.vkCode = VK_F1 then //判断按下的是不是F1
begin
Result := 1;
end;
end;
if vNode <> 0 then
Result := CallNextHookEx(0,vNode,wParam,lParam);
end;
end;

//注册钩子
procedure TForm1.Button1Click(Sender: TObject);
const
WH_KEYBOARD_LL = 13;
begin
WM_SOCK := 0;
WM_SOCK := RegisterWindowMessage('WM_SOCK');
hHandle := Handle;
Hook := SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc,hInstance,0);
end;

//卸载钩子
procedure TForm1.Button2Click(Sender: TObject);
begin
UnHookWindowsHookEx(Hook);
end;

end.

相关阅读 >>

Delphi xe5如何像手机qq一样最小化后显示图标

Delphi 比较版本号

Delphi 如何取得系统中的桌面的路径

Delphi 用正则表达式检查一个串是否是电信的手机号

推荐一套免费跨平台的Delphi 哈希及加密算法库

Delphi 文件转换base64

devexpress vcl 动态调用皮肤

Delphi弹出信息框大全

Delphi firedac 下的 sqlite [7] - 备份、优化、事务(transaction)

Delphi setwindowshookex - 设置钩子 unhookwindowshookex - 卸掉钩子

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...