要定義乙個全域性熱鍵,通常有三個步驟:
1、定義windows的訊息wm_hotkey的hook鏈,即
procedure myshortcut(var message:tmessage);message wm_hotkey;
2、向windows加入乙個全域性原子hotkey:globaladdatom(』hotkey』), 並保留其控制代碼
3、向windows登記熱鍵鏈: registerhotkey 函式原形如下
bool registerhotkey(
hwnd hwnd, // 連線熱鍵的視窗控制代碼
int id, // 全域性原子控制代碼
uint fsmodifiers, // 熱鍵修飾標誌
uint vk // 虛擬鍵盤碼
);
這裡,fsmodifiers是指虛擬鍵盤碼vk結合何種鍵一起生成wm_hotkey的訊息,它是下列三值的組合:
mod_alt // alt 鍵必須按下
mod_control // ctrl 鍵必須按下
mod_shift // shift 鍵必須按下
有了這些準備,你就可以定義自己喜歡的方式了。
下面是乙個範例,當ctrl+q在任何時候被按下時,都會打出「你好,crtl+q被按下」的資訊。
[delphi]view plain
copy
print?
type
tform1 = class(tform)
procedure formcreate(sender: tobject);
procedure formdestroy(sender: tobject);
protected
procedure myshortcut(var message: tmessage); message wm_hotkey;
private
public
end;
var
form1: tform1;
id:integer;
implementation
procedure tform1.myshortcut(var message: tmessage);
begin
showmessage(』你好,crtl + q 被按下』);
end;
procedure tform1.formcreate(sender: tobject);
begin
id:=globaladdatom(』hotkey』);
registerhotkey(handle,id,mod_control,88); // 88是q的ascii值
end;
退出時候取消熱鍵定義:
procedure tform1.formdestroy(sender: tobject);
begin
unregisterhotkey(handle,id);
end;
delphi熱鍵設定的方法
問題是你要全域性的.還是要系統級的,還是要區域性的。如果是全域性和區域性的,那麼在主窗體上 或其他控制項上 form 的keypress等屬性上監控就行了.如果是系統級的,那麼需要api了.簡單 用到3個api函式 bool registerhotkey hwnd hwnd,響應該熱鍵的視窗控制代碼...
Delphi 全域性熱鍵註冊 使用
rad studio 10.2.3 測試 全域性變數 var mhotkey01,mhotkey02 integer 1 在程式建立的時候或者窗體顯示的時候註冊熱鍵 begin 原子 mhotkey01 mhotkey01 globaladdatom xiaoyin hotkey ctrl f1 c...
Delphi全域性熱鍵的註冊
1.在窗啟動時建立atom aatom atom 定義在private中 1 if findatom zwxhotkey 0 then 2begin 3 aatom globaladdatom zwxhotkey 4end 5 if registerhotkey handle,aatom,mod a...