ボタンやマウスクリックの傍受による自動化。 - ページ 2

 
Avals >> :

同じライブラリにある「int GetLastKeyLP()」と「int GetLastMouseLP()」という関数が役に立つはずです。その結果を関数で使用するint SendMessageA (int hWnd, int Msg, int wParam, int lParam); int PostMessageA (int hWnd, int Msg, int wParam, int lParam)

私の端末は、呼び出されるといつもクラッシュしてしまうのです。


int hwnd = WindowHandle(Symbol(),Period())。
SendMessageA(hwnd, WM_COMMAND, 514, 0)を送信します。


и


int hwnd = WindowHandle(Symbol(),Period())。
PostMessageA(hwnd, WM_COMMAND, 514, 0)を実行しました。


ツールバーのストラテジーテスターボタンを押すと、実行中のスクリプトがこのようなコードを出力しますが


2008.11.14 15:26:58 shablon EURUSD,Weekly: Mouse Code=513 from window EURUSD,Weekly.

 

514 何だろう?

#import "user32.dll"
   int GetParent (int hWnd);
   int PostMessageA (int hWnd, int Msg, int wParam, int lParam);
#import
//+------------------------------------------------------------------+

   int hwnd = WindowHandle(Symbol(), NULL);

   while (!IsStopped())   {
     hwnd = GetParent( hwnd);
     if ( hwnd==0) break;
     int hwnd_parent = hwnd;   }

   PostMessageA( hwnd_parent, WM_COMMAND,33315,0)


こんな感じ、試してみてください。

 
sabluk >> :

514 何だろう?


shablonスクリプトが返すコード。

続けて、今のスタートボタンの押し方。

正確な押し方をコード化できない場合に限り、この値が引き出される原理を知りたい。

 

コマンド一覧のリンクを貼っておきました

Winspector Spyのようなプログラムを使えば、自分でキャッチすることができます。

 
HIDDEN >> :

shablonスクリプトが返すコード。

続けて、今のスタートボタンの押し方。

プッシュする方法を正確にコード化できない場合のみ、この値が引き出される原理を知りたい。

Visual Studioの配布物に含まれるSpy++ ユーティリティをお勧めします。

 
Ilnur >> :

Visual Studioの配布キットに含まれるSpy++ ユーティリティをお勧めします。

プログラムをつけて、試してみたが、何もわからなかった。既知のコードを持つボタンで確認済みですが、プログラムでは表示されません。

あるいは、私のやり方が悪いのか。プログラムを使った経験のある方は、ターミナルからコードボタンを出力する様子をスクリーンショットに撮っておいてください。コードが見当たりません。


たとえば、これらのコードは、プログラムの助けを借りて外に出る方法です。


33018 - 「バー」ビューに切り替える
33019 - "ローソク足" 表示に切り替えます。
33022 - 「線」表現に切り替える。

 

は、スクリプトが次のように動作するように修正しました。

#import "user32.dll"
   int GetParent (int hWnd);
   int PostMessageA (int hWnd, int Msg, int wParam, int lParam);
#import
#define WM_COMMAND       0x0111
//+------------------------------------------------------------------+
int start()
{
   int hwnd = WindowHandle(Symbol(), NULL);

   while (!IsStopped())   {
     hwnd = GetParent( hwnd);
     if ( hwnd==0) break;
     int hwnd_parent = hwnd;   }

   PostMessageA( hwnd_parent, WM_COMMAND,33315,0);
   return(0);
}
//+------------------------------------------------------------------+
 
33315の代わりに、そのブランチのリストにある他のコードを試してみてください。
 
sabluk >> :
33315の代わりに、支店のリストにある他のコードを試してみてください。

コードを確認するのではなく、コードを調べる方法に興味があります。テスターを呼んで、テスターのスタートボタンを押してから、ボタンを押さないといけないんです。これらをすべて押すためには、これらのコードの調べ方を理解する必要があります。


>>と、いただいたコードで、自分で直しました。

 

ただ、テスターウィンドウに切り替える方法、つまりウィンドウのHandleを調べてからループを実行する方法が、あのスレッドからはよくわかりませんでした。しかし、問題はこの方法があまり良くないことで、端末がよくクラッシュしてしまいます。