需求现状如下:我有个软件在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++程序\WheelHook\Hook.cpp(10) : error C2065: 'WM_MOUSEWHEEL' : undeclared identifier
E:\VC++程序\VC++程序\WheelHook\Hook.cpp(10) : warning C4018: '==' : signed/unsigned mismatch
Error executing cl.exe.
Creating browse info file...
WheelHook.dll - 1 error(s), 1 warning(s)
不知道为什么,求各位大侠指点迷津。
也不知道这些写 是否可以解决问题。