带有按钮和鼠标点击拦截的自动化。 - 页 9 123456789101112 新评论 Nefedov Kirill 2009.05.04 06:55 #81 YuraZ >> : SP2 XPPRO 如果你的机器上安装了很多软件,任何事情都可能发生。 如果你的目标操作系统运行一个小的稳定的和经过良好测试的任务集或一个 也就是说,很多程序没有被不断运行,很多东西没有被安装。 通常没有问题。 我有一个小得多的图书馆。更换了它,看到有一次成功更换了线上的专家,但终端崩溃了。我又试了一次,但它不能工作。它显示-1,即命令不正确。虽然不清楚是什么问题,因为它曾经工作过。 决定在不同操作系统的虚拟机上玩一玩。 Ilnur Iksanov 2009.05.04 06:59 #82 HIDDEN >> : 在我的电脑上和网上看了一下user32.dll库文件,有一堆不同大小的文件。 也许我的问题是图书馆本身是歪的。 Ilnur,如果你不介意把你的库的版本贴在这里,我可以试着用它来测试。 Yuraz,你可以找到并替换Ilnur或我的代码中的函数名称,如果不难,也可以暴露你的库。 我有XP Pro SP3。 附有图书馆。 附加的文件: user32_1.zip 305 kb Nefedov Kirill 2009.05.04 12:20 #83 试过库,终端在运行脚本时总是崩溃。 我安装了一个光秃秃的、干净的Windows,同样的事情,开关不工作,即使你对显示器眉飞色舞。 我不知道该怎么做。我完全处于停滞状态,我打算推迟尝试再次实施它,直到更好的时候.....。 Yuriy Zaytsev 2009.05.08 08:20 #84 // Зайцев Ю. В. YURAZ // // программируем на API // передать данные в SysDateTimePick32 можно через ХУК , но хуки не люблю // потому проколотим дату кнопками ввода // // #define GW_HWNDNEXT 2 #define WM_ACTIVATE 0x0006 #define WM_ENABLE 0x000A #define WM_SETFOCUS 0x0007 #define WM_KEYDOWN 0x0100 #define WM_KEYUP 0x0101 #define VK_TAB 0x09 #define VK_RIGHT 0x27 #define GW_CHILD 5 // ID #define _ID_TESTER 0x053 // дескриптор ТЕСТЕРА #define _ID_TW 0x81BF // дескриптор окна TESTERA #define _ID_TERMINAL 0xE81E #define _ID_NAV 0xE81B // навигатор #import "user32.dll" int SendMessageA(int hWnd,int Msg,int wParam,string lParam); int PostMessageA(int hWnd,int Msg,int wParam,int lParam); int GetWindowTextA(int hWnd,string lpString,int nMaxCount); int GetDlgItem(int hDlg, int nIDDlgItem); int GetAncestor(int hWnd, int gaFlags); int GetWindow(int hWnd,int uCmd); #import void start() { int hMetaTrader = GetAncestor(WindowHandle(Symbol(),Period()),2); // Дескриптор основного окна терминала Print("hMetaTrader = ", hMetaTrader," || ", DecToHex( hMetaTrader)); int hTerminal = GetDlgItem( hMetaTrader, _ID_TERMINAL ); // Дескриптор окна валютной пары Print("hTerminal = ", hTerminal," || ", DecToHex( hTerminal)); int hTester = GetDlgItem( hTerminal, _ID_TESTER ); // Дескриптор окна тестера стратегий Print("hTester = ", hTester," || ", DecToHex( hTester)); // хитро вычисляем окошко объекта int hOt = GetWindow( FindHendlKey( GetDlgItem( hTester,_ID_TW), "От:" ), GW_HWNDNEXT); Print("hOt = ", hOt," || ", DecToHex( hOt)); // для отладки покажем HENDL окна ввода даты // // тупо нажимаем дату 2001.03.27 // SendMessageA ( hOt, WM_ACTIVATE , 1, 0 ); // Активизируем SendMessageA ( hOt, WM_ENABLE , 1, 0 ); SendMessageA ( hOt, WM_SETFOCUS , 1, 0 ); PostMessageA ( hOt, WM_KEYDOWN , 0x032 , 1 ); // 0x32 код '2' Sleep(1000); PostMessageA ( hOt, WM_KEYDOWN , 0x030 , 1 ); // Sleep(1000); PostMessageA ( hOt, WM_KEYDOWN , 0x030 , 1 ); // Sleep(1000); PostMessageA ( hOt, WM_KEYDOWN , 0x031 , 1 ); // 2001 Sleep(1000); PostMessageA ( hOt, WM_KEYDOWN , VK_RIGHT, 1 ); // . Sleep(1000); PostMessageA ( hOt, WM_KEYDOWN , 0x030 , 1 ); // 12 Sleep(1000); PostMessageA ( hOt, WM_KEYDOWN , 0x033 , 1 ); // 03 Sleep(1000); PostMessageA ( hOt, WM_KEYDOWN , VK_RIGHT, 1 ); // . Sleep(1000); PostMessageA ( hOt, WM_KEYDOWN , 0x032 , 1 ); // 27 Sleep(1000); PostMessageA ( hOt, WM_KEYDOWN , 0x037 , 1 ); // Sleep(1000); SendMessageA ( hOt, WM_KEYDOWN , VK_TAB , 0 ); Sleep(1000); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ string DecToHex(int n) { string s = "", c; while( n != 0) { if( n%16 < 10) c = CharToStr( n % 16 + '0'); else c = CharToStr( n % 16 + 'A'-10); s = c + s; n = n / 16; } return( s); } //+------------------------------------------------------------------+ // // прощелкать объекты // ищем объект по имени // //+------------------------------------------------------------------+ int FindHendlKey( int Current, string findname ) { string p1= "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234"; int temp = GetWindow( Current , GW_CHILD ); // ищем while ( temp != NULL ) { GetWindowTextA( temp , p1 , StringLen( findname )+1 ); if ( p1 == findname) { // проверим а не тот ли это объект return( temp ); // это то что мы ищем } int r = FindHendlKey( temp , findname ) ; // не значит не она , обойдем ее дочерние объекты if ( r != NULL ) { return ( r); // опс нашли дочку } temp = GetWindow( temp , GW_HWNDNEXT ); // проверяем следующий объект, дочерний } return (0); } 隐藏 04.05.2009 14:20 进一步说,你们自己... 在为输入的日期生成正确的键盘代码,,,,。 Nefedov Kirill 2009.08.04 19:04 #85 也许LVN_COLUMNCLICK 函数是合适的,但它不起作用。 Alexandr Gavrilin 2011.08.23 11:57 #86 你能告诉我如何抓住由F9(命令)调用的窗口吗? 靠文字找不到。 到目前为止,它被抓到的情况如下。 int hwnd=GetAncestor(WindowHandle(name,Period()),2);//main terminal handle string s=""; hdlg=GetLastActivePopup(hwnd);//FindWindowA(0,s); if(hdlg!=hwnd){ GetWindowTextA(hdlg,s,GetWindowTextLengthA(hdlg)+1);//работает, надо s="" Print(s); } --- 2011.08.23 12:46 #87 //------------------------------------------------------------------ F9 void F9() { int h=WindowHandle(Symbol(),Period()); // хэндл графика int hMetaTrader=GetAncestor(h, 2); // хэндл МТ PostMessageA(h, WM_COMMAND, 35458, 0); // открываем F9 } 俄罗斯MT公司的认股权证窗把手 int h=FindWindowA ("#32770", "Ордер"); -------- 使用Spy++来搜索窗口中的资源标识符 Alexandr Gavrilin 2011.08.23 12:53 #88 这只有在终端中选择了俄语的情况下才有效,但如果,例如,客户在终端中选择了中文? 我需要另一种方法来用中文搜索它。 到目前为止,我提到的选项是有效的。 --- 2011.08.23 15:04 #89 DKeN: 只要我提到的选项有效。 恭喜你,那你想要什么? 你可以通过F9搜索窗口,寻找一些只有在这个窗口中才有的独特资源。 Alexey Navoykov 2011.08.23 18:14 #90 在FindWindowA之后,你还应该检查找到的窗口的线程/进程ID(函数GetWindowThreadProcessId),因为找到的订单窗口可能属于另一个metatrader副本。 123456789101112 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
SP2 XPPRO
如果你的机器上安装了很多软件,任何事情都可能发生。
如果你的目标操作系统运行一个小的稳定的和经过良好测试的任务集或一个
也就是说,很多程序没有被不断运行,很多东西没有被安装。
通常没有问题。
我有一个小得多的图书馆。更换了它,看到有一次成功更换了线上的专家,但终端崩溃了。我又试了一次,但它不能工作。它显示-1,即命令不正确。虽然不清楚是什么问题,因为它曾经工作过。
决定在不同操作系统的虚拟机上玩一玩。
在我的电脑上和网上看了一下user32.dll库文件,有一堆不同大小的文件。
也许我的问题是图书馆本身是歪的。
Ilnur,如果你不介意把你的库的版本贴在这里,我可以试着用它来测试。
Yuraz,你可以找到并替换Ilnur或我的代码中的函数名称,如果不难,也可以暴露你的库。
我有XP Pro SP3。
附有图书馆。
试过库,终端在运行脚本时总是崩溃。
我安装了一个光秃秃的、干净的Windows,同样的事情,开关不工作,即使你对显示器眉飞色舞。
我不知道该怎么做。我完全处于停滞状态,我打算推迟尝试再次实施它,直到更好的时候.....。
隐藏 04.05.2009 14:20
进一步说,你们自己... 在为输入的日期生成正确的键盘代码,,,,。
也许LVN_COLUMNCLICK 函数是合适的,但它不起作用。
你能告诉我如何抓住由F9(命令)调用的窗口吗?
靠文字找不到。
到目前为止,它被抓到的情况如下。
俄罗斯MT公司的认股权证窗把手
--------
使用Spy++来搜索窗口中的资源标识符
这只有在终端中选择了俄语的情况下才有效,但如果,例如,客户在终端中选择了中文?
我需要另一种方法来用中文搜索它。
到目前为止,我提到的选项是有效的。
DKeN:
只要我提到的选项有效。
恭喜你,那你想要什么?
你可以通过F9搜索窗口,寻找一些只有在这个窗口中才有的独特资源。
在FindWindowA之后,你还应该检查找到的窗口的线程/进程ID(函数GetWindowThreadProcessId),因为找到的订单窗口可能属于另一个metatrader副本。