2017-11-05 18 views
0

私はAHKで小さなアプリケーションを書こうとしていますが、 フロー制御と構文の非常に基本的な理解が困難です。 基本的にこの質問は、AHKで シンプルなプログラムを書くにはどのように理解できますか?AHKの基本的なアプリケーション - メインループとフロー制御

ここでは、マウスの右ボタンでフラグ "pan_on"を に切り替えなければならない非常に単純なプログラムです。 次に、この値に応じて何かします。 「Rbutton」行で始まる

pan_on := false 

Esc:: ExitApp 

Rbutton:: 
    tooltip, "button pressed" 
    pan_on := true 
return 

Rbutton up:: 
    tooltip, "released" 
    pan_on := false 
return 

if (pan_on = true) 
{ 
    tooltip, "XXXXXXXXEngage" 
} 

ブロックが正しく に取り組んでいます。ただし、条件文を含む最後のブロック は決して実行されません。 最後のブロックまたはすべてのスクリプトの周りに無限ループを追加する doeasも役に立たない。

は、私はそのようなプログラミングスタイル(ここではPythonの構文を使用して)で、主によく知って:

pan_on = False 
while True: 
    pan_on = False 
    if key_down[Esc]: 
     break 
    if key_down[Rbutton]: 
     pan_on = True 
    if key_up[Rbutton]: 
     pan_on = False 
    ... 
    if pan_on: 
     draw_something() 

は、だから私はプログラムを書くことから には、何もずっとdefferentを考えることはできませんが、それAutoHotkeyをが何かあるようです この意味で「特別」で、他のアプローチを使用する必要がありますか? 最初のAHKの例では、 "Rbutton ::"は常に準備完了状態にあり、無限ループ内の条件 "if key_down"と考えていますが、 ですが、

だから、私はどのように変更することなくこの簡単なアプリを作るのですか? コードスタイル? AHKのメインループはどこですか?どのように制御フローが動作するのですか? は、実行されているコード部分のエントリポイントをどのように管理するのですか? "Rbutton ::"の後にすべてを書き込むと動作しますが、 はプログラムを書き込む方法ではなく、 ロジックをさらに開発するのは難しいでしょう。

+1

これは良い読書であるかもしれません:https://autohotkey.com/docs/Scripts.htm#auto、自動実行セクション(欠落しているメインループ)について説明します。複数のループがある場合は、代わりにタイマーを使用することができます。 https://autohotkey.com/docs/commands/SetTimer.htm – Blauhirn

答えて

1

制御フローまでは、ifステートメントには決して達しません。私が理解する限り、通訳者は、設定を処理したスクリプトの一番上にあるAutoExecセクションを最初に読み込んでから、ホットキーとディレクティブを実行し、Returnにヒットするまでラインコードを実行します。また、値が真であるかどうかを継続的にチェックするためにコードをループする必要があります。

pan_on := false 

loop { 
if (pan_on = true) 
    tooltip, "XXXXXXXXEngage" 
} 

Esc:: ExitApp 

Rbutton:: 
    tooltip, "button pressed" 
    pan_on := true 
return 

Rbutton up:: 
    tooltip, "released" 
    pan_on := false 
return 
関連する問題