正確にチャートを同期させる00-TimeSync_v101.mq4を script 化する。

ジム・ジャロース
こんにちは。

00-timesync_v101_modbyfai.mq4ですが、たまったタスクが悪さをして不可解な挙動が多いため自分的には使えない感じですので、scriptにしてドラックアンドドロップした時に1度だけ同期を実行するように改造しようと試みたのですが、APIの部分が理解できず、ペンディング状態です。
もし、ご無理でなければ、scriptを作っていただけないでしょうか。n(_ _)n
興味のないネタでしたら華麗にスルーしていただいて結構ですが。(;^_^A

これは・・・確かにAPIをよく知らないと出来ないので、こちらに用意しました。


・インジケータとスクリプトでは、実行時のスレッドが異なる。
インジケータはウィンドウを表示しているスレッドで動いているので、SetFocus()が可能だが、スクリプトは別のスレッドなので、SetFocus()できず、代わりに SetForegroundWindow()を使う必要がある。(SetForegroundWindowでも、見た目はアクティブにならないが、キーイベントだけは送れるようになる。)


スクリプトを実行するウィンドウは必ずしもアクティブとは限らない。
ナビゲーターウィンドウからスクリプトを非アクティブなウィンドウにドロップすることもあり得るので、GetTopWindow()でアクティブなウィンドウを取得してから、GetWindow(hWnd,2)で次のウィンドウを取得する必要がある。


・・・という点に注意して改造する必要がありました。
実行時の確認ダイアログが煩わしい人は、
#property show_inputs
の一行を削除してください。



ちなみに、AutoHotkey の Accela.ahk を使用していると正常動作しません。(数字入力が被ってしまうため..)

1::
   if CheckFN()==0
     PostMessage, 0x111,33137,0  ;Period M1
   else
     Send 1
  return

↑Accela.ahk で、1から9の数字にショートカットを割り当てている部分をすべて削除するか、

#1::
   if CheckFN()==0
     PostMessage, 0x111,33137,0  ;Period M1
   else
     Send 1
  return

↑ # を加えて「Win + 1」に割り当てる等で回避してください。