📄 keyboardhook.cpp
字号:
// KeyboardHook.cpp : Defines the initialization routines for the DLL.
//
#include "stdafx.h"
#include "Mmsystem.h"
#include <afxdllx.h>
#include "KeyboardHook.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define TOTAL_KEYS 40
CString cskey[TOTAL_KEYS]=
{
//"BACKSPACE",//VK_BACK 08 BACKSPACE key
//"TAB",//VK_TAB 09 TAB key
//"ENTER",//VK_RETURN 0D ENTER key
//"SHIFT",//VK_SHIFT 10 SHIFT key
//"CTRL",//VK_CONTROL 11 CTRL key
//"ALT",//VK_MENU 12 ALT key
//"PAUSE",//VK_PAUSE 13 PAUSE key
//"ESC",//VK_ESCAPE 1B ESC key
//"PAGE UP",//VK_PRIOR 21 PAGE UP key
//"PAGE DOWN",//VK_NEXT 22 PAGE DOWN key
//"END",//VK_END 23 END key
//"HOME",//VK_HOME 24 HOME key
"LEFT ARROW",//VK_LEFT 25 LEFT ARROW key
"UP ARROW",//VK_UP 26 UP ARROW key
"RIGHT ARROW",//VK_RIGHT 27 RIGHT ARROW key
"DOWN ARROW",//VK_DOWN 28 DOWN ARROW key
//"PRINT SCREEN",//VK_SNAPSHOT 2C PRINT SCREEN key
//"INSERT",//VK_INSERT 2D INS key
//"DELETE",//VK_DELETE 2E DEL key
"0",//30 0 key
"1",//31 1 key
"2",//32 2 key
"3",//33 3 key
"4",// 34 4 key
"5",// 35 5 key
"6",// 36 6 key
"7",// 37 7 key
"8",// 38 8 key
"9",// 39 9 key
"A",//41 A key
"B",//42 B key
"C",//43 C key
"D",//44 D key
"E",//45 E key
"F",//46 F key
"G",//47 G key
"H",//48 H key
"I",//49 I key
"J",//4A J key
"K",//4B K key
"L",//4C L key
"M",//4D M key
"N",//4E N key
"O",//4F O key
"P",//50 P key
"Q",//51 Q key
"R",//52 R key
"S",//53 S key
"T",//54 T key
"U",//55 U key
"V",//56 V key
"W",//57 W key
"X",//58 X key
"Y",//59 Y key
"Z",//5A Z key
//"Windows key",//VK_LWIN 5B Left Windows key (Microsoft? Natural? keyboard)
//"NUMPAD0",//VK_NUMPAD0 60 Numeric keypad 0 key
//"NUMPAD1",//VK_NUMPAD1 61 Numeric keypad 1 key
//"NUMPAD2",//VK_NUMPAD2 62 Numeric keypad 2 key
//"NUMPAD3",//VK_NUMPAD3 63 Numeric keypad 3 key
//"NUMPAD4",//VK_NUMPAD4 64 Numeric keypad 4 key
//"NUMPAD5",//VK_NUMPAD5 65 Numeric keypad 5 key
//"NUMPAD6",//VK_NUMPAD6 66 Numeric keypad 6 key
//"NUMPAD7",//VK_NUMPAD7 67 Numeric keypad 7 key
//"NUMPAD8",//VK_NUMPAD8 68 Numeric keypad 8 key
//"NUMPAD9",//VK_NUMPAD9 69 Numeric keypad 9 key
//"F1",//VK_F1 70 F1 key
//"F2",//VK_F2 71 F2 key
//"F3",//VK_F3 72 F3 key
//"F4",//VK_F4 73 F4 key
//"F5",//VK_F5 74 F5 key
//"F6",//VK_F6 75 F6 key
//"F7",//VK_F7 76 F7 key
//"F8",//VK_F8 77 F8 key
//"F9",//VK_F9 78 F9 key
//"F10",//VK_F10 79 F10 key
//"F11",//VK_F11 7A F11 key
//"F12",//VK_F12 7B F12 key
};
int nkey[TOTAL_KEYS]=
{
//0x08,//BACKSPACE",//VK_BACK 08 BACKSPACE key
//0x09,//"TAB",//VK_TAB 09 TAB key
//0x0d,//"ENTER",//VK_RETURN 0D ENTER key
//0x10,//"SHIFT",//VK_SHIFT 10 SHIFT key
//0x11,//"CTRL",//VK_CONTROL 11 CTRL key
//0x12,//"ALT",//VK_MENU 12 ALT key
//0x13,//"PAUSE",//VK_PAUSE 13 PAUSE key
//0x1b,//"ESC",//VK_ESCAPE 1B ESC key
//0x21,//"PAGE UP",//VK_PRIOR 21 PAGE UP key
//0x22,//"PAGE DOWN",//VK_NEXT 22 PAGE DOWN key
//0x23,//"NULL",//VK_END 23 END key
//0x24,//"HOME",//VK_HOME 24 HOME key
0x25,//"LEFT ARROW",//VK_LEFT 25 LEFT ARROW key
0x26,//"UP ARROW",//VK_UP 26 UP ARROW key
0x27,//"RIGHT ARROW",//VK_RIGHT 27 RIGHT ARROW key
0x28,//"DOWN ARROW",//VK_DOWN 28 DOWN ARROW key
//0x2c,//"PRINT SCREEN",//VK_SNAPSHOT 2C PRINT SCREEN key
//0x2d,//"INSERT",//VK_INSERT 2D INS key
//0x2e,//"DELETE",//VK_DELETE 2E DEL key
0x30,//"0",//30 0 key
0x31,//"1",//31 1 key
0x32,//"2",//32 2 key
0x33,//"3",//33 3 key
0x34,//"4",// 34 4 key
0x35,//"5",// 35 5 key
0x36,//"6",// 36 6 key
0x37,//"7",// 37 7 key
0x38,//"8",// 38 8 key
0x39,//"9",// 39 9 key
0x41,//"A",//41 A key
0x42,//"B",//42 B key
0x43,//"C",//43 C key
0x44,//"D",//44 D key
0x45,//"E",//45 E key
0x46,//"F",//46 F key
0x47,//"G",//47 G key
0x48,//"H",//48 H key
0x49,//"I",//49 I key
0x4a,//"J",//4A J key
0x4b,//"K",//4B K key
0x4c,//"L",//4C L key
0x4d,//"M",//4D M key
0x4e,//"N",//4E N key
0x4f,//"O",//4F O key
0x50,//"P",//50 P key
0x51,//"Q",//51 Q key
0x52,//"R",//52 R key
0x53,//"S",//53 S key
0x54,//"T",//54 T key
0x55,//"U",//55 U key
0x56,//"V",//56 V key
0x57,//"W",//57 W key
0x58,//"X",//58 X key
0x59,//"Y",//59 Y key
0x5a,//"Z",//5A Z key
//0x5b,//"Windows key",//VK_LWIN 5B Left Windows key (Microsoft? Natural? keyboard)
//0x60,//"NUMPAD0",//VK_NUMPAD0 60 Numeric keypad 0 key
//0x61,//"NUMPAD1",//VK_NUMPAD1 61 Numeric keypad 1 key
//0x62,//"NUMPAD2",//VK_NUMPAD2 62 Numeric keypad 2 key
//0x63,//"NUMPAD3",//VK_NUMPAD3 63 Numeric keypad 3 key
//0x64,//"NUMPAD4",//VK_NUMPAD4 64 Numeric keypad 4 key
//0x65,//"NUMPAD5",//VK_NUMPAD5 65 Numeric keypad 5 key
//0x66,//"NUMPAD6",//VK_NUMPAD6 66 Numeric keypad 6 key
//0x67,//"NUMPAD7",//VK_NUMPAD7 67 Numeric keypad 7 key
//0x68,//"NUMPAD8",//VK_NUMPAD8 68 Numeric keypad 8 key
//0x69,//"NUMPAD9",//VK_NUMPAD9 69 Numeric keypad 9 key
//0x70,//"F1",//VK_F1 70 F1 key
//0x71,//"F2",//VK_F2 71 F2 key
//0x72,//"F3",//VK_F3 72 F3 key
//0x73,//"F4",//VK_F4 73 F4 key
//0x74,//"F5",//VK_F5 74 F5 key
//0x75,//"F6",//VK_F6 75 F6 key
//0x76,//"F7",//VK_F7 76 F7 key
//0x77,//"F8",//VK_F8 77 F8 key
//0x78,//"F9",//VK_F9 78 F9 key
//0x79,//"F10",//VK_F10 79 F10 key
//0x7a,//"F11",//VK_F11 7A F11 key
//0x7b//"F12",//VK_F12 7B F12 key
};
#pragma data_seg("mydata")
//安装的键盘勾子句柄
HHOOK glhKeyboradHook=NULL;
//DLL实例句柄
HINSTANCE glhkInstance=NULL;
#pragma data_seg()
//#pragma comment(linker,"/SECTION:mydata,RWS")
static AFX_EXTENSION_MODULE KeyboardHookDLL = { NULL, NULL };
extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
//如果使用lpReserved参数则删除下面这行
UNREFERENCED_PARAMETER(lpReserved);
if (dwReason == DLL_PROCESS_ATTACH)
{
TRACE0("KEYBOARDHOOK.DLL Initializing!\n");
//扩展DLL仅初始化一次
if (!AfxInitExtensionModule(KeyboardHookDLL, hInstance))
return 0;
// Insert this DLL into the resource chain
// NOTE: If this Extension DLL is being implicitly linked to by
// an MFC Regular DLL (such as an ActiveX Control)
// instead of an MFC application, then you will want to
// remove this line from DllMain and put it in a separate
// function exported from this Extension DLL. The Regular DLL
// that uses this Extension DLL should then explicitly call that
// function to initialize this Extension DLL. Otherwise,
// the CDynLinkLibrary object will not be attached to the
// Regular DLL's resource chain, and serious problems will
// result.
//把DLL加入动态MFC类库中
new CDynLinkLibrary(KeyboardHookDLL);
//保存DLL实例句柄
glhkInstance=hInstance;
}
else if (dwReason == DLL_PROCESS_DETACH)
{
TRACE0("KEYBOARDHOOK.DLL Terminating!\n");
//终止这个链接库前调用它
AfxTermExtensionModule(KeyboardHookDLL);
}
return 1; // ok
}
//类构造函数
CKeyboradHook::CKeyboradHook()
{
}
//类析构函数
CKeyboradHook::~CKeyboradHook()
{
StopHook();
}
//键盘钩子
//钩子函数的实现:
LRESULT WINAPI KeyboradProc(int nCode,WPARAM wParam,LPARAM lParam)
{
for(int i =0;i<TOTAL_KEYS;i++)
{
if(nkey[i]==(int)wParam)
{
//if(((DWORD)lParam&0x40000000) && (HC_ACTION==nCode))
int nKeyStatus=lParam & 0x80000000;
switch(nKeyStatus)
case 0://WM_KEYDOWN
//case 0x80000000://WM_KEYUP
{
CString strFileName;
char szBuf[256];
char *pPath;
CString strPath;
GetModuleFileName(glhkInstance,szBuf,sizeof(szBuf));
pPath = szBuf;
while(strchr(pPath,'\\'))
{
pPath = strchr(pPath,'\\');
pPath++;
}
*pPath = '\0';
strPath=szBuf;
strFileName.Format("%sres\\%s.wav",strPath,cskey[i]);
sndPlaySound(strFileName,SND_ASYNC);
break;
}
}
}
return CallNextHookEx(glhKeyboradHook, nCode, wParam, lParam);
}
//安装钩子
BOOL CKeyboradHook::StartHook()
{
glhKeyboradHook=SetWindowsHookEx(WH_KEYBOARD,KeyboradProc,
glhkInstance,0);
if(glhKeyboradHook!=NULL)
return TRUE;
return FALSE;
}
//卸载钩子
BOOL CKeyboradHook::StopHook()
{
BOOL bResult=FALSE;
if(glhKeyboradHook)
{
bResult= UnhookWindowsHookEx(glhKeyboradHook);
if(bResult)
{
glhKeyboradHook=NULL;
}
}
return bResult;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -