如果我使用计算机鼠标滚动窗口,我会得到以下 Spy++ 结果:
fwKeys: 0, zDelta: -120
我需要通过代码模拟鼠标滚轮事件,所以我像这样使用 PostMessage:
Public Declare Function CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal dwLength As Long) As Long
PostMessage lHwnd, WM_MOUSEWHEEL, MakeWParam(0, -120), 0
Public Function MakeWParam(ByVal uHigh As Long, ByVal uLow As Long) As Long
Dim foo(0 To 1) As Integer
Dim lRet As Long
foo(0) = uHigh
foo(1) = uLow
Call CopyMemory(lRet, VarPtr(foo(0)), Len(lRet))
MakeWParam = lRet
End Function
然而,这导致 Spy++ 告诉我以下内容:
fwKeys: 3C40, zDelta: 8996
我看不出我哪里做错了。
根据 MSDN,可以使用 GET_WHEEL_DELTA_PARAM 从 wParam 中提取 zDelta,但我没有看到任何有关如何从 fwKeys 和 zDelta 实际创建此 wParam 的信息。显然我的方法是不正确的。
我也试过 SendMessage 而不是 PostMessage,但结果是一样的。
感谢您的帮助!
最佳答案
由于您没有 ByVal
为 pSource
, 你要么不应该使用 VarPtr
为 foo(0)
,或者你应该明确地传递它 ByVal
:CopyMemory lRet, ByVal VarPtr(foo(0))
... 或 CopyMemory lRet, foo(0)
...
另外,您还有 foo() As Integer
,但您分配 Long
其内容的变量。你确定这是你想要的吗?
关于windows - 为 GET_WHEEL_DELTA_WPARAM 创建 wParam,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59688228/