expertsフォルダを素早く開く術

インジケータやEA のインストールや、諸々の作業で MetaTraderのインストール先フォルダを開く機会は多々あると思います。
デスクトップ上のフォルダのショートカットを置いたり、エクスプローラのお気に入りに登録すれば簡単に開けるようになりますが、MT4の数が増えてくると意外に面倒です。


そこで、今日は MT4 を起動中にexpertsフォルダを素早く開く術を紹介します。

(a)ターミナルウィンドウからたどり着く。


ターミナルウィンドウの操作履歴画面を右クリックして「開く」を選ぶと、logs フォルダが開けます。
logsフォルダから、1つ上のフォルダに上がれば、expertsフォルダが見つかります。

(b)フォルダオープン用のscript を使う


AutoHotKey を使っていない人向けのソリューションです。
下記スクリプトを scripts フォルダにインストールしてください。

#import "shell32.dll"
int ShellExecuteA(int hWnd,int Verb,string File,int Parameter,int Path,int ShowCommand);
#import
#define SW_SHOWNORMAL 1
int start()
  {
   if(!IsDllsAllowed()){
      Alert("Tool Menu -> Option -> Expert Advisors TAB --> Check Allow DLL imports");
      return(0);
   }
   ShellExecuteA( 0,"open",TerminalPath()+"\\experts",NULL,NULL,SW_SHOWNORMAL);
   return(0);
  }

TerminalPath()+"\\experts" で開く場所を指定しているので、他の場所を開きたい人は適宜カスタマイズできます。

(c)AutoHotKey にキー登録する。


AutoHotKey を利用している人はこちらがお勧めです。
Win+E キー を押すと、アクティブなMT4 の experts フォルダを開きます。

#IfWinActive ahk_class MetaQuotes::MetaTrader::4.00
#E::
   WinGet, pid,PID,A
   FullPath :=GetModuleFileNameEx(pid)
   DirPath := RegExReplace(FullPath,"(.*)\\[^\\]+$","$1\experts")
   Run, explore %DirPath%
   return
#IfWinActive

GetModuleFileNameEx(ProcessID)  ; modified version of shimanov's function
{
  ; #define PROCESS_VM_READ           (0x0010)
  ; #define PROCESS_QUERY_INFORMATION (0x0400)
  hProcess := DllCall( "OpenProcess", "UInt", 0x10|0x400, "Int", False, "UInt", ProcessID)
  if (ErrorLevel or hProcess = 0)
    Return
  FileNameSize := 260
  VarSetCapacity(ModuleFileName, FileNameSize, 0)
  CallResult := DllCall("Psapi.dll\GetModuleFileNameExA", "UInt", hProcess, "UInt", 0, "Str", ModuleFileName, "UInt", FileNameSize)
  DllCall("CloseHandle", hProcess)
  Return ModuleFileName
}

これ単独でも動作するように

#IfWinActive ahk_class MetaQuotes::MetaTrader::4.00

#IfWinActive

で囲っていますが、既に使用中の Accela.ahk 内には定義されているので、注意してコピーしてください。