LoginSignup
6
6

More than 3 years have passed since last update.

AutoHotKey の開発(デバッグ込)環境の構築手順

Posted at

はじめに

この記事では、VSCode を用いて AutoHotkey の開発環境を整えた後、デバッグの仕方を軽く説明します。
AutoHotkey については、こちらの記事で紹介していますので、よければ見てみてください。

この記事で触れること

  • 他言語のように以下を行う
    • ブレイクポイントを用いたデバッグ
    • 任意のコードの実行
    • シンタックスハイライト
    • スクリプトのフォーマット
    • 関数の定義元・定義先へジャンプ
    • スクリプトのコンパイル(EXE ファイル化)

背景

興味のない方は読み飛ばしていただいて大丈夫です!!

従来、デバッグする際は、この記事この記事に書いてあるようにDBGpというプロトコルを自分でエディタに組み込んでいました (しかし、対応しているエディタが少ないのが悩みどころ)。
また、上に挙げたような言語サポートも得ることができてませんでした。

しかし、2015 年にAutoHotkey、去年にVSCode-Autohotkey-Plusがリリースされたことにより、皆様も使い慣れているであろう VS Code を用いて AutoHotkey の開発ができるようになりました。

バージョン

  • Windows: 10
  • AutoHotkey: 1.1.33.02
  • AutoHotkey(VSCode 拡張): 0.2.2
  • VSCode-Autohotkey-Plus: 2.6.1

前提

  • VSCode がインストール済み

構築手順

  1. AutoHotkey をインストール
    • 公式からCurrent Versionのインストーラをダウンロード後、インストールする。
    • こちらのサイトの解説が丁寧。
  2. VSCode を起動
  3. 以下の拡張機能をインストール

これでおしまいです。

使い方

ほとんど上記の拡張機能の Overview に書いてあることをなぞる形になります。

準備

VScode を開き、新規の .ahkファイルを作成します。
すると、最初から以下が記述されたファイルが作成されます。
これらは消しても良いですが、あると便利です。

#SingleInstance, Force
SendMode Input
SetWorkingDir, %A_ScriptDir%

簡単に解説します。

  • #SingleInstance, Force
    • 参考
    • 実行中のスクリプトがもうひとつ起動されたとき、自動的に既存のプロセスを終了して新たに実行開始する
    • これがないと、スクリプトを実行するたびに「既存のプロセスを終了して起動するか」聞かれることになる
  • SendMode Input
    • 参考
    • Send、SendRaw、Click コマンドおよび Mouse 系コマンドを処理する際に、システムに一連の操作イベントをまとめて送り込む
    • 他のモードだと、大量の Send コマンド等が発生したときに速度が遅くなるらしい
  • SetWorkingDir, %A_ScriptDir%
    • 参考
    • スクリプトの作業ディレクトリを実行スクリプトが置いてあるディレクトリにする
    • 作業ディレクトリは、相対パスを指定したときに基準となるディレクトリである
    • 基本はプログラムが実行された場所が作業ディレクトリになる

デバッグ

他の言語と同じようにデバッグできます。

a
参照: VSCode-Autohotkey-Plus

機能

  • 実行ボタンをクリック or F9 押下 or AHK: Debug Scriptコマンドでデバッグ開始
  • ブレークポイント、スタックトレース、変数をサポート
  • 出力メッセージ:デバッグ時に MsgBox の代わりに OutputDebug コマンドを使用すると、見やすくメッセージが表示される
  • 注意 サブルーチン(::を含む命令)が途中に存在すると、その時点でデバッグが終わってしまう様子

    • なので、関数だけのファイルと、その関数を呼び出すファイルとに分けるとデバッグしやすい
    • before
    <!+x::
    StrRefMsg := RegExReplace(Clipboard, "([^\n]+)", "> $1")
    Clipboard = %StrRefMsg%
    Send, ^v
    return
    
    • after
    main.ahk
    #Include, %A_WorkingDir%/func.ahk
    
    ;; CTRL + Xをクリックしたときに、>を挿入する
    <!+x::
      AddBlockquotes()
      Send, ^v
    return
    
    func.ahk
    AddBlockquotes()
    {
      StrRefMsg := RegExReplace(Clipboard, "([^\n]+)", "> $1")
      Clipboard = %StrRefMsg%
    }
    
    
6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6