使用低级键盘钩子实现键盘改键
本文出自程序人生 >> 使用低级键盘钩子实现键盘改键
使用低级键盘钩子实现键盘改键
很垃圾的文章了,大牛们直接飘过吧。
为什么要实现改键?
前几天玩一个游戏,因为ASDW这几个键不能控制方向所以感觉很不方便,于是就想出了自己写一个全局键盘钩子来实现改键的程序;一般能自己解决的问题我都会自己想办法解决,所以也没有用网上先有的程序了。
怎么实现键盘改键?
装一个全局的低级键盘钩子(WH_KEYBOARD_LL),在键盘钩子回调函数(LowLevelKeyboardProc)中判断是不是目标按键,如果是则通过keybd_event来实现模拟按键,同时直接用return TRUE;来对回调函数进行返回。如果不是目标按键,那么需要传递到下一个钩子链。全局的钩子需要放在DLL里面。
改键效果
对普通程序有效……因为我玩的游戏是Direct X的,所以键盘钩子完全相当于不存在,因为没有接触过Direct X,所以就没有继续写下去了。
改键代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// 说明:头文件KeyRedir.h // 作者:代码疯子 // Blog: http://www.programlife.net/ #ifndef __KEYHOOK_H_H #define __KEYHOOK_H_H #ifdef MY_HOOK_API #else #define MY_HOOK_API _declspec(dllimport) #endif #ifdef __cplusplus extern "C" { #endif MY_HOOK_API BOOL __stdcall InstallHook(); MY_HOOK_API BOOL __stdcall UnInstallHook(); #ifdef __cplusplus } #endif #endif |
1 2 3 4 5 6 7 8 |
// 说明:Def文件KeyRedir.def // 作者:代码疯子 // Blog: http://www.programlife.net/ LIBRARY "KeyRedir" EXPORTS InstallHook UnInstallHook |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
// 说明:源文件KeyRedir.cpp // 作者:代码疯子 // Blog: http://www.programlife.net/ #include <windows.h> #pragma warning(disable:4996) #define MY_HOOK_API _declspec(dllexport) #include "KeyRedir.h" HINSTANCE g_hInst = NULL; static HHOOK g_hHook = NULL; BYTE g_bVK[4] = {VK_LEFT, VK_DOWN, VK_RIGHT, VK_UP}; LRESULT CALLBACK LowLevelKeyboardProc( int code, WPARAM wParam, LPARAM lParam) { if(code == HC_ACTION) { PKBDLLHOOKSTRUCT pStruct = (PKBDLLHOOKSTRUCT)lParam; DWORD dwIndex = 0; switch (pStruct->vkCode) { case L'A': case L'a': dwIndex = 0; break; case L'S': case L's': dwIndex = 1; break; case L'D': case L'd': dwIndex = 2; break; case L'W': case L'w': dwIndex = 3; break; default: return CallNextHookEx(g_hHook, code, wParam, lParam); } if (wParam == WM_KEYDOWN) { keybd_event(g_bVK[dwIndex], MapVirtualKey(g_bVK[dwIndex], 0), 0, 0); } else if (wParam == WM_KEYUP) { keybd_event(g_bVK[dwIndex], MapVirtualKey(g_bVK[dwIndex], 0), KEYEVENTF_KEYUP, 0); } return TRUE; } return CallNextHookEx(g_hHook, code, wParam, lParam); } BOOL __stdcall InstallHook() { g_hHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, g_hInst, NULL); return g_hHook == NULL ? FALSE : TRUE; } BOOL __stdcall UnInstallHook() { return UnhookWindowsHookEx(g_hHook); } BOOL WINAPI DllMain(IN HINSTANCE hDllHandle, IN DWORD nReason, IN LPVOID Reserved) { g_hInst = hDllHandle; return TRUE; } |
原创文章,转载请注明:
本文出自程序人生 >> 使用低级键盘钩子实现键盘改键
作者:代码疯子
您可能对下面的文章也感兴趣:
- 在DLL中获取主进程窗口句柄 (16.3)
- Win32写的屏幕取色工具 (15.5)
- SysListView32控件响应鼠标单击消息 (15.4)
- SDK设置编辑框控件只读属性 (12.8)
- error C2059: syntax error : ‘string’ (11.6)