带有按钮和鼠标点击拦截的自动化。 - 页 7 123456789101112 新评论 Ilnur Iksanov 2008.11.16 11:23 #61 HIDDEN >> : 发现一个有趣的窗口。几乎不可能在其中抓到任何东西。该窗口被称为 "另存为"。你能告诉我如何按下 "保存 "按钮吗? 如果你专门选择了保存按钮,你的按钮代码是0000000001 但用这段代码调用它时,什么也没有发生。这个未命名的窗口是什么? 这是一个弹出的对话框。它的系统描述符可以通过WinAPI函数GetLastActivePopup(int hWnd) 获得。 下面是一个如何使用这个函数的例子。 #include <WinUser32.mqh> #import "user32.dll" int GetAncestor(int hWnd, int gaFlags); int GetDlgItem(int hDlg, int nIDDlgItem); int GetLastActivePopup(int hWnd); #import void start() { int hMetaTrader, hDlg, hButtonSave, hChart = WindowHandle(Symbol(),Period()); hMetaTrader = GetAncestor(hChart,2); //дескриптор основного окна терминала PostMessageA(hMetaTrader,WM_COMMAND,57604,0); //вызываем окно сохранения Sleep(100); hDlg = GetLastActivePopup(hMetaTrader); //получаем дескриптор всплывающего окна hButtonSave = GetDlgItem(hDlg,1); //определяем дескриптор кнопки "Сохранить" PostMessageA(hDlg,WM_CO MMAND,1,hButtonSave); //нажимаем на кнопку } Nefedov Kirill 2008.11.16 15:41 #62 如果复选框不存在,可以用程序勾选。 用什么Win API函数来做这件事? Nefedov Kirill 2008.11.27 12:28 #63 在WinAPI中找到一个函数。CheckDlgButton函数 说明: function CheckDlgButton(Dlg: HWnd; IDButton: Integer; Check: Word); 标记或不标记一个按钮控制或改变一个三按钮控制的状态。 参数: Dlg:包含按钮的对话框。 IDButton: 按钮的可修改控件。 检查:删除(0),标记(1),阴影(2)。在执行它之前,哪个函数要检查按钮的状态。在我的情况下,它是在复选框中。 Yuriy Zaytsev 2008.12.31 02:35 #64 Ilnur >> : 延续API的主题 保存时--如果再发生这种情况,问题就会出现了! 保存为 ( 文件存在替换 ) 自动点击 "是"。 #include <WinUser32.mqh> #import "user32.dll" int GetAncestor(int hWnd, int gaFlags); int GetDlgItem(int hDlg, int nIDDlgItem); int GetLastActivePopup(int hWnd); #import void start() { int hMetaTrader, hDlg, hButtonSave, hChart = WindowHandle(Symbol(),Period()); hMetaTrader = GetAncestor( hChart,2); //дескриптор основного окна терминала PostMessageA( hMetaTrader, WM_COMMAND,57604,0); //вызываем окно сохранения Sleep(100); hDlg = GetLastActivePopup( hMetaTrader); //получаем дескриптор всплывающего окна hButtonSave = GetDlgItem( hDlg,1); //определяем дескриптор кнопки "Сохранить" PostMessageA( hDlg, WM_COMMAND,1, hButtonSave); //нажимаем на кнопку , Sleep(100); // и тут может возникнуть еще один диалог ФАЙЛ СУЩЕСТВУЕТ - сохранять ДА НЕТ int hDlg1 = GetLastActivePopup( hMetaTrader); // получаем дескриптор всплывающего окна СОХРАНЯТЬ ИЛИ НЕТ int hButtonYES = GetDlgItem( hDlg1,6); // определяем дескриптор кнопки ДА ID кнопки ДА он равен = 6 PostMessageA( hDlg1, WM_COMMAND,6, hButtonYES); // мы подтверждаем ДА } Yuriy Zaytsev 2009.01.01 20:42 #65 HIDDEN >> : 在WinAPI中找到一个函数。 CheckDlgButton函数 描述。 功能 CheckDlgButton(Dlg: HWnd; IDButton: Integer; Check: Word)。 对一个按钮控件进行标记或取消标记,或改变一个三按钮控件的状态。 参数。 Dlg: 包含该按钮的对话框。 IDButton: 按钮的可修改控件。 检查:删除(0),标记(1),阴影(2)。 在执行它之前,用哪个函数来检查按钮的状态。在我的案例中,在复选框中。 你可以使用IsDlgButtonChecked函数来确定开关的当前状态。 UINT WINAPI IsDlgButtonChecked(HWND hdlg, int idButton); 该函数返回位于hdlg对话框中的idButton开关的状态。如果开关处于禁用状态,则返回一个空值。如果开关处于开启状态,则返回值为1。2的值对应于一个不活动的开关,以灰色显示。如果出现错误,将返回一个负值-1。 --- 这里可以看到IsDlgButtonChecked工作原理的例子 http://frolov-lib.ru/books/bsp/v12/ch3_2.htm Nefedov Kirill 2009.04.30 07:21 #66 决定回到WinAPI研究的主题上来。 我试图用Microsoft Spy++ v.9.00.21022找到 "优化 "复选框的标识符,以检查它是否被选中。 我按部就班地做了以下工作。 1.开始的终端。 2. 打开测试器窗口。 3.在Spy++中,我搜索了一个窗口并指向 "优化 "元素。 点击了 "确定 "按钮。 4.在下一个窗口的标签中运行 我搞不清楚我的这个按钮的代码在哪里。 Ilnur 、YuraZ 和其他人教我识别这个我需要的描述符代码。 我为什么要求教你,而不是专门指向密码,因为我想学习识别其他元素。虽然如果你指定,我以后可能更容易找到它们,知道要找什么,在哪里找....。 Ilnur Iksanov 2009.04.30 18:11 #67 这里 我给出了一个如何找到 "开始 "按钮标识符的代码例子。 同样的图显示了如何找到控件的标识符。 位于策略测试器窗口的所有控件都以同样的方式定义。 例如,根据上图,"优化 "复选框(常规标签)的标识符为0x405。 Nefedov Kirill 2009.04.30 18:19 #68 我已经把代码整理出来了。我唯一找不到这2个按钮的代码的是测试和优化的日期,从 "日期 "到 "日期"。程序输出000001。伊尔努尔告诉我这些按钮的代码。 Ilnur Iksanov 2009.05.02 19:31 #69 HIDDEN >> : 我已经把它整理好了。我唯一找不到的是2个按钮的代码--测试的日期和从 "日期 "到 "日期 "的优化。程序输出 00000001。伊尔努尔告诉我这些按钮的代码。 是的,的确,这些项目的标识符是相同的。因此,在这种情况下,我们不能使用GetDlgItem()。 这就留下了使用FindWindowExA()识别它们的选项。然而,主要问题是我们是否需要识别它们。 不可能通过MQL的WinAPI来管理这些项目,即指定优化或测试期。 虽然我可能是错的。 Yuriy Zaytsev 2009.05.02 20:22 #70 Ilnur >> : 是的,的确,这些项目的标识符是相同的。因此,在这种情况下,我们不能使用GetDlgItem()。 这就留下了使用FindWindowExA()识别它们的选项。然而,主要问题是我们是否需要识别它们。 通过MQL中的WinAPI来管理这些项目,即指定优化或测试期的可能性是缺失的。 不过我可能是错的。 找到一个ID为0x0577的项目(点击改变专家按钮)。 点击 "下一个窗口 "3次,就可以进入 "开始 "日期字段:然后再尝试 "下一个窗口 "两次,我们就可以进入 "结束 "日期字段。 在这两种情况下,只需填写日期字段 SetWindowTextA( hwndEditDATEbeg, sDateBeg)。 SendMessageA(hwndEditDATEbeg, EN_UPDATE, _ID_EDIT_HEX_DATEbeg, 0)。 SendMessageA(hwndEditDATEbeg, EN_CHANGE, _ID_EDIT_HEX_DATEbeg, 0)。 .. 在MSQL5中,我真的希望能有一个内置的工具来与测试人员沟通... 123456789101112 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
发现一个有趣的窗口。几乎不可能在其中抓到任何东西。该窗口被称为 "另存为"。你能告诉我如何按下 "保存 "按钮吗?
如果你专门选择了保存按钮,你的按钮代码是0000000001
但用这段代码调用它时,什么也没有发生。这个未命名的窗口是什么?
这是一个弹出的对话框。它的系统描述符可以通过WinAPI函数GetLastActivePopup(int hWnd) 获得。
下面是一个如何使用这个函数的例子。
如果复选框不存在,可以用程序勾选。
用什么Win API函数来做这件事?
在WinAPI中找到一个函数。
CheckDlgButton函数
说明:function CheckDlgButton(Dlg: HWnd; IDButton: Integer; Check: Word);
标记或不标记一个按钮控制或改变一个三按钮控制的状态。
参数:Dlg:包含按钮的对话框。
IDButton: 按钮的可修改控件。
检查:删除(0),标记(1),阴影(2)。
在执行它之前,哪个函数要检查按钮的状态。在我的情况下,它是在复选框中。
延续API的主题
保存时--如果再发生这种情况,问题就会出现了!
保存为
( 文件存在替换 )
自动点击 "是"。
在WinAPI中找到一个函数。
CheckDlgButton函数
描述。功能 CheckDlgButton(Dlg: HWnd; IDButton: Integer; Check: Word)。
对一个按钮控件进行标记或取消标记,或改变一个三按钮控件的状态。
参数。Dlg: 包含该按钮的对话框。
IDButton: 按钮的可修改控件。
检查:删除(0),标记(1),阴影(2)。
在执行它之前,用哪个函数来检查按钮的状态。在我的案例中,在复选框中。
你可以使用IsDlgButtonChecked函数来确定开关的当前状态。
该函数返回位于hdlg对话框中的idButton开关的状态。如果开关处于禁用状态,则返回一个空值。如果开关处于开启状态,则返回值为1。2的值对应于一个不活动的开关,以灰色显示。如果出现错误,将返回一个负值-1。
---
这里可以看到IsDlgButtonChecked工作原理的例子
http://frolov-lib.ru/books/bsp/v12/ch3_2.htm
决定回到WinAPI研究的主题上来。
我试图用Microsoft Spy++ v.9.00.21022找到 "优化 "复选框的标识符,以检查它是否被选中。
我按部就班地做了以下工作。
1.开始的终端。
2. 打开测试器窗口。
3.在Spy++中,我搜索了一个窗口并指向 "优化 "元素。
点击了 "确定 "按钮。
4.在下一个窗口的标签中运行
我搞不清楚我的这个按钮的代码在哪里。
Ilnur 、YuraZ 和其他人教我识别这个我需要的描述符代码。
我为什么要求教你,而不是专门指向密码,因为我想学习识别其他元素。虽然如果你指定,我以后可能更容易找到它们,知道要找什么,在哪里找....。
这里 我给出了一个如何找到 "开始 "按钮标识符的代码例子。
同样的图显示了如何找到控件的标识符。
位于策略测试器窗口的所有控件都以同样的方式定义。
例如,根据上图,"优化 "复选框(常规标签)的标识符为0x405。
我已经把它整理好了。我唯一找不到的是2个按钮的代码--测试的日期和从 "日期 "到 "日期 "的优化。程序输出 00000001。伊尔努尔告诉我这些按钮的代码。
是的,的确,这些项目的标识符是相同的。因此,在这种情况下,我们不能使用GetDlgItem()。
这就留下了使用FindWindowExA()识别它们的选项。然而,主要问题是我们是否需要识别它们。
不可能通过MQL的WinAPI来管理这些项目,即指定优化或测试期。
虽然我可能是错的。
是的,的确,这些项目的标识符是相同的。因此,在这种情况下,我们不能使用GetDlgItem()。
这就留下了使用FindWindowExA()识别它们的选项。然而,主要问题是我们是否需要识别它们。
通过MQL中的WinAPI来管理这些项目,即指定优化或测试期的可能性是缺失的。
不过我可能是错的。
找到一个ID为0x0577的项目(点击改变专家按钮)。
点击 "下一个窗口 "3次,就可以进入 "开始 "日期字段:然后再尝试 "下一个窗口 "两次,我们就可以进入 "结束 "日期字段。
在这两种情况下,只需填写日期字段
SetWindowTextA( hwndEditDATEbeg, sDateBeg)。
SendMessageA(hwndEditDATEbeg, EN_UPDATE, _ID_EDIT_HEX_DATEbeg, 0)。
SendMessageA(hwndEditDATEbeg, EN_CHANGE, _ID_EDIT_HEX_DATEbeg, 0)。
..
在MSQL5中,我真的希望能有一个内置的工具来与测试人员沟通...