如何捕获鼠标的左右滚轮消息,然后模拟Shift按键按下

需求现状如下:我有个软件在XP下使用挺好的。但是到了win7下面,使用该软件的时候,出现如下问题:鼠标左右滚轮变得和上下滚轮一样了,只有同时按下shift键,才能恢复到原来鼠标左右滚轮功能。为了让鼠标的左右滚轮能正常使用,我不得不同时按下shift键,很麻烦。
我的打算:想用VC6写一个钩子函数,捕获鼠标的左右滚轮消息,如果检测到有鼠标的左右滚轮滚动,然后模拟Shift按钮按下,向所有进程发送此模拟Shift按钮按下的键盘消息。

3个回答

钩子处理WM_MOUSEWHEEL消息就行了吧。然后postmessage发送模拟键应该可以

totti1006
totti1006 好像不能解决这个问题。编译的时候说是error C2065: 'WM_MOUSEWHEEL' : undeclared identifier
5 年多之前 回复

在检测到滑轮按下时,直接发送个shift按键和滑轮按键就可以

totti1006
totti1006 如果检测鼠标左右滚轮滚动呢?LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam) { return 1; }中的哪个参数的哪个值代表了鼠标的左右滚轮滚动了呢?还有如果直接发送Shift键和左右滚轮键呢?
5 年多之前 回复
totti1006
totti1006 如何检查到有左右滚轮在滚动呢?其虚拟键的
5 年多之前 回复

我写了如下的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)

不知道为什么,求各位大侠指点迷津。
也不知道这些写 是否可以解决问题。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问