文章 "通过动态链接库(DLL)管理 MetaTrader 终端"

 

新文章 通过动态链接库(DLL)管理 MetaTrader 终端已发布:

这篇文章讲述了通过动态链接库(DLL)来管理MetaTrader的用户界面元件, 它使用的实例是对推送通知的传输设置做出修改. 库的代码以及例子脚本在文章的附件中.

我们有一个包含四个以上传输地址的 MetaQuotes ID 列表. 我们知道, SendNotification函数只是使用"选项"窗口中"通知"页面设置的ID. 这样, 您使用MQL发推送通知到指定ID的时候, 每次不能发超过4个. 让我们尝试改掉这一点.

这个问题可以通过两种方法解决 – 我们可以从头开始开发一个通知传输函数, 或者修改终端的设置, 然后使用标准函数. 第一个选择是非常耗费时间的并且不具备通用性. 所以, 我选择的是第二个方法. 反过来, 终端设置的修改也有各种方法. 根据我的经验, 这可以通过用户界面或者通过替换处理内存中的数值来实现. 操作内存看起来更好一些, 因为这可以避免用户看到弹出的窗口. 但是, 如果出了一点轻微的错误, 它就可能打断整个终端的操作. 而通过用户界面做, 可能发生的最糟的事情就是某个窗口或者按钮消失不见.

在这篇文章中, 我们会尝试使用辅助的动态链接库(DLL), 通过用户界面来管理终端. 特别是我们将考虑修改设置. 和终端的互操作将使用通用的方法, 即使用窗口和相关组件. 对终端进程不会产生影响. 这种方法也可以用于解决其它问题.


1.3. 处理菜单

和其他组件类似, 获得菜单的父句柄(某个窗口)后, 就可以对之进行操作了. 然后, 我们应该找到对应菜单项和子菜单然后进行一个选择.

请注意: 根据图表窗口是否展开, 终端菜单项的数量会有所改变(参见图 2). 菜单项的枚举从0开始.

图 2. 菜单项数量的改变

图 2. 菜单项数量的改变

如果菜单项的数量改变了, "工具(Tools)"菜单项的索引编号也会发生改变. 所以, 我们应该使用GetMenuItemCount(Hnd:HMenu) 函数取得菜单项的总数, 传入菜单的句柄.

作者:Galina Bobro