设置全局快捷键

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
protected
procedure hotykey(var msg:TMessage); message WM_HOTKEY;
end;

var
Form1: TForm1;
id,id2:Integer;

implementation

{$R *.DFM}


procedure TForm1.hotykey(var msg:TMessage);
begin
if (msg.LParamLo=MOD_CONTROL) and (msg.LParamHi=81) then
begin
ShowMessage('Ctrl + Q ');
end;

if (msg.LParamLo=MOD_CONTROL) and (msg.LParamHi=82) then
begin
ShowMessage('Ctrl + R ');
end;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
id:=GlobalAddAtom('hotkey');
RegisterHotKey(handle,id,mod_control,81);

id2:=GlobalAddAtom('hotkey2');
RegisterHotKey(handle,id2,mod_control,82);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
UnRegisterHotKey(handle,id);
UnRegisterHotKey(handle,id2);
end;
### 如何在C++中设置全局快捷键 为了实现全局快捷键的功能,在Windows操作系统下通常会利用Windows的消息机制以及注册表功能。通过调用特定API函数,程序能够监听并响应键盘事件而不局限于单个应用程序窗口内。 对于创建和管理热键而言,`RegisterHotKey()` 和 `UnregisterHotKey()` 是两个重要的Win32 API 函数[^1]。前者用于向系统注册一个新的热键组合;后者则负责取消已有的热键绑定。当成功注册了一个热键之后,每当用户按下对应的按键组合时,消息循环将会接收到一条带有特殊标识符的通知消息(通常是WM_HOTKEY),此时就可以触发预设的操作逻辑了。 下面给出一段简单的代码片段展示如何使用这两个API来处理全局热键: ```cpp #include <windows.h> // 定义要使用的虚拟键码与修改器标志位 const int MODIFIER_KEYS = MOD_CONTROL | MOD_SHIFT; const UINT VIRTUAL_KEY_CODE = 'A'; // Ctrl + Shift + A 的组合 LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam){ switch(msg){ case WM_HOTKEY:{ MessageBox(hwnd,"Global Hotkey Pressed!","Info",MB_OK); break; } default: return DefWindowProc(hwnd,msg,wParam,lParam); } return 0; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd){ HWND hWnd = CreateDialog(hInstance,(LPCTSTR)NULL,hWnd,NULL); RegisterClass(&wc); hWnd = CreateWindowEx(NULL,"STATIC","",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT, NULL,NULL,hInstance,&ExtraCreationData); ShowWindow(hWnd,nShowCmd); UpdateWindow(hWnd); if(!RegisterHotKey(hWnd,IDHOT_MYHOTKEY,MODIFIER_KEYS,VIRTUAL_KEY_CODE)){ MessageBox(hWnd,"Failed to register hotkey.","Error",MB_ICONERROR|MB_OK); } MSG msg={}; while(GetMessage(&msg,NULL,0,0)>0){ TranslateMessage(&msg); DispatchMessage(&msg); } UnregisterHotKey(hWnd,IDHOT_MYHOTKEY); DestroyWindow(hWnd); return (int)msg.wParam; } ``` 这段代码展示了基本框架,其中包含了创建窗口、注册/注销热键的过程,并且定义了一个简单回调函数用来接收来自系统的通知消息。需要注意的是实际应用开发过程中还需要考虑更多细节问题比如错误处理等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值