HHOOK keyHook = NULL;
//先宣告函式,實作在下面
LRESULT CALLBACK keyProc(int nCode, WPARAM wParam, LPARAM lParam);
//初始化鉤子,關閉鍵盤事件(除了ALT+CTRL+DELETE)
void initHook()
{
keyHook = SetWindowsHookEx(WH_KEYBOARD_LL, keyProc, GetModuleHandle(NULL), 0);
}
//銷毀鉤子
void unHook()
{
if (keyHook)
{
UnhookWindowsHookEx(keyHook);
}
}
//鉤子用的函式
LRESULT CALLBACK keyProc(int nCode, WPARAM wParam, LPARAM lParam)
{
//在WH_KEYBOARD_LL模式下lParam 是指向KBDLLHOOKSTRUCT型別地址
KBDLLHOOKSTRUCT *pkbhs = (KBDLLHOOKSTRUCT *)lParam;
//如果nCode等于HC_ACTION則處理該訊息,如果小于0,則鉤子子程就必須將該訊息傳遞給 CallNextHookEx
if (nCode == HC_ACTION)
{
if (pkbhs->vkCode == VK_ESCAPE)
{
CLogHelp::ITCLog("keyProc---->Esc");
if (g_pthisDlg)
{
CLogHelp::ITCLog("Closescreen_FULL");
g_pthisDlg->Closescreen_FULL();
}
}
else if (pkbhs->vkCode == VK_ESCAPE && GetAsyncKeyState(VK_CONTROL) & 0x8000 && GetAsyncKeyState(VK_SHIFT) & 0x8000) {
//qDebug() << "Ctrl+Shift+Esc";
}
else if (pkbhs->vkCode == VK_ESCAPE && GetAsyncKeyState(VK_CONTROL) & 0x8000)
{
//qDebug() << "Ctrl+Esc";
}
else if (pkbhs->vkCode == VK_TAB && pkbhs->flags & LLKHF_ALTDOWN)
{
CLogHelp::ITCLog("Alt+Tab ");
}
else if (pkbhs->vkCode == VK_ESCAPE && pkbhs->flags &LLKHF_ALTDOWN)
{
CLogHelp::ITCLog("Alt+Esc");
}
else if (pkbhs->vkCode == VK_LWIN || pkbhs->vkCode == VK_RWIN)
{
CLogHelp::ITCLog("VK_LWIN vs VK_RWIN ");
}
else if (pkbhs->vkCode == VK_F4 && pkbhs->flags & LLKHF_ALTDOWN)
{
CLogHelp::ITCLog("Alt+F4 ");
}
else if (pkbhs->vkCode == VK_F1 && pkbhs->flags &LLKHF_ALTDOWN)
{
CLogHelp::ITCLog("Alt+F1 back room ");
unHook();
}
else if (pkbhs->vkCode == VK_F1)
{
CLogHelp::ITCLog("F1 Key press ");
}
return 1;//回傳1表示截取訊息不再傳遞,回傳0表示不作處理,訊息繼續傳遞
}
return CallNextHookEx(keyHook, nCode, wParam, lParam);
}
CSDN認證博客專家
C/C++
vc/qt
音視頻
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/237162.html
標籤:其他
上一篇:機器學習(七)音頻可視化第二篇
