1. 程式人生 > >如何實現全域性熱鍵

如何實現全域性熱鍵

    要實現系統範圍內的熱鍵功能,可以通過擷取鍵盤的訊息響應事件來實現,但是今天要介紹的是一個專門給用於實現

註冊熱鍵的函式:RegisterHotKey。下面是具體的介紹:

1、介紹第一個函式:RegisterHotKey,該函式定義一個系統範圍的熱鍵。

函式原型:

BOOL   RegisterHotKey( 
HWND   hWnd,         //響應該熱鍵的視窗控制代碼 
Int   id,                       //該熱鍵的唯一標識 
UINT   fsModifiers,    
//該熱鍵的輔助按鍵 

UINT   vk                   //該熱鍵的鍵值 
);  

 2、介紹第二個函式:GlobalAddAtom,該函式用於確定第一個函式所需的熱鍵的唯一識別符號。

函式原型:

ATOM   GlobalAddAtom( 

LPCTSTR   lpString   //自己設定的一個字串 (不區分大小寫)

); 

注:只適用於桌面應用程式。通過向全域性原子表新增一個字串,返回這個字串的唯一識別符號(原子ATOM)。

3、介紹第三個函式:UnregisterHotKey,該函式用於銷燬先前註冊的熱鍵。

函式原型:

BOOL UnregisterHotKey(HWND hWnd,int id);

4、示例:

新建一個基於基本對話方塊的MFC工程,工程名為HotKey。

4.1、在HotKeyDlg.cpp中呼叫介紹的第二個函式定義一個唯一識別符號:

// 熱鍵的識別符號
#define hotKeyID GlobalAddAtom(_T("MyHotkey"))

4.2、在對話方塊標頭檔案HotKeyDlg.h中新增宣告:

afx_msg LRESULT OnHotKey(WPARAM wParam,LPARAM lParam);  // 熱鍵訊息響應函式的宣告

4.3、在HotKeyDlg.cpp中為上述宣告新增實現函式:
LRESULT CHotKeyDlg::OnHotKey(WPARAM wParam,LPARAM lParam)
{
	if(hotKeyID == (int)wParam)
	{
		AfxMessageBox(_T("按下")); // 在這裡新增熱鍵的處理
	}

	return TRUE;
}
4.4、在HotKeyDlg.cpp中的BEGIN_MESSAGE_MAP 和END_MESSAGE_MAP 之間新增熱鍵的訊息對映:
BEGIN_MESSAGE_MAP(CHotKeyDlg, CDialog)
	……
	ON_MESSAGE(WM_HOTKEY,OnHotKey)  // 熱鍵的訊息對映
	……
END_MESSAGE_MAP()
4.5、切換到ResourceView介面,在對話方塊上新增一個“熱鍵”控制元件,ID為IDC_HOEKEY1,並通過ClassWizard(類嚮導)為其新增一個CHotKeyCtrl型的名為m_HoyKey的控制變數: 4.6、接著在對話方塊上新增一個儲存“按鈕”,ID為IDC_BTN_SAVE,雙擊按鈕,為按鈕新增響應函式:
/************************************************************************/
/* 儲存按鈕                                                             */
/************************************************************************/
void CHotKeyDlg::OnBtnSave() 
{
	// 登出原有的熱鍵
	::UnregisterHotKey(m_hWnd,hotKeyID);
	// 獲取新的熱鍵
	WORD wvk,wmod;
	m_HotKey.GetHotKey(wvk,wmod);
	// 註冊新的熱鍵
	BOOL result=RegisterHotKey(m_hWnd,hotKeyID,wmod,wvk);
	if(!result)
	{
		MessageBox(_T("註冊熱鍵失敗!"));
	}
}
4.7、最後通過Ctrl+W開啟ClassWizard新增訊息WM_ON_DESTROY的響應函式,設定程式退出時登出註冊的熱鍵:
void CHotKeyDlg::OnDestroy() 
{
	CDialog::OnDestroy();
	
	// 登出熱鍵
	::UnregisterHotKey(m_hWnd,hotKeyID);
}

4.8、執行效果圖:
剛開啟
設定熱鍵並儲存
按下Ctrl+W(前面儲存的熱鍵),彈出對話方塊