使用低级键盘钩子实现键盘改键
2011-11-10 14:58
519 查看
本文出自程序人生 >> 使用低级键盘钩子实现键盘改键
为什么要实现改键?
前几天玩一个游戏,因为ASDW这几个键不能控制方向所以感觉很不方便,于是就想出了自己写一个全局键盘钩子来实现改键的程序;一般能自己解决的问题我都会自己想办法解决,所以也没有用网上先有的程序了。
怎么实现键盘改键?
装一个全局的低级键盘钩子(WH_KEYBOARD_LL),在键盘钩子回调函数(LowLevelKeyboardProc)中判断是不是目标按键,如果是则通过keybd_event来实现模拟按键,同时直接用return TRUE;来对回调函数进行返回。如果不是目标按键,那么需要传递到下一个钩子链。全局的钩子需要放在DLL里面。
改键效果
对普通程序有效……因为我玩的游戏是Direct X的,所以键盘钩子完全相当于不存在,因为没有接触过Direct X,所以就没有继续写下去了。
改键代码
原创文章,转载请注明:
本文出自程序人生 >> 使用低级键盘钩子实现键盘改键
作者:代码疯子
您可能对下面的文章也感兴趣:
在DLL中获取主进程窗口句柄 (16.3)
Win32写的屏幕取色工具 (15.5)
SysListView32控件响应鼠标单击消息 (15.4)
SDK设置编辑框控件只读属性 (12.8)
error C2059: syntax error : ‘string’ (11.6)
分类:Windows SDK标签:HOOK, 改键, 键盘钩子
使用低级键盘钩子实现键盘改键
很垃圾的文章了,大牛们直接飘过吧。为什么要实现改键?
前几天玩一个游戏,因为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 2324 | // 说明:源文件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)
分类:Windows SDK标签:HOOK, 改键, 键盘钩子
相关文章推荐
- C++ MFC 使用低级键盘钩子 获取键值 (WH_KEYBOARD_LL)
- 低级键盘钩子在delphi中的实现
- 用C#实现低级Windows API键盘钩子
- 使用日志钩子实现键盘消息勾挂的例子[z]
- 使用日志钩子实现键盘消息勾挂的例子
- Win7环境使用VC2008编写DLL实现键盘钩子
- android使用键盘钩子实现按键劫持
- 基于低级键盘钩子的dota改键(全局+免DLL注入)MFC实现(源码+总结)
- 使用raw input 代替全局键盘钩子
- 使用线程构造防键盘钩子
- 关于键盘钩子使用心得
- 键盘输入3*3的整数矩阵,求两条对角线中最小的元素和最大的元素,使用普通指针变量实现。
- c#使用钩子拦截鼠标键盘事件
- QT实现键盘钩子
- C#+低级Windows API钩子拦截键盘输入
- 使用jsonp跨域调用百度js实现搜索框智能提示,并实现鼠标和键盘对弹出框里候选词的操作【附源码和在线测试地址】
- 钩子原理及实例:实现键盘钩子截获密码
- MFC4.2实现键盘钩子捕获,基于DLL实现
- C#低级Windows API钩子拦截键盘输入
- Delphi中通过钩子技术实现键盘监控