よくある質問と回答

提供: AutoHotkey Wiki
移動: 案内検索

目次

実行環境[編集]

どれをインストールすればいいの?[編集]

インストーラー/AutoHotkey_L Unicode版推奨、日本語を含む文字列の取り扱いが断然便利な為。
64ビットOSでAHKL32ビット版の使用は制約が多いので、64ビット版を強く推奨。
※ 詳細はAutoHotkey L/イントロダクション

スクリプトに書いた日本語が文字化けしちゃうんだけど...。[編集]

スクリプトファイルを「UTF-8 (BOM付)」で保存する。(AHKLの場合)
※ 詳細はスクリプトファイルのエンコーディング

スクリプトを見やすくしたい。[編集]

  • 改行をいれる。
  • インデント(タブ文字/Tab または 半角スペース)いれる。全角スペース×
ネスト(入れ子)となっている要素は、インデントを入れて1段下げる。階層化することで可読性が非常に良くなる。
  • コメントをいれる。
行頭が ; セミコロンの行はコメント行。コマンドのあとに 半角スペース/タブ文字 を空けてセミコロンがあれば、それ以降はコメント。
/* …… */で囲まれた範囲もコメントになる。
  • ソースコードエディタを使用する。
シンタックスハイライト(コードを色付け)、関数のオートコンプリート機能等、様々な補助機能がある。

※ 詳細は開発環境の構築

スクリプトをEXEファイル化したい。[編集]

ahk2exe.exeを使うことで、スクリプトを実行ファイル化することが可能。

  • インストーラー版
インストールディレクトリにあるahk2exe.exeを実行 関連付けしている場合は対象のスクリプトファイルを右クリック →「Compile Script」
  • Zip版
別途ダウンロード必要 AutoHotkey_L →「Compiler」

※ 詳細は使用方法

リマップ・ホットキー割り当て[編集]

半角/全角、CapsLock、かな(カナロック) などのLock系のキーへのキー割り当てが上手く行かない。[編集]

OSのローカライズ段階で発生してる問題、フック系のキーカスタマイズユーティリティ全般で発生する。
AutoHotkeyがキーを認識する前の段階で、OS側がキーUp/Down情報を変更してしまっているため。
解決策としては、ChangeKeyなどを使い 「半角/全角」を「F13~F24」などの仮想キーに割り当て、それに対してAutoHotkeyで割り当てれば良い。
※ 詳細は既知の不具合

マウスのサイドボタン3個目以降にもホットキー割り当てたい。[編集]

マウスのドライバユーティリティで「対象のボタン」を「F13~F24」などの仮想キーに割り当て、それに対してAutoHotkeyで割り当てれば良い。
Logicool製マウスの場合はuberOptionsを使うと割り当てが出来るようになる。

マウスにホットキーの割り当てをしても反応しない。[編集]

マウスのドライバユーティリティ(SetPoint等)の設定が優先されるので終了させるか、「対象のボタン」を「F13~F24」などの仮想キーに割り当て、それに対してAutoHotkeyで割り当てれば良い。
Logicool製マウスの場合はuberOptionsを使うと割り当てが出来るようになる。

キーボードの同時押しが認識しない。[編集]

安価なキーボードの場合、複数キー同時押しに対応していない場合がある、これはハードウェアの問題なのでAutoHotkeyなどのソフトでは解決できない。同時押しに対応しているキーボードを使用するしかない。

「^1::Esc」とリマップ定義したけど [Ctrl]+[1] を押したらスタートメニューが出ちゃうけどどうすればいいの?[編集]

リマップは修飾キー(Ctrl,Shift,Alt,Win)の押下状態を引き継いでキー発行するので、[Ctrl]+[Esc] がキー送信されるため。
これを避けるには、「Send」コマンドを利用して明示的に修飾キーなしのキーを発行をすればよい。

^1::Send, {Esc}

[Shift], [Ctrl], [Alt], [Win]以外を修飾キーとしてキー割り当てしたいよ。[編集]

コンビネーションキーの機能で実現ができる。
例) 無変換 + IKJLキーをそれぞれ「↑↓←→」に割り当てたい場合は以下のように記述する。

sc07B & I::Send, {Blind}{Up}
sc07B & K::Send, {Blind}{Down}
sc07B & J::Send, {Blind}{Left}
sc07B & L::Send, {Blind}{Right}

「XX hotkeys have been received in the last XXXXms.」って怒られるんだけど。(XXは環境による)[編集]

多分自分自身のキーを送って無限ループになっている。 (例: a::Send, a )
先頭に $ を付ければ回避できる(NT系のみ)。 (例: $a::Send, a)
#UseHookで全部にキーボードフックを適応する方法でも可。
※ 詳細は#MaxHotkeysPerInterval

キーリマップを使うとキー押下中に連打するけど、マウスボタンの場合は連打しない…。[編集]

マウスはキーリピートしないので、Loopなどを使って自前でリピートさせてください。

ジョイスティックのリマップがうまくいきません!!助けて[編集]

ジョイスティックではリマップできない。「Send」コマンドでキー発行する必要がある。

× Joy1::Esc
○ Joy1::Send, {Esc}

ジョイスティックの上下左右に割り当てたいけど、JoyLeft,JoyUpってホットキーは無いの?[編集]

無い。AHKのジョイスティックサポートはかなり貧弱なのでプログラマブルにやる必要がある。
解決策としては、JoyToKeyなどを使い 「ジョイスティック」を「F13~F24」などの仮想キーに割り当て、それに対してAutoHotkeyで割り当てれば良い。

ジョイスティックのボタン1とボタン2の入れ替えなどはどうやってやるの?[編集]

AutoHotkeyではできない。
解決策としては、JoyToKeyなどを使えば良い。

[Ctrl][Shift][Alt]が押されっぱなしになる時がある。これってAHKのせい?[編集]

AHKが原因の場合とそうでないときがある

  • AHKが原因の場合
AHKには、以下のような修飾キー付きのホットキー修飾キー無しでキーを発効する場合、
一時的に修飾キー押下を解除して、発効後に押下状態を再度設定する機構がある。
しかしこのように発効するキーストロークが多い場合は、Sendコマンドが完了する前に
物理キーが押下解除されてしまっている場合がある。この齟齬が押しっぱなしの原因となる。
(例: ^W::Send, {w 30})
これを回避するためには、以下の方法をとればよい:
  • キー押下状態を常に監視するキーボードフックを導入する(#InstallKeybdHook)
  • キー発効のコマンドを SendInput, SendPlay にする(SendModeで一括指定でもよい)
  • 上記二つが出来ない場合は、SetKeyDelay, 0 等としてキー発効をなるべく早く行うか、
#HotkeyModifierTimeout で修飾キー押下のタイムアウト値を長めに設定をする。
なお、他のキー発効を行うツール(クリップボードユーティリティやマウスジェスチャツールなど)が、
発効する修飾キーが原因となる場合もあるが、フックの導入でほぼ解決出来ると思われる。
  • AHK以外が原因の場合:
環境により異なるので何とも言えないが、以下のような環境の場合発生する事が報告されている。
  • Logicool(Logitec)のマウスユーティリティSetPoint(verによっては問題ない事もあるとか)
  • VirtualPC, WMWare, 窓使いの憂鬱 等のキーボードフィルタドライバを用いるアプリケーションを使っている。

特殊なボタンなんだけど、どうやってキーコード調べればいいの?[編集]

キーボードやPCリモコン等のキーリストに載っていない特殊なボタンを調べるには「#InstallKeybdHook」指令を含んだスクリプトを読み込み、タスクトレイアイコンをダブルクリック → メニューの「View」→「Key history」でキー履歴を表示する。(F5キーで最新の情報に更新)
キーコードを調べるソフトを使うのも良いだろう。Keymill
※ キーボードドライバの仕様などにより、キー入力イベントが取得できない場合もある。この場合、ドライバを何とかするかあきらめるしかない。

IME関連[編集]

IMEのOn/Offの切り替えや、状態を得るにはどうすればいいの?[編集]

http://www6.atwiki.jp/eamat/pages/17.html の「IME.ahk」を使いましょう。

IMEが現在文字を入力している、または変換中であるかどうかを得ることはできる?[編集]

↑のIME.ahkで一部可能(IEやFirefox,MS-Wordのようにインライン化しているアプリでは無理)

その他[編集]

「a=abc」と「a:="abc"」って違いがある? / 「If a=1」と「If (a=1)」って違いがある?[編集]

意味としては違いは無い。単体では、コマンド形式(共に前者)の方が「式」形式(同後者)より*少し*速い。
複数条件の場合、IfのネストよりはAND(&&)条件で「式」を並べた方が速い。
が、バッチでかなりの回数(数万↑~)回したりする場合以外は、体感出来るほどの差はない。

テキストエディタでキーワードの色づけなどをしたいんだけど。[編集]

※ 詳細は開発環境の構築

GUI作るのめんどくせ~~[編集]

公式( http://www.autohotkey.com/ )から SmartGUI Creator をDLして使うと楽。

AHKってマルチスレッドじゃないの?[編集]

Q:タイマーMsgBox, WinWait, KeyWaitを使ってるけど思った通りに動かない。

擬似マルチスレッド」です。最後に割り込んだスレッドが終わるまで元スレッドは動きません。
MsgBoxWinWaitKeyWaitProcess,WaitClose などをタイマーで複数動かす時は注意。

MultiThread.gif

AHK、AHKLx86、AHKLx64の共存は出来る?[編集]

それぞれを違うフォルダ(ディレクトリ)にインストールすれば共存できます。
但し、インストーラーを使って最後にインストールしたAutohotkey(Normal or x86 or x64)に対してahkファイルの関連付けが行われますので、
レジストリエディタ(Regedit.exe)や FileTypesMan等のツールを使って関連付を変更してください。
ahkファイルをAHK Normal、ahlファイルをAHKLx86、ah6ファイルをAHKLx64といったように別々の拡張子に関連付けが可能です。
それぞれに関連付けしたファイルに対してドラッグアンドドロップを有効にするにはレジストリの
[HKEY_CLASSES_ROOT\ファイルタイプの名前\ShellEx\DropHandler]の (規定) のデータを {86C86720-42A0-1069-A2E8-08002B30309D} にする。