C# 从C中的WM_mouseheel msg中的wParam中检索WHEEL_DELTA#
我正在使用user32.dll中的全局钩子与C#中的dllimport。键盘1工作正常,但鼠标滚轮事件是一个问题。这是我的鼠标事件回调: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
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);
}