MetaTraderにキーボードショートカットを割当てるAccela.ahk

昨日紹介した、MetaTraderにキーボードショートカットを割当てるAccela.ahk について簡単に解説します。
このスクリプトは、誰でも簡単に編集して自由にショートカットキーを割当てられますので、是非活用してみてください。


…と言う訳で、もっとも単純な割り当て方から。

#IfWinActive ahk_class MetaQuotes::MetaTrader::4.00
A::Send !a

1行目は、MT4のメインウィンドウがアクティブな場合のみ有効になる..という呪文です。ファイルの先頭に1度だけ書けばOKです。
2行目は、「A」キーが押されたら( :: )、「Alt + a」を代わりに送る(Send)..という意味です。
「!」が「Alt」に相当します。
この2行だけをファイルに書いて、拡張子を .ahk にして保存してダブルクリックするだけで割当てができます。

ahkでの記号表記 相当するキー
^ Ctrl
! Alt
+ Shift
# Win

「C」キーが押されたら、「Ctrl + F」を代わりに送る時は、

C::Send ^f 

と書きます。「^」が「Ctrl」に相当します。Ctrl + F は、MT4でクロスカーソル(十字線)になります。


キーが押されたら、Windowsメッセージを送ってGUIを操作したい場合は、

キーの種類::PostMessage, 0x111,メッセージID,0

と書きます。0x111は、WM_COMMAND を意味します。メッセージID は、この記事を参考にしてください。
「T」キーでトレンドラインボタンを押したい場合は、

T::PostMessage, 0x111,33257,0

です。33257がトレンドラインボタンを押した時のIDです。


ボタンを押してから、直後にマウスをクリックさせたい時は、

V::
   PostMessage, 0x111,33260,0 ;垂直線=33260
   MouseClick                 ;マウス左クリック
   return

のように複数行に分けて操作を記述し、最後に return と書きます。
これで、「V」キー押下げで、垂直線ボタンが押されて、すぐマウスクリックされるので、垂直線が一発で引けます。


複数のキーを同時押しした時に特定の操作をさせたい場合は、

 ^r::MsgBox Control+R
 !r::MsgBox Alt+R
 +r::MsgBox Shift+R
 #r::MsgBox Win+R
 t & r::MsgBox T+R
 Space & Q::MsgBox Space+Q

のように、「 ^ ! + # 」の時は2文字続けて書き、普通のキーの時は「 & 」で繋ぎます。
「T」を押した状態で、「R」を押すという特殊なキーコンビネーションも出来ます。


キー操作時に音を鳴らしたい場合は、

F5::
   PostMessage, 0x111,33324,0     ;チャートの更新
   SoundPlay,*48                  ;システム音の再生例
   return

のように書きます。再生したいWAVファイルをAccela.ahkと同じフォルダに置いた場合は、

SoundPlay,error.wav           ;error.wav を同じフォルダに置く場合。

のように指定できます。



Fast Navigation を使う人向けの注意事項


MT4のチャート左下に出るFast Navigation を利用している人は、

上記の方法で英数字にそのままキー割り当てすると、Fast Navigation が使えなくなります。
解決方法としては、
1. キーコンビネーションのみに割当てる。
2. Fast Navigation 使用時にキー割り当てを無効にする。
があります。
1. は、Win キーやSpace キーとの組合せなどでがんばって頂くとして、
2. の時の書き方を説明します。


まず、ahkファイルの中に以下の関数を追加します。

;Fast Navigation にフォーカスがあるときは1を返す関数
CheckFN(){
   ControlGetFocus, control
   IfNotInString, control, Edit,return 0
   return 1
}

そして、英数字キーを割当てるときに

1::
   if CheckFN()==0
     PostMessage, 0x111,33137,0 ;1分足切替命令
   else
     Send 1  ; 1キーを送る
  return

のように書きます。
これは、数字の1キーが押された時に1分足に切り替えるサンプルですが、
1が押されたら、Fast Navigation 使用中かどうか確認して、使用中は、そのまま1キーをSendするようにしています。



あの機能にこのキーを割当てたい…という要望があれば、コメント欄にお願いします。
とりあえず、今日はこの辺で...Zzzz