如何设置全局键盘钩子定义一个热键,当按了这个热键后执行我程序中的代码(100分)

  • 主题发起人 主题发起人 dlpfei
  • 开始时间 开始时间
D

dlpfei

Unregistered / Unconfirmed
GUEST, unregistred user!
我也看了一些文章,代码太多了,初学者的大脑总不能适应那么多代码,能给我最简单的就行了,越简单越好
 
SetWindowsHookEx
 
你可以使用SetWindowsHookEx函数
函数原形:HHOOK SetWindowsHookEx(
int idHook, // 钩子类型,
HOOKPROC lpfn, // 钩子函数地址
INSTANCE hMod, // 钩子所在的实例的句柄,
DWORD dwThreadId // 钩子所监视的线程的线程号
)
hMod: 对于线程序钩子,参数传NULL;对于系统钩子:参数为钩子DLL的句柄
  dwThreadId:对于全局钩子,该参数为NULL。
 
把ALT+F4定义成自己程序的热键.参考以下代码:

unit Unit1;

interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }

procedure HotKeyDown(var Msg: Tmessage);
message WM_HOTKEY;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
HotKeyId: Integer;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
HotKeyId := GlobalAddAtom('HotKey') - $C000;
RegisterHotKey(Handle, hotkeyid, Mod_Alt, VK_F4);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UnRegisterHotKey(handle, HotKeyId);
end;

procedure TForm1.HotKeyDown(var Msg: Tmessage);//热键处理程序。
begin
if (Msg.LparamLo = Mod_Alt) And (Msg.LParamHi = VK_F4) then
begin
SHOWMESSAGE('AA');
end;
END;
END.
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部