AutoHotkey初心者チュートリアル tidbit著

目次

  1. 基本
    1. AutoHotkeyのダウンロードとインストール
    2. スクリプトの作成方法
    3. ヘルプファイルの探し方
  2. ホットキーとホットストリング
    1. キーとその不思議なシンボル
    2. ウィンドウ固有のホットキー/ホットストリング
    3. ファイルごとに複数のホットキー/ホットストリング
  3. キー入力の送信
    1. ゲーム
  4. プログラムとウェブサイトの運営
  5. 括弧の有無による関数呼び出し
    1. コードブロック
  6. 変数
    1. ユーザーの入力を得る
    2. 他の例は?
  7. オブジェクト
    1. オブジェクトの作成
    2. オブジェクトの使用
  8. その他の役立つグッズ
    1. 謎の角括弧
    2. AHKバージョンの検索
    3. 試行錯誤
    4. インデント
    5. 助けを求める
    6. その他のリンク

1 - 基本

旅を始める前に、いくつかアドバイスをさせてほしい。このチュートリアルでは、たくさんのテキストとたくさんのコードを見ることになるでしょう。学習の効果を高めるためには、テキストを読み、コードを試すことをお勧めします。それから、コードを研究するのです。このページのほとんどの例をコピー&ペーストできます。もし混乱したら、もう一度そのセクションを読んでみてください。

a. AutoHotkeyのダウンロードとインストール

AutoHotkey(AHK)の使い方を学ぶ前に、ダウンロードする必要があります。ダウンロードしたら、インストールしましょう。しかし、それはあなたが必要とするバージョンによります。このガイドでは、セットアップが最も簡単なインストーラーを使用します。

テキストの指示:

  1. AutoHotkeyホームページへ:https://www.autohotkey.com/
  2. ダウンロードをクリックしてください。AutoHotkeyの各メジャーバージョンのオプションが表示されるはずです。このドキュメントはv2用なので、そのオプションを選択するか、v1のドキュメントに切り替えてください。
  3. ダウンロードしたファイルの名前はAutoHotkey_*_setup.exeか、それに近いものでなければなりません。実行してインストールをクリックします。
  4. インスールが終われば最高だ!セクションbに進む。

b. スクリプトの作成方法

AutoHotkeyをインストールしたら、おそらくいろいろなことをさせたくなるでしょう。AutoHotkeyは魔法ではありません。みんなががそうであってほしいと思っていますが、そうではありません。だから、何をすべきかを指示する必要があります。このプロセスは「スクリプティング」と呼ばれています。

テキストの指示:

  1. デスクトップ上で右クリックします。
  2. メニューから "新規作成" を見つけてください。
  3. "新規作成"メニューから"AutoHotkey Script"をクリックします。
  4. スクリプトに名前をつけてください。拡張子は.ahkで終わる必要があります。For example: MyScript.ahk
  5. デスクトップ上に新しく作成されたファイルを見つけて右クリックします。
  6. "Edit Script" をクリックする。
  7. おそらくメモ帳が開いたはずです。もしそうなら、成功です!

    さて、スクリプトを作成したところで、そのファイルにコードを記述する必要があります。すべての組み込み関数と変数のリストについては、セクション5を参照してください。

    ここでは、ホットキーが押されたときにSend関数を使用してテキストを入力するホットキーを含む、非常に基本的なスクリプトを紹介します:

    ^j::
    {
        Send "My First Script"
    }

    後でもっと詳しく説明します。それまでは、上のコードの説明をどうぞ:

  8. ファイルを保存する。
  9. デスクトップにあるファイル/アイコンをダブルクリックして実行します。メモ帳か(入力できるものなら何でも)開いて、CtrlJを押します。
  10. ヒップ・ヒップ・万歳!最初のスクリプトは完成しました。ご褒美のお菓子を買って、このチュートリアルの続きを読みに戻りましょう。

動画による説明は、YouTubeのInstall and Hello Worldをご覧ください。

c. ヘルプファイルの探し方

v2.0-a076以降のダウンロードには、メイン・プログラムと同じzipファイルにオフライン・ヘルプ・ファイルが含まれています。手動でファイルを解凍した場合、ヘルプファイルはどこに置いても差し支えありません。

v2.0-beta.4以降にはインストールスクリプトが含まれています。これを使ってAutoHotkeyをインストールした場合、各バージョンのヘルプファイルは、AutoHotkeyをインストールした場所のサブディレクトリ、例えば "C:\Program FilesAutoHotkey\v2.0-beta.7"の中にあるはずです。また、最後にインストールされたバージョンのサブディレクトリを指す "v2"というシンボリックリンクがあるかもしれません。v1.xがインストールされている場合、そのバージョンのヘルプファイルもルートディレクトリにあるでしょう。

AutoHotkey.chmまたはAutoHotkeyと書かれ、黄色いクエスチョンマークが付いたファイルを探してください。

ファイルそのものを探す必要がなければ、それを起動する方法もいくつかあります:

2 - ホットキーとホットストリング

ホットキーとは何ですか?ホットキーとは、触れると熱くなるキーのこと。... 冗談だよ。これは、キーボードの人が何らかのアクションを起こすために押すキー、またはキーの組み合わせである。事例:

^j::
{
    Send "My First Script"
}

ホットストリングとは?ホットストリングは主に、入力した略語を展開する(自動置換)ために使用されますが、スクリプト化されたアクションを起動するためにも使用できます。事例:

::ftw::Free the whales

この2つの例の違いは、ホットキーはCtrl+Jを押したときに発動するのに対し、ホットストリングは入力された「ftw」を「Free the whales」に変換するという点です。

「では、私のような素人がホットキーを作るにはどうすればいいのでしょうか?」いい質問です。ホットキーはコロンのペア一組で作成できます。キーまたはキーコンボは::左側に置く必要があります。そして、その内容は中カッコで囲んで下に書く必要があります。

注:例外もありますが、それは多くの場合混乱を招きがちです。だからチュートリアルでは扱わないことにしています。

Esc::
{
    MsgBox "Escape!!!!"
}

ホットストリングは、テキスト置換のトリガーとなるテキストの両側にコロンのペアが1つずつあります。入力したテキストを置き換えるテキストは、2つ目のコロンのペアの右側に置きます。

前述のように、ホットストリングはスクリプト化されたアクションを起動することもできます。これは「何でもできる」という意味の洒落た言葉だ。ホットキーも同じです。

::btw::
{
    MsgBox "You typed btw."
}

ホットキー、ホットストリング、ラベル、その他まだお話ししていない様々なものに対して、何行ものコードを書くことができます。

^j::
{
    MsgBox "Wow!"
    MsgBox "There are"
    Run "notepad.exe"
    WinActivate "Untitled - Notepad"
    WinWaitActive "Untitled - Notepad"
    Send "7 lines{!}{Enter}"
    SendInput "inside the CTRL{+}J hotkey."
}

a. キーとその不思議なシンボル

「どうやって^がCtrlを意味することを知るんだ!」と思うかもしれません。いい質問だね。^や他の記号の意味を知るために、この表をご覧ください:

記号 説明
# Win(Windowsロゴキー)
! Alt
^ Ctrl
+ Shift
& アンパサンドは、任意の2つのキーまたはマウスボタンの間に使用し、カスタムホットキーに結合することができます。

(記号の全リストはホットキーのページを参照)

また、ホットキーのダブルコロンの左側で使用できるホットキー名の一覧については、「キー、マウスボタン、コントローラーコントロールの一覧」を参照してください。

キーとキーの間に & を使用することで、2つのキー(コントローラーボタンは除く)のカスタムコンビネーションを定義することができます。以下の例では、Numpad0を押しながらNumpad1またはNumpad2を押して、ホットキーのいずれかをトリガーします:

Numpad0 & Numpad1::
{
    MsgBox "You pressed Numpad1 while holding down Numpad0."
}

Numpad0 & Numpad2::
{
    Run "notepad.exe"
}

しかし、ホットキーがそうである以上、ホットストリングにクールなモディファイアがあるのかどうか、あなたは今、疑問に思っているはずだ。そうだ!ホットストリング修飾子は、最初のコロンのペアの間に置く。事例:

:*:ftw::Free the whales

その他のホットキーとホットストリングの修飾子、情報、例については、ホットキーホットストリングをご覧ください。

b. ウィンドウ固有のホットキー/ホットストリング

ホットキーやホットストリングを特定のウィンドウでのみ使用したい(または無効にしたい)場合があります。これを行うには、#が前に付いた洒落た指令、#HotIfを、組み込み関数WinActiveまたはWinExistと組み合わせて使う必要がある:

#HotIf WinActive(WinTitle)
#HotIf WinExist(WinTitle)

この特別な指令(専門的には "ディレクティブ"と呼ばれる)は、文脈依存のホットキーとホットストリングを作成します。WinTitleにウィンドウのタイトルを指定するだけです。しかし場合によっては、HWND、グループ、クラスなどの条件を指定したいこともあるかもしれません。これらは少し高度なので、こちらで詳しく説明します:WinTitleパラメータと最後に見つかったウィンドウ

#HotIf WinActive("Untitled - Notepad")
#Space::
{
    MsgBox "You pressed WIN+SPACE in Notepad."
}

それ以降のホットキーまたはホットストリングのコンテキスト感度をオフにするには、パラメータなしで#HotIfを指定します。事例:

; Untitled - Notepad
#HotIf WinActive("Untitled - Notepad")
!q::
{
    MsgBox "You pressed ALT+Q in Notepad."
}

; Any window that isn't Untitled - Notepad
#HotIf
!q::
{
    MsgBox "You pressed ALT+Q in any window."
}

スクリプト内で#HotIfディレクティブが使用されていない場合、すべてのウィンドウですべてのホットキーとホットストリングが有効になります。

#HotIf指令は位置指定:#HotIfは、次の#HotIfディレクティブまで、スクリプト内で物理的にその下にあるすべてのホットキーとホットストリングに影響を及ぼします。

; Notepad
#HotIf WinActive("ahk_class Notepad")
#Space::
{
    MsgBox "You pressed WIN+SPACE in Notepad."
}
::msg::You typed msg in Notepad

; MSPaint
#HotIf WinActive("Untitled - Paint")
#Space::
{
    MsgBox "You pressed WIN+SPACE in MSPaint!"
}
::msg::You typed msg in MSPaint!

より詳細な情報については、#HotIfのページをご覧ください。

c. ファイルごとに複数のホットキー/ホットストリング

このことは、なぜか一部の人々の心を横切っている。だから、はっきりさせておこう:AutoHotkeyには、1つのファイルにいくつでもホットキーやホットストリングを設定できる機能があります。それが1人であろうと、3253人(あるいはそれ以上)であろうと。

#i::
{
    Run "https://www.google.com/"
}

^p::
{
    Run "notepad.exe"
}

~j::
{
    Send "ack"
}

:*:acheiv::achiev
::achievment::achievement
::acquaintence::acquaintance
:*:adquir::acquir
::aquisition::acquisition
:*:agravat::aggravat
:*:allign::align
::ameria::America

上記のコードはまったく問題ない。複数のホットキー、複数のホットストリング。すべて1つの大きな幸せなスクリプトファイルだ。

d. 例

::btw::by the way  ; Replaces "btw" with "by the way" as soon as you press a default ending character.
:*:btw::by the way  ; Replaces "btw" with "by the way" without needing an ending character.
^n::  ; CTRL+N hotkey
{
    Run "notepad.exe"  ; Run Notepad when you press CTRL+N.
}  ; This ends the hotkey. The code below this will not be executed when pressing the hotkey.
^b::  ; CTRL+B hotkey
{
    Send "{Ctrl down}c{Ctrl up}"  ; Copies the selected text. ^c could be used as well, but this method is more secure.
    SendInput "[b]{Ctrl down}v{Ctrl up}[/b]" ; Wraps the selected text in BBCode tags to make it bold in a forum.
}  ; This ends the hotkey. The code below this will not be executed when pressing the hotkey.

3 - キー入力の送信

さて、あなたは今、プログラムにキーを送信(タイプ)したいと決めた。それはできる。送信機能を使う。この関数は文字通りキー入力を送信し、タイピングやキー押下をシミュレートする。

しかし、本題に入る前に、人々が抱える一般的な問題について話しておこう。

Just like hotkeys, the Send function has special keys too. たくさん、たくさんだ。以下は、最も一般的な4つのシンボルである:

記号 説明
! Altを送る。例えば、Send "This is text!a"は、"This is text "とキーを送り、Alt+Aを押す。注:プログラムによっては、!A!aとは異なる効果をもたらす。これは!AAlt+Shift+Aを押し、!aAlt+Aを押すからである。迷ったときは小文字を使います。
+ Shiftを送る。例えば、Send "+abC"を送ると "AbC"というテキストが送られ、Send "!+a"を送るとAlt+Shift+Aを押す。
^ Ctrlを送る。例えば、Send "^!a"を送信する場合はCtrl+Alt+Aを、Send "^{Home}"を送信する場合はCtrl+Homeを送信する。注: ^A はプログラムによっては ^a とは異なる効果をもたらします。これは^ACtrl+Shift+Aを、^aCtrl+Aを押すからである。迷ったときは小文字を使います。
# Win(Windows ロゴのあるキー)を送信するので、Send "#e"を送信するには、Winを押しながらEを押します。

センドページの巨大な表には、AHKに内蔵されている特殊キーのほとんどが示されている。事例:{Enter}{Space}

注意:この表はホットキーには適用されません。つまり、ホットキーを作成するときに、CtrlEnter(またはその他のキー)を中カッコで囲まないということです。

ホットキーにやってはいけないことを示す例:

; When making a hotkey...
; WRONG
{LCtrl}::
{
    Send "AutoHotkey"
}

; CORRECT
LCtrl::
{
    Send "AutoHotkey"
}

多くの人が持っている一般的な問題は、中カッコは単に面白半分でドキュメントのページに付けられたものだと思い込んでいることだ。しかし、実際には必要なのだ{!}が「感嘆符」を意味し、「Altを押してください」を意味しないことをAHKが知っているのはそのためだ。ですから、送信ページの表をチェックし、括弧が正しい位置にあることを確認するのを忘れないでください。事例:

Send "This text has been typed{!}" ; Notice the ! between the curly brackets? That's because if it wasn't, AHK would press the ALT key.
; Same as above, but with the ENTER key. AHK would type out "Enter" if
; it wasn't wrapped in curly brackets.
Send "Multiple Enter lines have Enter been sent." ; WRONG
Send "Multiple{Enter}lines have{Enter}been sent." ; CORRECT

もうひとつのよくある問題は、人々はすべてを括弧でくくる必要があると思っていることだ。それは誤りだ。チャートになければ、括弧は必要ない。一般的な文字や数字、あるいは.(ピリオド)のような記号を中カッコで囲む必要はない。また、送信機能を使えば、一度に複数の文字、数字、記号を送信することができます。だから、1文字ずつのSend関数の束は必要ない。事例:

Send "{a}"       ; WRONG
Send "{b}"       ; WRONG
Send "{c}"       ; WRONG
Send "{a}{b}{c}" ; WRONG
Send "{abc}"     ; WRONG
Send "abc"       ; CORRECT

キーを押したままにしたり離したりするには、キー名を波括弧で囲み、その後に「UP」または「DOWN」を使用する。事例:

; This is how you hold one key down and press another key (or keys).
; If one method doesn't work in your program, please try the other.
Send "^s"                     ; Both of these send CTRL+S
Send "{Ctrl down}s{Ctrl up}"  ; Both of these send CTRL+S
Send "{Ctrl down}c{Ctrl up}"
Send "{b down}{b up}"
Send "{Tab down}{Tab up}"
Send "{Up down}"  ; Press down the up-arrow key.
Sleep 1000        ; Keep it down for one second.
Send "{Up up}"    ; Release the up-arrow key.

しかし今、あなたは「どうすれば本当に長いSend関数を読みやすくできるのか?」。簡単だ。継続セクションと呼ばれるものを使用する。新しい行で開始括弧を指定し、次に内容を指定し、最後にその行で終了括弧を指定するだけだ。詳しくは、継続セクションについてをお読みください。

Send "
(
Line 1
Line 2
Apples are a fruit.
)"

注:Sendにはいくつかの種類があります。それぞれに特徴あります。Sendがニーズに合わない場合は、別のSendを試してみてください。関数名「Send」を以下のいずれかに置き換えるだけでよい:SendText、SendInput、SendPlay、SendEvent。それぞれの役割については、こちらをご覧いただきたい。

a. ゲーム

This is important: Some games, especially multiplayer games, use anti-cheat programs. GameGuard、Hackshield、PunkBusterなどだ。これらのシステムを迂回することは、ゲームポリシーに違反し、あなたが追放される可能性があるだけでなく、回避するのが複雑です。

ゲームにチート防止システムがあり、ホットキー、ホットストリング、送信機能が動作しない場合は、運が悪かったと言えます。しかし、ゲームによっては動作する可能性を高める方法はありますが、魔法のような「今すぐ私のゲームで動作させる!」ボタンはありません。。だから、あきらめる前にこれらすべてを試してみてほしい。

また、DirectXにも既知の問題がある。問題があり、ゲームがDirectXを使用していることが分かっている場合は、FAQページに記載されていることを試してみてください。PixelSearchPixelGetColorImageSearchを使用すると、さらにDirectXの問題が発生する可能性があります。どんな色を出そうとしても黒(0x000000)になるかもしれない。また、可能であれば、ウィンドウモードでゲームを実行してみてください。これにより、DirectXのいくつかの問題が修正された。

AutoHotkeyをすべてのプログラムで使えるようにする唯一の解決策はありません。何を試してもうまくいかない場合は、AutoHotkeyを使うことができないかもしれません。

4 - プログラムとウェブサイトの運営

mspaint.exe、calc.exe、script.ahk、あるいはフォルダなどのプログラムを実行するには、「ファイル名を指定して実行」機能を使用します。https://www.autohotkey.com/などのURLを開くのにも使える。あなたのコンピューターが、実行したいタイプのプログラムを実行できるようにセットアップされていれば、とても簡単だ:

; Run a program. Note that most programs will require a FULL file path:
Run A_ProgramFiles "\Some_Program\Program.exe"

; Run a website:
Run "https://www.autohotkey.com"

コマンドラインパラメーターやCLSIDなど、他にも高度な機能がある。そのようなことについてもっと知りたければ、Runのページをご覧ください。

以下はそのサンプルである:

; ウィンドウズの標準のプログラムのように、プログラムによってはフルパスで指定する必要がありません:
Run "notepad.exe"
Run "mspaint.exe"

; マイドキュメントフォルダを組み込み変数を使って開きます:
Run A_MyDocuments

; ウェブサイトを開きます:
Run "https://www.autohotkey.com"
Run "https://www.google.com"

より詳細な情報や例については、Runのページをご覧ください。

5 - 括弧の有無による関数呼び出し

AutoHotkeyでは、関数呼び出しは括弧付きでも括弧なしでも指定できます。括弧が必要なのは、関数の戻り値が必要な場合か、関数名が行頭に書かれていない場合だけである。

内蔵関数の一覧はこちら

典型的な関数呼び出しは次のようなものだ:

Function(Parameter1, Parameter2, Parameter3) ; 括弧あり
Function Parameter1, Parameter2, Parameter3  ; 括弧なし

パラメータはあらゆる種類の表現に対応している:

  1. その中で算術計算ができます:
    SubStr(37 * 12, 1, 2)
    SubStr(A_Hour - 12, 2)
  2. その中で別の関数を呼び出すことができます(これらの関数呼び出しは行頭ではないので、括弧で指定しなければならないことに注意):
    SubStr(A_AhkPath, InStr(A_AhkPath, "AutoHotkey"))
  3. テキストは引用符で囲む必要があります:
    SubStr("I'm scripting, awesome!", 16)

関数の戻り値を変数に代入する最も一般的な方法は次のとおりです:

MyVar := SubStr("I'm scripting, awesome!", 16)

これが唯一の方法ではありませんが、最も一般的な方法です。MyVarは、:=演算子の右側にある関数の戻り値を格納するために使用しています。詳細はファンクションを参照。

要するにだ:

; 以下は括弧なしで関数を呼び出しています:
MsgBox "This is some text."
StrReplace Input, "AutoHotKey", "AutoHotkey"
SendInput "This is awesome{!}{!}{!}"

; 以下は括弧ありで関数を呼び出しています:
SubStr("I'm scripting, awesome!", 16)
FileExist(VariableContainingPath)
Output := SubStr("I'm scripting, awesome!", 16)

a. コードブロック

コードブロックとは、小さな中括弧({})で囲まれたコード行のことである。AutoHotkeyが1つの大きなファミリーであることを認識し、一緒にいる必要があるように、コードのセクションをグループ化します。関数や、IfLoopのような制御フロー文と一緒に使われることが多い。これがないと、ブロックの最初の行だけが呼び出される。

以下のコードでは、MyVarが5に等しい場合にのみ、両方の行が実行される:

if (MyVar = 5)
{
    MsgBox "MyVar equals " MyVar "!!"
    ExitApp
}

以下のコードでは、MyVarが5に等しい場合にのみメッセージボックスが表示される。The script will always exit, even if MyVar is not 5:

if (MyVar = 5)
    MsgBox "MyVar equals " MyVar "!!"
    ExitApp

ifステートメントに関連するコードは1行だけなので、これはまったく問題ない。上とまったく同じだが、2行目をアウトデントにして、if文と分離していることがわかるようにした:

if (MyVar = 5)
    MsgBox "MyVar equals " MyVar "!!"
MsgBox "We are now 'outside' of the if-statement. "の下に1行しかないので、中カッコは必要なかった。"

6 - 変数

変数は、ある情報を保持する小さな付箋のようなものだ。テキスト、数値、関数からのデータ、あるいは数式を保存するのに使うことができる。それがなければ、プログラミングやスクリプトはもっと退屈なものになるだろう。

変数はいくつかの方法で割り当てることができる。ここでは、最も一般的な形式を取り上げる。Please pay attention to the colon-equal operator (:=).

テキスト課題
MyVar := "Text"

これは変数の最も単純な形である。テキストを入力するだけで完了。テキストは引用符で囲む必要がある。

変数の割り当て
MyVar := MyVar2

上記と同じだが、変数の値を別の変数に代入している。

番号割り当て
MyVar := 6 + 8 / 3 * 2 - Sqrt(9)

式のおかげで数学ができる!

混合課題
MyVar := "The value of 5 + " MyVar2 " is: " 5 + MyVar2

上記3つの課題の組み合わせ。

Equal signs (=) with a symbol in front of it such as := += -= .= etc. are called assignment operators.

a. ユーザーの入力を得る

時には、ユーザーが物の価値を選べるようにしたい。これにはいくつかの方法があるが、最も単純な方法はInputBoxである。ここでは、ユーザーにいくつかの質問をし、入力された内容でいくつかのことを行う簡単な例を示します:

IB1 := InputBox("What is your first name?", "Question 1")
if IB1.Value = "Bill"
    MsgBox "That's an awesome name, " IB1.Value "."

IB2 := InputBox("Do you like AutoHotkey?", "Question 2")
if IB2.Value = "yes"
    MsgBox "Thank you for answering " IB2.Value ", " IB1.Value "!We will become great friends."
else
    MsgBox IB1.Value ", That makes me sad."

b. 他の例は?

Result := MsgBox("Would you like to continue?",, 4)
if Result = "No"
    return  ; Noならここでコードを終了します。
MsgBox "You pressed YES."  ; Otherwise, the user picked yes.
Var := "text"  ; Assign some text to a variable.
Num := 6  ; 変数に数値を代入します。
Var2 := Var  ; 変数に別の変数を代入します。
Var3 .= Var  ; 変数の末尾に別の変数を追記します。
Var4 += Num  ; 変数に別の変数を加算します。
Var4 -= Num  ; Subtract the value of a variable from another.
Var5 := SubStr(Var, 2, 2)  ; Variable inside a function.
Var6 := Var "Text"  ; Assigns a variable to another with some extra text.
MsgBox(Var)  ; Variable inside a function.
MsgBox Var  ; 上と同じです。
Var := StrSplit(Var, "x")  ; Variable inside a function that uses InputVar and OutputVar.
if (Num = 6)  ; Check if a variable is equal to a number.
if Num = 6  ; Same as above.
if (Var != Num)  ; Check if a variable is not equal to another.
if Var1 < Var2  ; Check if a variable is lesser than another.

7 - オブジェクト

オブジェクトは、データをより効率的に使用するための整理方法です。オブジェクトは基本的に変数の集まりである。オブジェクトに属する変数は「プロパティ」と呼ばれる。オブジェクトには、配列要素などのアイテムが含まれることもある。

オブジェクトを何かに使いたい理由はいくつもあるだろう。いくつかの例を挙げよう:

a. オブジェクトの作成

オブジェクトを作成する方法はいくつかあるが、最も一般的なものを以下に挙げる:

ブラケット構文(配列)
MyArray := ["one", "two", "three", 17]

これはArray(配列)を作成するもので、1番から上の項目のリストを表す。この例では、値"one"がインデックス1に、値17がインデックス4に格納されている。

ブレース構文
Banana := {Color: "Yellow", Taste: "Delicious", Price: 3}

これにより、アドホックオブジェクトが作成される。これは、既知のプロパティの短いセットを持つオブジェクトを素早く作成する方法です。In this example, the value "Yellow" is stored in the Color property and the value 3 is stored in the Price property.

配列コンストラクタ
MyArray := Array("one", "two", "three", 17)

これはブラケット構文と同じである。これは実際には関数ではなくArrayクラスを呼び出している。

マップコンストラクタ
MyMap := Map("^", "Ctrl", "!", "Alt")

これはMapまたは連想配列を作成する。この例では、値"Ctrl"がキー"^"に関連付けられ、値"Alt"がキー"!"に関連付けられる。マップは多くの場合、Map()で空の状態で作成され、後でアイテムで埋められる。

その他のコンストラクタ
Banana := Fruit()

指定されたクラス(この場合は Fruit)のオブジェクトを作成します。

b. オブジェクトの使用

値の取得、値の設定、値の追加など、オブジェクトを使う方法はたくさんある。

値を設定する

ブラケット表記
MyArray[2] := "TWO"
MyMap["#"] := "Win"

マップやコレクションに配列要素や項目を設定するのは、変数に値を代入するのと似ている。オブジェクト(配列、マップ、その他何でも)を含む変数にブラケット表記を追加するだけだ。括弧の間のインデックスまたはキーは式なので、数値以外のリテラル値には引用符を使用しなければならない。

ドット表記
Banana.Consistency := "Mushy"

この例では、バナナに含まれるオブジェクトのプロパティに新しい値を割り当てている。そのプロパティがまだ存在しない場合は、作成される。

値を取得する

ブラケット表記
Value := MyMap["^"]

この例では、以前にキー"^"に関連付けられた(マップされた)値を取得する。多くの場合、キーはMyMap[modifierChar]のような変数に含まれる。

ドット表記
Value := Banana.Color

This example retrieves the Color property of the Banana object.

新しいキーと値を追加する

ブラケット表記
MyMap["NewerKey"] := 3.1415

キーと値を直接追加するには、まだ存在しないキーを設定すればよい。ただし、配列に代入する場合は、インデックスが1から配列の現在の長さの範囲内になければならないことに注意。対象が異なれば、要求も異なるだろう。

ドット表記
MyObject.NewProperty := "Shiny"

前述のように、まだ定義されていないプロパティに代入すると、新しいプロパティが作成されます。

InsertAtメソッド
MyArray.InsertAt(Index, Value1, Value2, Value3...)

InsertAtは、配列内の特定の位置に新しい値を挿入するために使われるメソッドだが、他の種類のオブジェクトでもこの名前のメソッドを定義することができる。

Pushメソッド
MyArray.Push(Value1, Value2, Value3...)

Pushは、Array MyArrayの末尾に値を「追加」する。ブラケット記法は、現在の値の範囲外を代入するために使用することができないので、配列に新しい要素を追加するための好ましい方法です。

プロパティとアイテムを削除するには

Deleteメソッド
RemovedValue := MyObject.Delete(AnyKey)

ArrayMapにはDeleteメソッドがあり、配列やマップから値を削除する。MyObject[AnyKey]の前の値がRemovedValueに格納されます。配列の場合、これは配列要素に値を残さず、配列の他の要素には影響を与えない。

Popメソッド
MyArray.Pop()

このArrayメソッドは、配列から最後の要素を取り除き、その値を返します。配列の長さが1短くなる。

RemoveAtメソッド
RemovedValue := MyArray.RemoveAt(Index)
MyArray.RemoveAt(Index, Length)

配列には RemoveAtメソッドがあり、配列要素や配列要素の範囲を削除します。取り除かれた要素の右側に要素があれば、その要素は左にシフトされ、空いたスペースを埋める。

8 - その他の役立つグッズ

我々は旅の終わりに到達したのだ。何か学んでいただけただろうか。しかし、その前に知っておくべきことがある。楽しもう!

a. 謎の角括弧

この2つの記号([])は、ほとんどのページの上部にある黄色い構文ボックスでコードを囲んでいます。これらの括弧の中はオプション。つまり、中に入っているものは、必要なければ出しておくことができるのだ。コードを書く際には、角括弧をコード中に入力しないことが非常に重要です。

ControlGetTextページでは、このように表示されます:

Text := ControlGetText(Control , WinTitle, WinText, ExcludeTitle, ExcludeText)

だから、やろうと思えば簡単にできる:

Text := ControlGetText(Control)

あるいは、さらに詳細を加える:

Text := ControlGetText(Control, WinTitle)

WinTextWinTitleを記入せず、ExcludeTitleを使いたい場合は?シンプルだ!

Text := ControlGetText(Control,,, ExcludeTitle)

パラメータを無視することはできませんが、空白にすることはできます。WinTitle, WinTextを無視すると、このようになり、問題が発生する:

Text := ControlGetText(Control, ExcludeTitle)

b. AHKバージョンの検索

このコードを実行すると、AHKのバージョンが表示されます:

MsgBox A_AhkVersion

または、スタートメニューまたはインストールディレクトリで "AutoHotkey Help File"または "AutoHotkey.chm"を探してください。

c. 試行錯誤

試行錯誤は非常に一般的で効果的な学習方法である。些細なことでいちいち助けを求めるのではなく、時には一人で時間をかけて(時には数時間、数日かけて)何かを動かそうとすることが、より早く学ぶことにつながる。

何かを試してエラーが出たら、そのエラーを研究すること。それからコードを修正してみてください。その後、もう一度実行してみてください。それでもエラーが出る場合は、コードをもう少し修正してください。あなたのコードが失敗しなくなるまで、試行錯誤を続けてください。ドキュメントを読み、エラーを読み、何が機能し、何が機能しないかを学ぶことで、この方法で多くを学ぶことができる。トライ、失敗、トライ、失敗、トライ、トライ、失敗、成功!

こうして多くの "プロ "が学んできた。でも、助けを求めることを恐れないでください。私たちは(強く)噛みついたりはしません。学習には時間がかかる。あなたが出会う "プロ "たちは、ほんの数時間や数日でマスターになったわけではない。

"最初はうまくいかなくても、トライ、トライ、またトライ" - ヒクソン ウィリアム・E

d. インデント

このこと(インデント)はとても重要だ!あなたのコードはこれなしでもまったく問題なく動くが、あなたにとっても他の人にとっても、あなたのコードを読むのは大きな頭痛の種になるだろう。小さなコード(25行以下)は、インデントなしで読む分には問題ないだろうが、すぐにだらしなくなってしまう。早急にインデントを学んだ方がいい。インデントに決まったスタイルはありませんが、すべてを統一するのがベストです。

インデントとは何か?」と貴方は問う?これは単に、コードを分割するための間隔であり、何が何に属しているかがわかるようにするためのものである。通常、「レベル」ごとに3つか4つのスペースか1つのタブを使う。

インデントされていない:

if (car = "old")
{
MsgBox "The car is really old."
if (wheels = "flat")
{
MsgBox "This car is not safe to drive."
return
}
else
{
MsgBox "Be careful!This old car will be dangerous to drive."
}
}
else
{
MsgBox "My, what a shiny new vehicle you have there."
}

インデントされている:

if (car = "old")
{
    MsgBox "The car is really old."
    if (wheels = "flat")
    {
        MsgBox "This car is not safe to drive."
        return
    }
    else
    {
        MsgBox "Be careful!This old car will be dangerous to drive."
    }
}
else
{
    MsgBox "My, what a shiny new vehicle you have there."
}

さまざまなスタイルと例については、ウィキペディアのインデントのスタイルのページを参照のこと。自分の好きなものを選ぶか、自分が一番読みやすいと思うインデントの付け方を学んでください。

e. 助けを求める

質問する前に、自分で調べてみるか、自分でコーディングしてみるといい。それでも満足のいく結果が得られなかった場合は、以下をお読みいただきたい。

すぐに回答が得られない場合は、少なくとも1日(24時間)待ってから問い合わせること。私たちは手助けをするのが好きだが、自分の時間を使って無料でやっている。仕事中かもしれないし、寝ているかもしれないし、ゲームをしているかもしれないし、家族と一緒にいるかもしれないし、ただ忙しくて手伝う暇がないかもしれない。

そして助けを待つ間、自分で学んでやってみることもできる。人の手を借りずに自分で何かを作るというのはいい気分だ。

f. その他のリンク

よくある質問(FAQ)