【发布时间】:2014-02-20 06:25:04
【问题描述】:
我正在尝试在 user32.dll 上使用 win32api 来获取鼠标滚轮输入。
我尝试了以下方法:
@state = Win32API.new('user32','DefWindowProc',['i'],'i')
p @state.call(0x0800)
但无论我用鼠标滚轮做什么,它都会返回 0。
我认为我的鼠标有问题,所以我尝试这样做:
@state = Win32API.new('user32','GetKeyState',['L'],'L')
p @state.call(0x01) #left key
p @state.call(0x02) #right key
它起作用了,所以我不确定鼠标滚轮出了什么问题。
问候
2014 年 2 月 20 日编辑: 我尝试执行以下操作:
GetActiveWindow = Win32API.new('user32','GetForegroundWindow','','i')
DefWindowProc = Win32API.new('user32','DefWindowProc','iiii','i')
DefWindowProc.call(GetActiveWindow.call,
然后,我被 UINT / Message(第二个参数)卡住了。
2014 年 2 月 20 日编辑:
我找到了 WM_MOUSEWHEEL 消息
最新版本:
GetActiveWindow = Win32API.new('user32','GetForegroundWindow','','i')
DefWindowProc = Win32API.new('user32','DefWindowProc','iiii','i')
#WM_MOUSEWHEEL message 0x020A
DefWindowProc.call(GetActiveWindow.call, 0x020A,
现在我只需要弄清楚第三个和第四个参数。
【问题讨论】:
-
DefWindowProc是窗口过程的默认过程。突然说它是没有意义的。您的应用程序是“图形”应用程序还是“控制台”应用程序? -
我会说它是图形化的,因为即使我可以选择在运行它时显示控制台,我也无法在控制台上输入。该应用程序在 ruby 编译器上运行,它不允许用户安装扩展库,但它有一个 win32api 库和脚本文件夹,所以我可以使用它们来安装我想要的鼠标输入功能,但要做到这一点,首先我需要能够获得鼠标输入。我能够获得左右点击,但我无法获得鼠标滚轮的输入。
-
如果您选择不显示控制台,那么您的应用程序没有用户界面?
-
它仍然会有用户界面。
-
@manuell 我编辑了这篇文章。我试图获取消息/UINT,但用于消息的 Windows MSDN 非常广泛,我对长长的列表有点退缩。我试图找到鼠标滚轮,但找不到太多。