Delphi 全域性熱鍵KeyPress 和 熱鍵 API(RegisterHotKey、UnRegisterHotKey、GlobalAddAtom、GlobalDeleteAtom、GlobalFindAtom)
阿新 • • 發佈:2020-07-28
Delphi 全域性熱鍵KeyPress 和 熱鍵 API(RegisterHotKey、UnRegisterHotKey、GlobalAddAtom、GlobalDeleteAtom、GlobalFindAtom)
1、熱鍵按作用分為:全域性、區域性、系統級
- 全域性和區域性的:主窗體可設定KeyPress屬性監控 ;
-
self.KeyPreview:=true;
-
- 系統級:需要用到win API函式:RegisterHotKey、UnRegisterHotKey、GlobalAddAtom、GlobalDeleteAtom、GlobalFindAtom
2、熱鍵API(RegisterHotKey、UnRegisterHotKey、GlobalAddAtom、GlobalDeleteAtom、GlobalFindAtom)
RegisterHotKey 原型:
BOOL RegisterHotKey(
HWND hWnd, //響應該熱鍵的視窗控制代碼
Int id, //該熱鍵的唯一標識
UINT fsModifiers, //該熱鍵的輔助按鍵
UINT vk //該熱鍵的鍵值
);
fsModifiers 輔助按鍵的取值:
- MOD_ALT //Either ALT key must be held down.
- MOD_CONTROL //Either CTRL key must be held down.
- MOD_NOREPEAT //Changes the hotkey behavior so that the keyboard auto-repeat does not yield multiple hotkey notifications. Windows Vista: This flag is not supported.
- MOD_SHIFT //Either SHIFT key must be held down.
- MOD_WIN //Either WINDOWS key was held down.
GlobalAddAtom 原型:
ATOM GlobalAddAtom(
LPCTSTR lpString //增加一個字串到全域性原子列表中,並返回一個唯一標識值。
);
GlobalFindAtom 原型:
ATOM GlobalFindAtom(
LPCTSTR lpString // 在全域性原子列表中查詢是否存在指定字串
);
返回值: 如果在全域性原子中存在要查詢的字串,則返回此字串對應的ID值。沒有找到則返回0。
3、Delphi 示例:
HotKeyId: Integer; //宣告一個全域性變數
HotKeyId := GlobalAddAtom('MyHotKey') //取得唯一標識ID
RegisterHotKey(Handle, hotkeyid, MOD_ALT, VK_F9); //註冊ALT+F9熱鍵
RegisterHotKey(Handle, hotkeyid, 0, VK_F9); //註冊F9熱鍵
UnRegisterHotKey(handle, HotKeyId); //登出HotKey, 釋放資源。
GlobalDeleteAtom('MyHotKey'); //
procedure HotKeyDown(var Msg: Tmessage); message WM_HOTKEY; //宣告
procedure TForm1.HotKeyDown(var Msg: Tmessage);
begin
if (Msg.LparamLo = MOD_ALT) AND (Msg.LParamHi = VK_F9 then) // 假設熱鍵為 ALT+F9
begin
//事件
end;
end;
4、注意事項:
當其他程式先註冊了系統級的熱鍵,則再註冊熱鍵無效。
建立時間:2020.07.28 更新時間: