MQL4:从顾问管理计算机

有时你需要按第三方应用程序中的软件按钮,从某个组件读取文本,运行另一个终端,任何其他程序,打开文本文件,在特定时间关闭计算机,执行其他操作。在这里,我们将使用shell32.dll和winuser32.mqh库中的WinAPI shellexecute函数。如何自动化整个过程-我们将从新的外汇机器人编程课程中学习。这个主题是不寻常的,它将极大地扩展你作为程序员的技能。

有关ShellexeCute功能的更多信息,请访问MSDN帮助有关WinUser32.mqh库中可用的所有功能的详细信息,请访问此处。我将简要地描述每一个:

  • ShellExecute-对指定的文件执行操作;
  • SendMessage-将指定的消息发送到窗口,等待响应;
  • SendNotifyMessage-相同,但不等待答案;
  • PostMessage–将消息放入线程而不等待响应;
  • keybd_event–合成按键盘上指定的键;
  • mouse_event-合成鼠标运动和按键;
  • FindWindow-提取顶层窗口描述符;
  • SetWindowText–将文本放入窗口名称中;
  • GetWindowText从窗口名称读取文本;
  • GetWindowTextLength读取窗口名称中的字符数;
  • GetWindow-检索与指定窗口相关的窗口描述符;
  • GetParent-检索指定窗口或父窗口的描述符;
  • UpdateWindow更新程序窗口;
  • EnableWindow-在指定的窗口或控件中启用或禁用键盘和鼠标输入;
  • DestroyWindow-停用窗口或删除键盘焦点;
  • ShowWindow-设置指定窗口的显示状态;
  • SetActiveWindow-激活窗口;
  • AnimateWindow-允许在显示或隐藏窗口时创建特殊效果;
  • FlashWindow1、按一下窗口一次;
  • CloseWindow-最小化(但不关闭)指定的窗口;
  • MoveWindow-更改指定窗口的位置和大小;
  • SetWindowPos-更改子窗口、弹出窗口或顶层窗口的大小和位置;
  • IsWindowVisible-确定指定窗口的可见性状态;
  • IsIconic-确定指定的窗口是否已折叠;
  • IsZoomed-确定窗口是否已展开;
  • SetFocus-将键盘焦点设置在指定的窗口上;
  • GetFocus-检索具有键盘焦点的窗口描述符;
  • GetActiveWindow-获取活动窗口描述符;
  • IsWindowEnabled-确定是否启用指定的键盘和鼠标输入窗口;
  • MessageBox-显示一个模态对话框,其中包含系统图标、一组按钮和特定应用程序的简短消息,例如状态信息或关于错误;
  • MessageBeep-通过系统扬声器播放声音;
  • GetSystemMetrics-检索指定的系统度量或系统配置参数;
  • ExitWindows-退出交互式用户系统,关闭系统或关闭和重新启动系统;
  • SwapMouseButton-更改或恢复鼠标左键和右键的值。

我们今天要做什么?

我们不会考虑列表中的每一个功能,这将需要很长的时间,而且我不想剥夺你独立学习的机会。因此,我们只需解决一些简单的问题,例如:

  • 关闭或重新启动计算机;
  • 从终端运行另一个程序(例如Google Chrome);
  • 替换程序窗口的名称。

是的,这些都是非常简单的问题,但它们可以作为一个很好的例子来展示库的功能,并从这些例子中构建更复杂的算法。

启动应用程序

首先要做的是声明shellexecutew函数:

/--从外部DLL导入函数
#import «shell32.dll»
int ShellExecuteW(int hwnd,string lpOperation,string lpFile,string lpParameters,string lpDirectory,int nShowCmd);
#import

然后,使用onstart()方法运行所需的程序:

ShellExecuteW(NULL,NULL,»C:Program Files (x86)GoogleChromeApplicationchrome.exe»,NULL,NULL,1);

放下脚本任何图表我们将打开该程序。
现在,让我们在脚本中包含WinUser32.mqh终端库:

#include <WinUser32.mqh>

现在我们需要找到正在运行的程序的handle窗口。这可以通过WinAPI FindWindoww实现。
在终端库中,函数描述如下:

int FindWindowW(string lpClassName,string lpWindowName);

这意味着在string lpclassname参数中输入应用程序类的名称,而不是string lpwindowname参数,程序窗口的名称是“新选项卡”。您可以使用Spy++、WinSight、WinInspector等工具了解应用程序类的名称。下载并安装Spy++程序。

这个工具很容易使用。只要启动程序,按下双筒望远镜图像的按钮,并将瞄准器拖动到所需的窗口,我们就会立即看到它的名称、类和其他信息。在FindWindoww函数中,可以指定类名称和窗口名称(或单独)。我们只需要指定窗口的名称:

int handle=findwindoww(null,“‘Google Chrome’选项卡’);

屏幕上显示了找到的窗口的手柄信息。如果亨德尔为0,则找不到窗口。有了主窗口的手柄,应用程序可以做任何我们想做的事情:搜索我们想要的子窗口,读取和传输文本,按下按钮等。

在我们的代码中添加一个简单的SetWindowTextw函数。它将窗口文本更改为任何其他文本:

Setwindowtextw(Handle,我的Chromic)

要关闭计算机,请在磁盘上找到shutdown.exe程序。与前一种情况一样,我们在函数中键入带有所需参数的程序地址:

ShellExecuteW(NULL,NULL,»C:WindowsSystem32shutdown.exe»,»-s -t 00″,NULL,1);

要关闭计算机,请键入以下字符串:

shutdown.exe -s -t 00

要重新启动计算机,请键入以下字符串:

shutdown.exe -r -t 00

要查看不同版本Windows的设置-请单击在这个链接.

结论

在WinUser32.mqh库中,您还可以找到许多其他有趣的功能,使您能够直接从中管理第三方程序。顾问写在MQL4您可以在网站上找到WinAPI功能的完整列表。MSDN.

因此,您可以从MQL完全控制您的计算机。脚本自动完成所有交易准备活动:打开交易日志,新闻网站打开终端等等。

您还可以写一个顾问,在不支持自动交易的另一个交易终端进行交易,例如,在浏览器应用程序中进行交易。二进制选项或者股票交易平台。它提供了真正广泛的工作机会和许多不同的有趣的方法来应用大量的程序来获得,处理数据和操纵其他软件。

论坛主题

尊敬的Dmitry Aka Silentspec
TradeLikeaPro.ru

MQL4教程 ,,,,