带有按钮和鼠标点击拦截的自动化。 - 页 5

 
xeon >> :

这是一个很好的终端:-)))

我们都有一个这样的终端。而且在某种意义上,它有一个红色的按钮。

只是你必须用警棍敲打自己的脑袋。:))

 

伊尔努尔,按钮的文字也可以通过某种方式阅读。程序Spy++会读取它。



即逻辑是,只要按钮被设置为 "停止",我们就等待进一步的行动。

给我一个User32.dll的函数,它能正确地拉出按钮的文本。



GetDlgItemText函数

描述。
函数 GetDlgItemText(Dlg: HWnd; IDDlgItem: Integer; Str: PChar; MaxCount: Integer): Integer。
读取控件的文本。
参数。
Dlg: 对话框的标识符。
IDDlgItem: 项目的ID。
Str: 接收文本的缓冲区。
MaxCount: 缓冲区的大小。
返回的值。
实际复制的字符数。


#import "user32.dll"

string GetDlgItemText (int hWnd, int IDDlgItem, string PChar, int MaxCount);

##进口


我连接的功能是否正确。


因为终端在日志中显示我

2008.11.15 21:03:41 tester EURUSD,H1: 不能从dll 'user32.dll'调用函数'GetDlgItemText'(错误127)。

 
xeon >> :

这是一个很好的终端:-)))

Xeon,你才是始作俑者....

我自己不会进入这一步......但我不需要....

 
HIDDEN >> :

. . .

#import "user32.dll"

string GetDlgItemText (int hWnd, int IDDlgItem, string PChar, int MaxCount);

##进口


我连接的功能是否正确。


因为终端在日志中显示我

2008.11.15 21:03:41 tester EURUSD,H1: 不能从dll 'user32.dll'调用函数'GetDlgItemText'(错误127)。

它更像是这样.. .
#import "user32.dll"
   int GetDlgItemTextA(int hWnd, int IDDlgItem, string PChar, int MaxCount);
#import
 
Ilnur >> :
>>它更像这样。. .

这将返回一个整数,但你需要按钮的文本。

 
HIDDEN >> :

这将返回一个整数,但你需要按钮的文本。

该文本在PChar字符串缓冲区中返回。

该函数本身返回实际读取的字符数。

 
HIDDEN >> :

伊尔努尔,按钮的文字也可以通过某种方式阅读。Spy++程序会读取它。


下面是一个启动策略测试器并等待其完成的脚本例子。使用GetWindowTextA() 读取按钮的文本。

有趣的是,在这种情况下,测试器窗口不一定要可见。


#include <WinUser32.mqh>

#import "user32.dll"
   int GetAncestor(int hWnd, int gaFlags);
   int GetDlgItem(int hDlg, int nIDDlgItem);
#import

void start()
{
   int hMetaTrader, hTerminal, hTester, hButtonStart;
      
   hMetaTrader = GetAncestor(WindowHandle(Symbol(),Period()),2); //дескриптор основного окна терминала
	
   hTerminal = GetDlgItem(hMetaTrader,0xE81E);
   hTester = GetDlgItem(hTerminal,0x53);
   hButtonStart = GetDlgItem(GetDlgItem(hTester,0x81BF),0x40A);  //дескриптор кнопки "Старт"
	
   PostMessageA(GetDlgItem(hTester,0x81BF),WM_COMMAND,0x40A,hButtonStart); //нажимаем кнопку старт
   
   Print("Запуск тестера стратегий");
   string sButtonStartName = "";
   while(!IsStopped()) 
   {
      Sleep(3000);
      GetWindowTextA(hButtonStart,sButtonStartName,6); //считываем текст кнопки запуска тестера
      if(sButtonStartName=="Старт")                    
      {
         Print("Работа тестера завершена");
         break;
      }
   }
}
 
Ilnur >> :

下面是一个启动策略测试器并等待其完成的脚本例子。使用GetWindowTextA() 读取按钮的文本。

有趣的是,测试器窗口不需要是可见的。


非常感谢你。我在哪里可以至少读到所有这些功能,并看一下如何使用它们的例子?我在互联网上到处打探寻找,但没有什么帮助。也许有一本关于Win API的好书?仅仅描述该函数的作用还是不够的。

 
HIDDEN >> :

非常感谢你。我在哪里可以至少读到所有这些功能,并看一下如何使用它们的例子?我一直在互联网上打探寻找,但没有什么帮助。也许有一本关于Win API的好书?仅仅描述这个功能的作用可能是不够的。

所有关于WinAPI函数的信息我都是从MSDN得到的。我已经习惯了这种方式。

P.S. 很遗憾,我从未见过一本关于WinAPI的好书。

 
Ilnur >> :

我从MSDN获得所有关于WinAPI函数的信息。我更习惯于....


P.S. 不幸的是,我从未见过一本关于WinAPI的好书。

鼠标第一个按钮上打开的菜单是如何被拦截的?当你从终端切换到另一个程序时,菜单消失了,你就是抓不住它。有什么办法可以停止这个程序吗?