专业人士怎么说:如何在MQL中获得鼠标滚动值? [转贴自第五论坛]。

 
我们谈论的是Windows DLL。自己写的还没有考虑。


在网上冲浪后,我决定了三种 可能性。

处理WM_MOUSEWHEEL 1.
处理WM_INPUT. 2.
3.接收来自DirectInput的鼠标数据。

第一个选项建议有一个处理该事件的窗口。不幸的是,我不知道如何从MQL进入终端窗口的消息队列,因此这个变体被淘汰了。http://www.rsdn.ru/article/baseserv/hookdll.xml

第二种变体也意味着一个窗口,但我希望通过调用GetRawInputBuffer 函数,我可以不通过终端就能接收数据。

我已经能够使用所有的注册和检索功能。即:
GetRawInputDeviceInfo
GetRawInputDeviceList
GetRegisteredRawInputDevices
RegisterRawInputDevices

但我要找的GetRawInputBuffer 函数没有工作。缓冲区是空的,没有数据被捕捉到。


不幸的是,我的第三个方案也失败了,因为我不知道如何获得LPDIRECTINPUTDEVICE8 / LPDIRECTINPUT8接口的实例。


专家们,你们有什么建议?


我也加入了这个问题。
 

首先,应该决定以何种形式接收关于事件发生的信息:直接还是间接?

假设编写自己的DLL不是一种选择,为什么不把API也取消呢?如果间接方法是合适的。

我们应该循环一个脚本,检查窗口中第一个可见条的索引--WindowFirstVisibleBar(你可以和窗口中的条数 一起做--WindowBarsPerChart)。如果它们与前一个值不同,则说明图表已被检查过。的确,在这种情况下,不仅是鼠标滚轮可能是原因(放大时间--"+","-",点击原点或终点,直接跳到所需的日期)。

在任何情况下,目前还没有足够的信息来知道检测鼠标滚轮旋转事件到底需要什么。然后你可以提出方法。

P.S. 如果你需要访问窗口处理函数,它是SetWindowLongPtr(见msdn)。但在这里你不能没有DLL,因为你不能分配位于MQL代码中的新的消息处理程序。

 

控制滚动图的想法,是。但不是comilfo....

不,你需要定义一个滚轮事件。

 
Scriptong:

在任何情况下,目前还没有足够的信息来知道到底需要从鼠标滚轮旋转事件检测中得到什么。然后可以提出方法。


具体要求是什么?

当然是名单。还有什么?:)

 

不,这是一个钩子。 我不知道如何在MQL中获得该函数的地址。
 
在终端窗口挂上一个带有拦截功能的事件处理 的自定义程序--就这样了。
我是这样做的:
- 用户点击关闭MT窗口
- 我问:你是否改变了指标 - 保存?是 否 取消
当你取消时,没有人去任何地方。
是--保存并退出,否--保存并退出。
这是很原始的。

钩子与此没有关系,真的。

> 我们谈论的是Windows DLLs。自己写的还没有考虑。

好运...
 
jartmailru:
终端窗口应该有一个带有拦截功能的自定义事件处理程序--仅此而已。

你是说SetWindowLong?
 
sergeev:
你是说SetWindowLong?
是的。
 
sergeev:

具体要求是什么?

当然了,名单在转动。还有什么?:)


如果列表(CListCtrl)是它自己的对象,那有什么问题?接收鼠标事件的是列表,而不是Meta Trader 窗口。

还是我们说的是基于MT4图表对象的列表?

 
Scriptong:


如果列表(CListCtrl)是它自己的对象,问题是什么?接收鼠标事件的是列表,而不是Meta Trader的窗口。

还是说我们说的是基于MT4图形对象的列表?


如果没有问题,请说明如何确定鼠标滚轮移动的FACT。当鼠标指针在MT4窗口时。这是非常有趣的 :)

当然--通过Windows的方式。

原因: