キーボードで押されたボタンを取得するMQL4-Keyboardモジュール

キーボード入力を楽に扱うためのモジュールを作成したので紹介します。

経緯

 MQL4ではOnChartEvent関数を使うことで、ユーザーのマウスやキーボード操作に応じたプログラムが作成可能です。キーボード入力で発注するツールや、簡単なゲームも作成できます。

 実際にキーボード入力を取得するには、OnChartEvent関数の第一引数idがCHARTEVENT_KEYDOWNのときに、第二引数のlparamを調べることで何が押されたのかが分かります。例えば「A」が押された場合は、lparamは65となります。

void OnChartEvent(const int id,
                  const long& lparam,  
                  const double& dparam,
                  const string& sparam
                  )
{
   if(id == CHARTEVENT_KEYDOWN) {
      if(lparam == 65) {
         Print("Aボタンが押されました。");
      }
      if(lparam == 13) {
         Print("Enterキーが押されました。");
      }
   }
}

 どのボタンが押されたのかを、lparamの値と照らし合わせて調べるのはけっこう面倒です。そこでもっと直感的に値を取得できなかと思い、作成したのがKeyboardモジュールです。

 Keyboardモジュールを使用すると、先程のサンプルコードは次のように書けます。

#include <mql4_modules/Keyboard/Keyboard.mqh>

void OnChartEvent(const int id,
                  const long& lparam,  
                  const double& dparam,
                  const string& sparam
                  )
{
   if(id == CHARTEVENT_KEYDOWN) {
      if(Keyboard::Key(lparam) == "A") {
         Print("Aボタンが押されました。");
      }
      if(Keyboard::Key(lparam) == "Enter") {
         Print("Enterキーが押されました。");
      }
   }
}

使い方

 GithubからKeyboard.mqhをダウンロードして下さい。

 MT4のデータフォルダを開き、MQL4/Include/mql4_modules/Keyboard/Keyboard.mqhとして保存します。

 Keyboard.mqhをincludeしたら準備完了です。

#include <mql4_modules/Keyboard/Keyboard.mqh>

 OnChartEvent関数内でidをチェックし、CHARTEVENT_KEYDOWNであればKeyメソッドにlparamを渡します。

void OnChartEvent(const int id,
                  const long& lparam,  
                  const double& dparam,
                  const string& sparam
                  )
{
   if(id == CHARTEVENT_KEYDOWN) {
      string key = Keyboard::Key(lparam);
      Print(key, "が押されました。");
   }
}

 あとは入力されたキーに応じた処理を実装するだけです!

arrow_upward