久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
使用WH_KEYBOARD_LL 低級鍵盤鉤子屏蔽系統熱鍵
[打印本頁]
作者:
liuyuxi
時間:
2015-1-11 00:06
標題:
使用WH_KEYBOARD_LL 低級鍵盤鉤子屏蔽系統熱鍵
VC中使用低級鉤子捕獲系統按鍵
在VC中捕按鍵可以在OnKeyDown 或 OnKeyUp 事件中進行捕獲,不過這有很大的局限性,這里只能捕獲用戶按鍵。但在一些特殊的工程(項目)中往往需要捕獲某些系統按鍵以完成特殊的功能,我們就不得不選擇鉤子了,一般情況下大家都會選擇 WH_KEYBOARD 這個鉤子類型,但是在編寫過程會發現這個鉤子類型并不能捕獲所有的系統按鍵,怎么辦呢?那就得選擇 WH_KEYBOARD_LL (低級鍵盤鉤子)了,使用它可以捕獲全部的系統按鍵,一個不漏……
在使用低級鍵盤鉤子之前,先在 StdAfx.h 的第一行添加一條: #define _WIN32_WINNT 0x400 (這里假定你是用的 MFC 的 DLL),不然在編譯的時候會提示說 WH_KEYBOARD_LL 沒有定義。網上還有另一種方法:首先定義 #define WH_KEYBOARD_LL 13 ; 然后 Winuser.h 中定義的 tagKBDLLHOOKSTRUCT 代碼拷貝到工程中。
下面代碼用以捕獲系統按鍵:
/*
用戶模塊
return TRUE; --->丟棄該消息
*/
LRESULT CALLBACK Hotkey_Filter(int nCode, WPARAM wParam, LPARAM lParam)
{
KBDLLHOOKSTRUCT *Key_Info = (KBDLLHOOKSTRUCT*)lParam;
if (HC_ACTION == nCode)
{
if (WM_KEYDOWN == wParam || WM_SYSKEYDOWN) //如果按鍵為按下狀態
{
if (Key_Info->vkCode == VK_LWIN || Key_Info->vkCode == VK_RWIN) //屏敝 WIN(左右) 鍵
{
return TRUE;
}
if (Key_Info->vkCode == 0x4D && ((GetKeyState(VK_LWIN) & 0x8000) ||
(GetKeyState(VK_RWIN) & 0x8000))) //屏敝 WIN+D 組合鍵(左右)
{
return TRUE;
}
if (Key_Info->vkCode == 0x44 && ((GetKeyState(VK_LWIN) & 0x8000) ||
(GetKeyState(VK_LWIN) & 0x8000))) //屏敝 WIN+M 組合鍵(左右)
{
return TRUE;
}
if (Key_Info->vkCode == 0x1b && GetKeyState(VK_CONTROL) & 0x8000) //屏敝 CTRL + ESC 組合鍵
{
return TRUE;
}
if (Key_Info->vkCode == VK_TAB && Key_Info->flags & LLKHF_ALTDOWN) //屏敝 ATL + TAB 組合鍵
{
return TRUE;
}
if (Key_Info->vkCode == VK_ESCAPE && Key_Info->flags & LLKHF_ALTDOWN) //屏敝 ATL + ESC 組合鍵
{
return TRUE;
}
}
}
return CallNextHookEx(h_HotKey, nCode, wParam, lParam); //回調
}
BOOL Hotkey_Install(DWORD ThreadID)
{
h_HotKey = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)Hotkey_Filter, //安裝低級鍵盤鉤子
GetModuleHandle("hotkey"), ThreadID);
if (NULL == h_HotKey)
{
MessageBox(NULL, "安裝鉤子出錯 !", "error", MB_ICONSTOP);
return FALSE;
}
return TRUE;
}
BOOL Hotkey_UnInstall()
{
UnhookWindowsHookEx(h_HotKey); //卸載鉤子
return TRUE;
}
*** 注意***
此鉤子必須是系統級的鉤子,也就是說在安裝鉤子的時候,ThreadID 的值必須為0。
在這兒需要特別說明的是:if (WM_KEYDOWN == wParam || WM_SYSKEYDOWN) ,如果不加這句,按鍵信息會被響應兩次(KeyUP & KeyDown),
開始我只寫了 if (WM_KEYDOWN == wParam) ,在捕獲 ALT+TAB 時就一直出錯,找不到方向,后來才想到 ALT 鍵盤是系統鍵,所以必須得加上
WM_SYSKEYDOWN,這樣才能捕獲 ALT+TAB ! if (WM_KEYDOWN == wParam || WM_SYSKEYDOWN) 也可以寫成 if (WM_KEYDOWN == wParam || WM_SYSKEYDOWN == wParam)
如果要想屏敝 CTRL+ALT+DEL 鍵的話,也可能用相當的方法!不過可以用一種更簡單的方法來屏敝 CTRL+ALT+DEL :屏敝這個組合鍵的其中任意一個
按鍵便可達到相同的效果。
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产精品久久久久久久免费观看
|
99爱在线视频
|
精品免费观看
|
99精品一区二区
|
久久久久久久综合
|
一二三区在线
|
久久久久久久久国产精品
|
亚洲高清视频在线观看
|
国产成人精品午夜
|
一级免费a
|
国产免费一区
|
国产99久久精品一区二区300
|
亚洲一区二区三区在线视频
|
成人性视频免费网站
|
毛片网在线观看
|
国产精品一区二区三区四区
|
成人欧美一区二区三区在线播放
|
日韩欧美专区
|
国产精品一区二区久久久久
|
一区二区三区电影网
|
日韩av一区二区在线观看
|
亚洲天堂中文字幕
|
精品色
|
免费久久精品视频
|
天天想天天干
|
成人av电影网
|
夜夜精品浪潮av一区二区三区
|
国外成人在线视频网站
|
九色国产
|
一区日韩
|
亚洲欧美日韩电影
|
免费精品
|
成人妇女免费播放久久久
|
一区二区在线
|
国产高清视频
|
成人福利视频网站
|
国产农村妇女精品一二区
|
精品国产一区二区三区观看不卡
|
久久亚洲一区二区
|
成人av网站在线观看
|
国产精品国产a
|