ライブラリ: マルチテスター - ページ 54 1...47484950515253545556 新しいコメント fxsaber 2026.01.13 14:36 #531 hini #:コードはロシア語と英語だけをチェックする もし誰かが他の言語のスタートボタンの名前を教えてくれたら、ソースコードに含めます。 hini 2026.01.13 14:48 #532 fxsaber #: もし誰かが他の言語のスタートボタンの名前を教えてくれたら、私はそれをソースに含めるつもりだ。 中国語の場合、「開始」と「停止」ボタンのテキストは以下の通りです:「开始」と「停止」。 fxsaber 2026.01.13 15:56 #533 hini #: 中国語の場合、「開始」と「停止」ボタンのテキストは以下の通り:"开始 "と "停止 "です。 更新されました。 Stanislav Korotky 2026.01.13 21:07 #534 fxsaber #: 更新しました。 ボタンから文字列を読み取って、それが変わらないか変わったかを比較する方が簡単かも?たくさんの言語がありますが、ボタンの状態は2つしかありません。 fxsaber 2026.01.13 22:03 #535 Stanislav Korotky #: ボタンから文字列を読み取って、それが変わらないか変わったかを比較する方が簡単ではないだろうか? 結局のところ、この機能は以前の状態に依存すべきではない。色を使う方が簡単だろう:緑は開始、それ以外は停止。しかし、私はWinAPIですべてをpokeメソッドで行うので、ボタンの色(緑のコンポーネント)を読み取る方法がわかりません。もちろん、動作するバリアントがあれば、それを置き換えます。 hini 2026.01.14 13:10 #536 fxsaber #:それでも、この機能は以前の状態に依存すべきではない。色を使う方が簡単だろう:緑-開始、それ以外-停止。しかし、私はWinAPIですべてpokeメソッドでやっているので、ボタンの色(緑のコンポーネント)を読み取る方法を知らない。もちろん、動作するバリアントがあれば、それを置き換えます。 このコードは私がテストし、動作することを確認しています。 (将来MT5の開発者が色を変更するかもしれません)。 //+------------------------------------------------------------------+ //|CheckButtonColour.mq5| //+------------------------------------------------------------------+ #include <WinAPI/winapi.mqh> #define private public #include <fxsaber/MultiTester/MTTester.mqh> #undef private #ifdef __MQL5__ #define ULONG_PTR ulong #else #define ULONG_PTR uint #endif #define WORD int #define DWORD_PTR ULONG_PTR #define BYTE uchar #define LOBYTE(w) ((BYTE)(((DWORD_PTR)(w)) & 0xff)) #define GetRValue(rgb) (LOBYTE(rgb)) #define GetGValue(rgb) (LOBYTE(((WORD)(rgb)) >> 8)) #define GetBValue(rgb) (LOBYTE((rgb)>>16)) //+------------------------------------------------------------------+ //| スタート」ボタンのハンドルを取得| //+------------------------------------------------------------------+ long GetStartBtnHandle(void) { static const int ControlID[] = {0xE81E, 0x804E, 0x2712, 0x4196}; static const long Handle = MTTESTER::GetHandle(ControlID); if(Handle <= 0) return 0; return Handle; } //+------------------------------------------------------------------+ //| 一般的な色検出機能:ボタンが特定の色かどうかをチェックする。 //| 位置はプリセットのRGBカラーと一致する。 //+------------------------------------------------------------------+ bool IsButtonBackgroundColor(HWND hButton, color targetClr) { if(!hButton || !user32::IsWindow(hButton)) return false; // 1.画面上のボタン位置を取得する RECT rect; user32::GetWindowRect(hButton, rect); // 2.サンプリングポイント:左端から20ピクセル、垂直中央(テキストを避ける) int targetX = rect.left + 20; int targetY = rect.top + (rect.bottom - rect.top) / 2; // 画面サンプリング HANDLE hdcScreen = user32::GetDC(NULL); uint clr = gdi32::GetPixel(hdcScreen, targetX, targetY); user32::ReleaseDC(NULL, hdcScreen); if(clr == 0xFFFFFFFF) return false; return targetClr == clr; } //+------------------------------------------------------------------+ //| スクリプト・エントリ・ポイント OnStart| //+------------------------------------------------------------------+ void OnStart() { HWND hBtn = (HWND)GetStartBtnHandle(); if(hBtn == 0) return; // --- ユーザーのニーズに基づいたフレキシブルなコール --- --- --- --- ユーザーのニーズに基づいたフレキシブルなコール --- --- --- --- ユーザーのニーズに基づいたフレキシブルなコール // Check for: ライトテーマの緑 (156, 204, 101) hover:140, 188, 85 bool isLightGreen = IsButtonBackgroundColor(hBtn, C'156, 204, 101') || IsButtonBackgroundColor(hBtn, C'140, 188, 85'); // チェック対象:ダークテーマの緑 (96, 96, 0) hover:80, 80, 0 bool isDarkGreen = IsButtonBackgroundColor(hBtn, C'96, 96, 0') || IsButtonBackgroundColor(hBtn, C'80, 80, 0'); // Check for: ライトテーマの赤 (239, 154, 154) hover:223, 138, 138 bool isLightRed = IsButtonBackgroundColor(hBtn, C'239, 154, 154') || IsButtonBackgroundColor(hBtn, C'223, 138, 138'); // チェック対象:ダークテーマの赤 (112, 14, 19) hover:128, 30, 35 bool isDarkRed = IsButtonBackgroundColor(hBtn, C'112, 14, 19') || IsButtonBackgroundColor(hBtn, C'128, 30, 35'); // ビジネス・ロジック if(isLightGreen || isDarkGreen) { Print("Current button state: Green (Ready to start)"); } else if(isLightRed || isDarkRed) { Print("Current button state: Red (Running/Stopped)"); } else { Print("Current button state: Other color/Unknown"); } } //+------------------------------------------------------------------+ Stanislav Korotky 2026.01.14 13:39 #537 fxsaber #:それでも、この機能は以前の状態に依存すべきではない。色を使う方が簡単だろう:緑-開始、それ以外-停止。しかし、私はWinAPIですべてpokeメソッドでやっているので、ボタンの色(緑のコンポーネント)を読み取る方法を知らない。もちろん、動作するバリアントがあれば、それを置き換えます。 ボタンの色ではなく、Inputsリストの状態(enabled/disabled)で判断した方が簡単かもしれない。 hini 2026.01.14 13:56 #538 Stanislav Korotky #: ボタンの色ではなく、入力リストのステータス(有効/無効)で確認するのが簡単でしょう。 Inputsのステータスはどこで取得できますか?公式APIはないので、色とテキストで判断するしかない。 Stanislav Korotky 2026.01.14 14:39 #539 hini #: インプットのステータスはどこで入手できますか?公式APIはありません。色とテキストで判断するしかありません。 そうですね、MT5内部には公式なAPIはありません。MS Spyのようなユーティリティを使用して検査する必要があります。 Inputsの荒野に入らず、すでにテスト済みのスタートボタンだけを使用する場合、GetWindowLongW(hwnd, 0)コールはボタンの現在の色を返す必要があるようです。私のは緑で0xD0B1DF10を返します。MQがスタイルを修正することに決めた場合のみ、この設定はなくなるかもしれない。そのため、Inputsのアクティビティをチェックする方が確実である。 fxsaber 2026.01.14 15:19 #540 Stanislav Korotky #:GetWindowLongW(hwnd,0)コールはボタンの現在の色を返すはずです。緑は0xD0B1DF10 です。 GetPixelは別のGカラーを返すようです。 1...47484950515253545556 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
コードはロシア語と英語だけをチェックする
もし誰かが他の言語のスタートボタンの名前を教えてくれたら、私はそれをソースに含めるつもりだ。
中国語の場合、「開始」と「停止」ボタンのテキストは以下の通り:"开始 "と "停止 "です。
更新しました。
ボタンから文字列を読み取って、それが変わらないか変わったかを比較する方が簡単ではないだろうか?
結局のところ、この機能は以前の状態に依存すべきではない。色を使う方が簡単だろう:緑は開始、それ以外は停止。しかし、私はWinAPIですべてをpokeメソッドで行うので、ボタンの色(緑のコンポーネント)を読み取る方法がわかりません。もちろん、動作するバリアントがあれば、それを置き換えます。
それでも、この機能は以前の状態に依存すべきではない。色を使う方が簡単だろう:緑-開始、それ以外-停止。しかし、私はWinAPIですべてpokeメソッドでやっているので、ボタンの色(緑のコンポーネント)を読み取る方法を知らない。もちろん、動作するバリアントがあれば、それを置き換えます。
このコードは私がテストし、動作することを確認しています。
(将来MT5の開発者が色を変更するかもしれません)。
それでも、この機能は以前の状態に依存すべきではない。色を使う方が簡単だろう:緑-開始、それ以外-停止。しかし、私はWinAPIですべてpokeメソッドでやっているので、ボタンの色(緑のコンポーネント)を読み取る方法を知らない。もちろん、動作するバリアントがあれば、それを置き換えます。
ボタンの色ではなく、入力リストのステータス(有効/無効)で確認するのが簡単でしょう。
インプットのステータスはどこで入手できますか?公式APIはありません。色とテキストで判断するしかありません。
そうですね、MT5内部には公式なAPIはありません。MS Spyのようなユーティリティを使用して検査する必要があります。
Inputsの荒野に入らず、すでにテスト済みのスタートボタンだけを使用する場合、GetWindowLongW(hwnd, 0)コールはボタンの現在の色を返す必要があるようです。私のは緑で0xD0B1DF10を返します。MQがスタイルを修正することに決めた場合のみ、この設定はなくなるかもしれない。そのため、Inputsのアクティビティをチェックする方が確実である。
GetWindowLongW(hwnd,0)コールはボタンの現在の色を返すはずです。緑は0xD0B1DF10 です。