ボタンやマウスクリックの傍受による自動化。 - ページ 9 123456789101112 新しいコメント Nefedov Kirill 2009.05.04 04:55 #81 YuraZ >> : SP2 XPPRO 多くのソフトウェアがインストールされているマシンでは、何が起こっても不思議ではありません。 ターゲットOSが安定したテスト済みの小さなタスク群を実行している場合、または1つの つまり、多くのプログラムが常に実行されているわけでもなく、多くのものがインストールされているわけでもない 通常は問題ありません。 私はもっと小さな図書館を持っています。交換し、回線内のエキスパートを一度見てなんとか交換したが、端末がクラッシュした。もう一度やってみたが、うまくいかなかった。1と表示される。つまり、コマンドが正しくない。何が問題なのかは不明ですが、一度は成功したのですから。 異なるOS上の仮想マシンで遊んでみることにした。 Ilnur Iksanov 2009.05.04 04:59 #82 HIDDEN >> : 私のパソコンとネットでuser32.dllのライブラリファイルを見てみると、大きさの違うファイルがたくさんあります。 私の問題は、図書館そのものが曲がっていることなのかもしれません。 Ilnurさん、もしよろしければ、あなたのライブラリのバージョンをここに載せていただけませんか? Yuraz、およびあなたは、あまりにもあなたのライブラリを公開することは困難ではない場合、コードIlnurまたは鉱山で関数名を見つけると交換することができます。 XP Pro SP3を持っています。 図書館併設。 ファイル: user32_1.zip 305 kb Nefedov Kirill 2009.05.04 10:20 #83 ライブラリを試したところ、スクリプトを実行すると必ずターミナルがクラッシュしてしまいます。 素のクリーンなWindowsをインストールしたところ、同じように、モニターをブローしても、スイッチが作動しません。 どうしたらいいんだろう。完全に行き詰ってしまったので、再実装はもっといい時期まで先延ばしにしようと思います......。 Yuriy Zaytsev 2009.05.08 06: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); } 隠れ 2009.05.04 14:20 さらに自分自身について ... 入力された日付に対して正しいキーパッド・コードを生成するという意味において Nefedov Kirill 2009.08.04 17:04 #85 おそらく、LVN_COLUMNCLICK 関数が適しているのでしょうが、うまくいきません。。 Alexandr Gavrilin 2011.08.23 09:57 #86 F9(Order)で呼び出されたウィンドウをキャッチする方法を教えてください。 テキストで探すことができない。 これまでのところ、以下のように捕捉されています。 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 10: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 10:53 #88 これは端末でロシア語が選択されている場合のみ有効ですが、例えばクライアントが端末で中国語を選択していた場合? 中国語で検索する別の方法が必要です。 今のところ、私が言ったオプションが有効です。 --- 2011.08.23 13:04 #89 DKeN: は、私が言ったオプションが動作する限り。 おめでとうございます、では何が欲しいのですか? は、F9でこの1枚にしかないユニークな資料をウィンドウズで検索することができます。 Alexey Navoykov 2011.08.23 16:14 #90 FindWindowA の後、見つかったウィンドウのスレッド/プロセス ID も確認する必要があります(関数 GetWindowThreadProcessId)、これは見つかったオーダーウィンドウが別のメタトレーダーのコピーに属している可能性があるからです。 123456789101112 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
SP2 XPPRO
多くのソフトウェアがインストールされているマシンでは、何が起こっても不思議ではありません。
ターゲットOSが安定したテスト済みの小さなタスク群を実行している場合、または1つの
つまり、多くのプログラムが常に実行されているわけでもなく、多くのものがインストールされているわけでもない
通常は問題ありません。
私はもっと小さな図書館を持っています。交換し、回線内のエキスパートを一度見てなんとか交換したが、端末がクラッシュした。もう一度やってみたが、うまくいかなかった。1と表示される。つまり、コマンドが正しくない。何が問題なのかは不明ですが、一度は成功したのですから。
異なるOS上の仮想マシンで遊んでみることにした。
私のパソコンとネットでuser32.dllのライブラリファイルを見てみると、大きさの違うファイルがたくさんあります。
私の問題は、図書館そのものが曲がっていることなのかもしれません。
Ilnurさん、もしよろしければ、あなたのライブラリのバージョンをここに載せていただけませんか?
Yuraz、およびあなたは、あまりにもあなたのライブラリを公開することは困難ではない場合、コードIlnurまたは鉱山で関数名を見つけると交換することができます。
XP Pro SP3を持っています。
図書館併設。
ライブラリを試したところ、スクリプトを実行すると必ずターミナルがクラッシュしてしまいます。
素のクリーンなWindowsをインストールしたところ、同じように、モニターをブローしても、スイッチが作動しません。
どうしたらいいんだろう。完全に行き詰ってしまったので、再実装はもっといい時期まで先延ばしにしようと思います......。
隠れ 2009.05.04 14:20
さらに自分自身について ... 入力された日付に対して正しいキーパッド・コードを生成するという意味において
おそらく、LVN_COLUMNCLICK 関数が適しているのでしょうが、うまくいきません。
。
F9(Order)で呼び出されたウィンドウをキャッチする方法を教えてください。
テキストで探すことができない。
これまでのところ、以下のように捕捉されています。
ロシア語MTの保証書付きウィンドウハンドル
--------
Spy++を使用して、ウィンドウズでリソース識別子を検索する
これは端末でロシア語が選択されている場合のみ有効ですが、例えばクライアントが端末で中国語を選択していた場合?
中国語で検索する別の方法が必要です。
今のところ、私が言ったオプションが有効です。
DKeN:
は、私が言ったオプションが動作する限り。
おめでとうございます、では何が欲しいのですか?
は、F9でこの1枚にしかないユニークな資料をウィンドウズで検索することができます。
FindWindowA の後、見つかったウィンドウのスレッド/プロセス ID も確認する必要があります(関数 GetWindowThreadProcessId)、これは見つかったオーダーウィンドウが別のメタトレーダーのコピーに属している可能性があるからです。