WindowsメッセージのIDと効能を調べる(2)。

昨日に引き続いて、WindowsメッセージのIDの調べ方を紹介します。
厳密には、Windowsメッセージの中のWM_COMMAND というメッセージのパラメータIDを調べているのですが、昨日の方法では、例えば、最新のMT4でトレンドラインを引く為のボタンを押すにはどんなパラメータを指定すればよいのか?というピンポイントで調べたい時に苦労します。…というか、全く実用的ではありません。


少しアプローチをかえて、MetaTraderの UI を操作すると、操作した内容に応じて ID をウィンドウに送りつける仕組みになっているのですから、メッセージを受け取るウィンドウ側を監視していれば、どの操作がどの ID になっているのか分かるはずです。
この原理を利用した調べ方が以下の手法です。
(今日は、MT4 にショートカットキーを割当てたい人には有効な記事なので読み飛ばさないようにっっ><)


原理の詳細は省略して、調査ツールの使い方だけ説明します。
調査ツールのダウンロードはこちらから。

(1) 調査ツールのインストール
ChkCtlID.dll を experts\libraries フォルダに置きます。
scGetID.mq4 を experts\scripts  フォルダに置きます。
(2) 使い方
ナビゲータウィンドウから scGetID をチャートにドロップします。
メニューやボタンを操作し、コメントか、Expertタブのログを見ます。

この状態で、トレンドラインのボタンを押すと、

id = 33257 と分かります。


この ID が分かれば、以下のようなトレンドラインのボタンを押すだけの script が作れます。

//scTrendLine.mq4
#import "user32.dll" // 親ウィンドウを取得する為の関数を追加
int GetParent(int);
#import
#include 
void start()
{
  int hwnd = GetParent(GetParent(GetParent(WindowHandle(Symbol(),Period()))));
  // MT4 本体のウィンドウにコマンドを送る
  PostMessageA(hwnd, WM_COMMAND,33257,0); // 使いたいID=33257を指定
}

このスクリプトを experts\scripts フォルダにコピーして、ナビゲータウィンドウ内での右クリックのSet hotkeyでショートカット Alt + T を割り当てると、

わざわざボタンをマウスで押さなくても、キー操作だけでトレンドラインを引くモードに移行できるようになります。
裁量トレードでトレンドラインを引きまくる人には便利ではないでしょうか…?
(ちなみに、Ctrl + T は、ターミナルウィンドウの開閉なので割り当てできません。ただの T に割り当てたい場合は、外部ソフトを使えば簡単にできます。)


このようにして ID の調べ方と使い方が分かれば、
MetaTraderのメニューやボタンのほとんどにショートカット割り当てができたり、
インジケータからショートカットの実行(例えば、ExpertAdvisorボタンを押す)ができるので、活用してみてください。









追記:
UWSC に慣れている人は、同梱のChkCtlIDmod.uws が使えます。
チャートを閉じたり、MT4 を終了する操作でも楽に取得できます。
但し、こちらは、チャートウィンドウ=GetParent(WindowHandle(Symbol(),Period()));に対してはそのままでは取得できないので一長一短です..。
本格的に調べたい時は、spy++(SPYXX.EXE)を使いますが、かなり面倒です。