问题描述
- 如何捕获鼠标的左右滚轮消息,然后模拟Shift按键按下
- 需求现状如下:我有个软件在XP下使用挺好的。但是到了win7下面,使用该软件的时候,出现如下问题:鼠标左右滚轮变得和上下滚轮一样了,只有同时按下shift键,才能恢复到原来鼠标左右滚轮功能。为了让鼠标的左右滚轮能正常使用,我不得不同时按下shift键,很麻烦。
我的打算:想用VC6写一个钩子函数,捕获鼠标的左右滚轮消息,如果检测到有鼠标的左右滚轮滚动,然后模拟Shift按钮按下,向所有进程发送此模拟Shift按钮按下的键盘消息。
解决方案
钩子处理WM_MOUSEWHEEL消息就行了吧。然后postmessage发送模拟键应该可以
解决方案二:
在检测到滑轮按下时,直接发送个shift按键和滑轮按键就可以
解决方案三:
我写了如下的DLL
#include <windows.h>HHOOK g_hMouse = NULL;HHOOK g_hKeyboard = NULL;int g_flag = 0;LRESULT CALLBACK MouseProc(int nCode WPARAM wParam LPARAM lParam){ if(WM_MOUSEWHEEL == wParam) { g_flag = 1; } else { g_flag = 0; } return CallNextHookEx(g_hMouse nCode wParam lParam);}LRESULT CALLBACK KeyboardProc(int nCode WPARAM wParam LPARAM lParam){ if(1 == g_flag) { wParam |= VK_LSHIFT; } return CallNextHookEx(g_hKeyboard nCode wParam lParam);}void SetHook(){ g_hMouse = SetWindowsHookEx(WH_MOUSE MouseProc GetModuleHandle(""Hook"") 0); g_hKeyboard = SetWindowsHookEx(WH_KEYBOARD KeyboardProc GetModuleHandle(""Hook"") 0);}
编译的时候报错,如下:
Compiling...
Hook.cpp
E:VC++程序VC++程序WheelHookHook.cpp(10) : error C2065: 'WM_MOUSEWHEEL' : undeclared identifier
E:VC++程序VC++程序WheelHookHook.cpp(10) : warning C4018: '==' : signed/unsigned mismatch
Error executing cl.exe.
Creating browse info file...
WheelHook.dll - 1 error(s) 1 warning(s)
不知道为什么,求各位大侠指点迷津。
也不知道这些写 是否可以解决问题。
时间: 2024-10-30 13:27:20