其實(shí)人家微軟大哥早就為我準(zhǔn)備好了一個(gè)函數(shù),RegisterHotKey這是一個(gè)API函數(shù)(以我看這個(gè)函數(shù)就是個(gè)定時(shí)器,當(dāng)遇到用戶按了預(yù)定義的按鍵,就會(huì)產(chǎn)生WM_HOTKEY消息,類似于時(shí)間到了該執(zhí)行想要的代碼)
函數(shù)原型如下
BOOL RegisterHotKey(
HWND hWnd, // handle to window
int id, // hot key identifier
UINT fsModifiers, // key-modifier options
UINT vk // virtual-key code
);
說明:
第一個(gè)參數(shù)指定接收WM_HOTKEY消息的窗體句柄
第二個(gè)參數(shù)熱鍵標(biāo)識(shí),代表這個(gè)熱鍵的唯一ID,應(yīng)用程序中的標(biāo)識(shí)值在0x0000和0xbfff之間,DLL中的在0xc000和0xffff之間
第三個(gè)參數(shù) 指的是附加按鍵的修改,比如說你按住了CTRL鍵,這里的值可以選擇MOD_ALT,MOD_CONTROL,MOD_SHIFT,MOD_WIN,MOD_KEYUP
第四個(gè)參數(shù)指的是按鍵的虛擬碼 (這里你可以查找具體的msdn)
上面只是一個(gè)注冊熱鍵的過,那么熱鍵注冊成功呢,當(dāng)用戶按住熱鍵的時(shí)候,它就會(huì)產(chǎn)生WM_HOTKEY消息(也就是說時(shí)間到了,該執(zhí)行代碼了),那么我們的還要處理這個(gè)消息來為自己所用,假如用戶按住熱鍵我打算讓他彈出個(gè)對(duì)話框,我們可以這樣處理這個(gè)消息,如果你用的是MFC設(shè)計(jì)軟件,那么你可以在 PreTranslateMessage(MSG* pMsg)函數(shù)中截獲WM_HOTKEY消息,代碼如下
{
// TODO: Add your specialized code here and/or call the base class
switch(pMsg->message)
{
case WM_HOTKEY: //截獲這個(gè)消息來處理自己想要的結(jié)果
{
if (pMsg->wParam==(這里是你注冊時(shí)的熱鍵ID,也是唯一的))
{
MessageBox("Test is 成功");
}
break;
}
default: //默認(rèn)的處理
break;
}
return CDialog::PreTranslateMessage(pMsg);
}
剩下的工作就是反注冊熱鍵(意思就是注銷這個(gè)熱鍵),在程序關(guān)閉的時(shí)候?qū)懭胂铝写a,我是在OnClose中寫的 ,你也可以在OnDestroy中寫,
UnregisterHotKey(m_hWnd,(注冊時(shí)的ID)); //這個(gè)函數(shù)也是個(gè)API函數(shù),第一個(gè)參數(shù)是說明你要注銷哪個(gè)窗口句柄的熱鍵,第二個(gè)參數(shù)說明是你開始注冊的唯一ID
其實(shí)不管是你做任何事情,都要遵循一個(gè)順序,一般都是有一定的規(guī)律的,操作系統(tǒng)即使這樣復(fù)雜,但是里面的東西還是一點(diǎn)點(diǎn)拼湊起來的,并且每一個(gè)東西都是有一定的規(guī)律的,只要你自己能鉆研,我想沒有說明難處的。
相關(guān)推薦:2010年9月計(jì)算機(jī)等級(jí)考試精華備考資料匯總北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |