gpt4 book ai didi

c# - 在 C# 中从 WM_MOUSEHWHEEL 消息中的 wParam 检索 WHEEL_DELTA

转载 作者:太空狗 更新时间:2023-10-29 23:25:30 30 4
gpt4 key购买 nike

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

        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);
}

一切顺利,直到我必须检索显示滚轮滚动方式和数量的 WHEEL_DELTA 值。由于 C# 缺少 GET_WHEEL_DELTA_WPARAM宏,我正在使用应该完成这项工作的代码:

private static int GetWheelDeltaWParam(int wparam) { return (int)(wparam >> 16); }

但输出始终为0,这没有任何意义。

编辑 - 结果:

        MSLLHOOKSTRUCT mouseData = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(MSLLHOOKSTRUCT));
int wheelMovement = GetWheelDeltaWParam(mouseData.mouseData);

[StructLayout(LayoutKind.Sequential)]
private struct MSLLHOOKSTRUCT
{
public Point pt;
public int mouseData;
public int flags;
public int time;
public long dwExtraInfo;
}

最佳答案

问题是 GET_WHEEL_DELTA_WPARAM 用于从 WindowProcwParam 中提取鼠标滚轮增量,而您拥有的是 LowLevelMouseProc 回调。在 your case ,

wParam [in]

Type: WPARAM

The identifier of the mouse message. This parameter can be one of the following messages: WM_LBUTTONDOWN, WM_LBUTTONUP, WM_MOUSEMOVE, WM_MOUSEWHEEL, WM_MOUSEHWHEEL, WM_RBUTTONDOWN, or WM_RBUTTONUP.

wParam 就是WM_MOUSEWHEEL;要获得车轮增量,您需要查看

lParam [in]

Type: LPARAM

A pointer to an MSLLHOOKSTRUCT structure.

在那个结构中,

mouseData

Type: DWORD

If the message is WM_MOUSEWHEEL, the high-order word of this member is the wheel delta. The low-order word is reserved. A positive value indicates that the wheel was rotated forward, away from the user; a negative value indicates that the wheel was rotated backward, toward the user. One wheel click is defined as WHEEL_DELTA, which is 120.

你会发现你的值(value)。

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

关于c# - 在 C# 中从 WM_MOUSEHWHEEL 消息中的 wParam 检索 WHEEL_DELTA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9330194/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com