windows - 为 GET_WHEEL_DELTA_WPARAM 创建 wParam

标签 windows api vb6

如果我使用计算机鼠标滚动窗口,我会得到以下 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,但结果是一样的。

感谢您的帮助!

最佳答案

由于您没有 ByValpSource , 你要么不应该使用 VarPtrfoo(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/

相关文章:

javascript - 使用 Twitter API 检查好友关系的存在

django - 如何为 django Rest API 生成静态 api 文档?

c# - 换声卡播放MP3

c++ - 两个 SYSTEMTIME 变量之间的差异

python - 从子进程启动时如何停止 Bottle Web 服务器

PHP OAuth 1.0 库,用于处理 api key / secret 对和端点(请求、授权和访问)

mysql - Crystal 报表4.6.1.0连接Mysql

ms-access - 为什么我的 Access 数据库在我从另一个进程中读取时不是最新的?

windows - InnoSetup - 为默认子项添加值?

c++ - CUDA内核作为类的成员函数