Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从C中的WM_mouseheel msg中的wParam中检索WHEEL_DELTA#_C#_Hook_Mouseevent_Dllimport - Fatal编程技术网

C# 从C中的WM_mouseheel msg中的wParam中检索WHEEL_DELTA#

C# 从C中的WM_mouseheel msg中的wParam中检索WHEEL_DELTA#,c#,hook,mouseevent,dllimport,C#,Hook,Mouseevent,Dllimport,我正在使用user32.dll中的全局钩子与C#中的dllimport。键盘1工作正常,但鼠标滚轮事件是一个问题。这是我的鼠标事件回调: private IntPtr MouseInputCallback( int nCode, IntPtr wParam, IntPtr lParam) { if (nCode < 0) return CallNextHookEx(mouseHookId, nCode, wPa

我正在使用user32.dll中的全局钩子与C#中的dllimport。键盘1工作正常,但鼠标滚轮事件是一个问题。这是我的鼠标事件回调:

        private IntPtr MouseInputCallback(
            int nCode, IntPtr wParam, IntPtr lParam)
        {
            if (nCode < 0) return CallNextHookEx(mouseHookId, nCode, wParam, lParam);

            int eventType = wParam.ToInt32();
            if (eventType == WM_MOUSEHWHEEL)
            {
                int wheelMovement = GetWheelDeltaWParam(eventType);
            }

            return CallNextHookEx(mouseHookId, nCode, wParam, lParam);
        }

问题是
GET\u WHEEL\u DELTA\WPARAM
用于从
WindowProc
WPARAM
中提取鼠标滚轮DELTA,而您拥有的是
低级别mouseproc
回调。在,

wParam[in]

类型:WPARAM

鼠标消息的标识符。此参数可以是以下消息之一:WM_LBUTTONDOWN、WM_LBUTTONUP、WM_MOUSEMOVE、, WM_鼠标滚轮、WM_鼠标滚轮、WM_RBUTTONDOWN或WM_RBUTTONUP

wParam
只是
WM_mouseweel
;要得到车轮三角,你需要向内看

lParam[in]

类型:LPRAM

指向结构的指针

在这个结构中

穆塞达塔

类型:德沃德

如果消息为WM_MOUSEWHEEL,则此成员的高阶字为wheel delta。低阶字被保留。肯定的 值表示车轮已向前旋转,远离车轮 用户;负值表示车轮向后旋转, 面向用户。一次车轮咔嗒声定义为车轮_DELTA,即 120

你会发现你的价值


请不要问我使用此结构所需的C#p/调用详细信息,因为我几乎肯定会弄错:)

这里您要查找的是
WM#u MOUSE**H**WHEEL
,它是轮子的水平移动(从一边到另一边)

滚轮的滚动动作,即
WM_mouseweee
L

        if (eventType == WM_MOUSE**H**WHEEL)
        {
            int wheelMovement = GetWheelDeltaWParam(eventType);
        }

你确定这就是你想要的吗?也许你可以在这里代替鼠标滚轮,以及其他建议。

有些地方似乎不对劲。比较
wParam
是否与消息id相等,然后希望相同值的前16位发生变化?可能有问题,但在这种情况下,正确的解决方案是什么?
        if (eventType == WM_MOUSE**H**WHEEL)
        {
            int wheelMovement = GetWheelDeltaWParam(eventType);
        }