サンプルコード集

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

ここではスクリプトを書く上で参考になる、または実用的なコードを載せていきましょう。
リファレンス/使用例、各コマンドのページにはそれぞれ例文が記載されており、機能を理解するのに非常に参考になります。

キー割り当て変更[編集]

1つのキーに3種類以上の動作割り当て

1度押し、2度押し、長押しで別の動作を割り当てられる、修飾キーも組み合わせるとさらに増える。
#UseHook	;ホットキーラベルの定義で、常にフックを使用するようにする

vk1Dsc07B::	;無変換
	KeyWait,vk1Dsc07B,T0.3		;0.3秒対象キーが押されたかどうか
	If(ErrorLevel)
	{
		;ここに任意のコマンド 長押し
		KeyWait,vk1Dsc07B
		Return
	}
	KeyWait,vk1Dsc07B,D T0.2	;0.2秒対象キーが押されるのを待つ
	If(ErrorLevel)
	{
		;ここに任意のコマンド 1度押し
		KeyWait,vk1Dsc07B
		Return
	}
	;ここに任意のコマンド 2度押し
	KeyWait,vk1Dsc07B
	Return

キーを押す度に機能を切り替え

vk1Dsc07B::		;無変換
	Flag += 1	;判定用に変数に加算していく
	If Flag = 1
	{
		MsgBox,1回目
		Return
	}
	If Flag = 2
	{
		MsgBox,2回目
		Return
	}
	If Flag = 3
	{
		MsgBox,3回目
		Return
	}
	MsgBox,4回目
	Flag =		;変数を空にして1回目に戻る
	Return

キーボードでマウス操作

コンビネーションキー用
※安価なキーボードの場合、複数キー同時押しに対応していない場合がある。 詳細は、よくある質問と回答
vk1Dsc07B & e::MouseClick,left
vk1Dsc07B & r::MouseClick,right
vk1Dsc07B & w::
vk1Dsc07B & a::
vk1Dsc07B & s::
vk1Dsc07B & d::
	While (GetKeyState("vk1Dsc07B", "P"))			;式を評価した結果が真である間、一連の処理を繰り返し実行する
	{
		MoveX := 0, MoveY := 0
		MoveY += GetKeyState("w", "P") ? -11 : 0	;GetKeyState()?:演算子(条件) (三項演算子) の組み合わせ
		MoveX += GetKeyState("a", "P") ? -11 : 0
		MoveY += GetKeyState("s", "P") ? 11 : 0
		MoveX += GetKeyState("d", "P") ? 11 : 0
		MouseMove, %MoveX%, %MoveY%, 1, R		;マウスカーソルを移動する
		Sleep, 0					;負荷が高い場合は設定を変更 設定できる値は-1、0、10~m秒 詳細はSleep
	}
	Return
キー単独用
e::
	Send,{LButton down}
	KeyWait,e
	Send,{LButton up}
	Return

r::
	Send,{RButton down}
	KeyWait,r
	Send,{RButton up}
	Return

w::
a::
s::
d::
	Loop
	{
		MoveX := 0, MoveY := 0
		MoveY += GetKeyState("w", "P") ? -11 : 0	;GetKeyState()?:演算子(条件) (三項演算子) の組み合わせ
		MoveX += GetKeyState("a", "P") ? -11 : 0
		MoveY += GetKeyState("s", "P") ? 11 : 0
		MoveX += GetKeyState("d", "P") ? 11 : 0
		MouseMove, %MoveX%, %MoveY%, 1, R		;マウスカーソルを移動する
		If (MoveX = 0) & (MoveY = 0)
			Break					;各種Loopを抜ける
		Sleep, 0					;負荷が高い場合は設定を変更 設定できる値は-1、0、10~m秒 詳細はSleep
	}
	Return

vk1Dsc07B::	;サスペンドキー
Suspend
Return

キー連射スクリプト

実用性はともかく、最高速で連射したい人はSendModeを「Input」、間隔を「0」に、恐ろしい速度で連射するので要注意(高CPU負荷)
;---Auto-executeセクション ここから---
;---パフォーマンス設定---
#UseHook		;ホットキーラベルの定義で、常にフックを使用するようにする
#NoEnv			;変数名を解釈するとき、環境変数を無視する
SetBatchLines,-1	;自動的に実行されるSleepの間隔を設定(実行速度とCPU負荷に影響)
SetMouseDelay,-1	;マウス操作関係コマンドで操作の間に挿入される間隔を変更
SetKeyDelay,-1		;SendやControlSendコマンドでの1キーごとに挿入される間隔を変更

;---連射設定---
HotkeyName	= XButton1		;ホットキー
MotionKey	= {LButton}		;連射したいキー 詳細はSend
Interval	= 10			;連射間隔 設定できる値は-1、0、10~m秒 詳細はSleep
Mode		= Event			;Event/Input/Play/InputThenPlay 詳細はSendMode
Limit		= 5000			;連射の上限 高速すぎて暴走した際の保険 詳細はLoop

Hotkey,%HotkeyName%,RapidFire		;ホットキー割り当て
SendMode,%Mode%
KeyCheck := RegExReplace(HotkeyName,"[^A-Z a-z 0-9]|.+ & ","")	;判定用に修飾Key除去、変数に保存
Return
;---Auto-executeセクション ここまで---

RapidFire:
	If KeyCheck in LButton,RButton,MButton,XButton1,XButton2
	{
		Loop,%Limit%
		{
			GetKeyState,State,%KeyCheck%,P	;キーボードやマウスボタンの押し下げ状態を取得
			If State = U
				Break
			Send,%MotionKey%		;キーストロークを発生させる
			Sleep,%Interval%		;入力間隔
		}
	}Else{
		Loop,%Limit%
		{
			GetKeyState,State,%KeyCheck%,P	;キーボードやマウスボタンの押し下げ状態を取得
			If State = U
				Break
			BlockInput,On			;キーボードやマウスなどからの入力を無効化・無効化解除する
			Send,%MotionKey%		;キーストロークを発生させる
			BlockInput,Off
			Sleep,%Interval%		;入力間隔
		}
	}
	KeyWait,%KeyCheck%
	Return

~ESC::	;サスペンドキー
Suspend
Return

特定のウィンドウ(例:ゲーム)アクティブ時にWindowsキー無効

ゲーム中などに誤って押してしまうのを防止
#IfWinActive,適応したいウィンドウを指定	;ホットキーを特定のウィンドウのアクティブのみ有効になるように設定
LWin::Return	;左Windowsキーを無効
#IfWinActive	;以降のホットキー処理条件を「条件無し」に設定 ※他のホットキーを記述する場合は処理条件を元に戻すのを忘れずに

プログラムランチャー[編集]

選択した文章、アイコン名で即座に検索

使用するブラウザ、検索エンジンのURLを各自の好みに変更して下さい。
;---Auto-executeセクション ここから---
GroupAdd,Group1,ahk_class Progman	;グループ化 デスクトップ
GroupAdd,Group1,ahk_class WorkerW	;グループ化 デスクトップ他
GroupAdd,Group1,ahk_class CabinetWClass	;グループ化 エクスプローラー
Return
;---Auto-executeセクション ここまで---

vk1Dsc07B::
ClipSaved := ClipboardAll				;クリップボードの全内容を保存
Send,^c
ClipWait,2						;クリップボードの内容がテキストとして読み取れるものになるのを待つ
IfWinActive,ahk_group Group1				;条件に一致するウィンドウがアクティヴかどうかで分岐
	SplitPath,Clipboard,Clipboard			;ファイルパスやURLをドライブや拡張子などの要素に分解する
Clipboard := RegExReplace(Clipboard, "_", " ")		;_(アンダースコア)が検索の邪魔になる場合が多いので半角スペースに置換
Run,https://www.google.co.jp/search?q=%Clipboard%	;既定のブラウザで検索
;Run, "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" "https://www.google.co.jp/search?q=%Clipboard%"	;ブラウザを指定する場合
Clipboard := ClipSaved					;クリップボードの内容を復元
ClipSaved =						;保存用変数に使ったメモリを開放
Return

音量の制御[編集]

音量の制御(代案)

マスターボリュームを変更、音量を調節するごとにWindows標準の通知音を再生している。
[v1.1.10]でSoundSetなどがWindows Vista以降にもサポートされた。
#Up::			;「音量を上げる」Winキー + ↑
Send,{Volume_Up 1}		;上げる量を増やしたい場合は入力回数を変更
SoundPlay,*64			;ホットキーで音量を調節するごとにWindows標準の通知音を再生
Return

#Down::			;「音量を下げる」Winキー + ↓
Send,{Volume_Down 1}		;下げる量を増やしたい場合は入力回数を変更
SoundPlay,*64			;ホットキーで音量を調節するごとにWindows標準の通知音を再生
Return

#Left::			;「ミュート」Winキー + ←
Send,{Volume_Mute}		;ミュートのON/OFF切り替え
SoundPlay,*64			;ホットキーで音量を調節するごとにWindows標準の通知音を再生
Return

#Right::		;「指定の音量にする」Winキー + →
SetKeyDelay,-1			;切り替え速度の調整、緩やかに変更したい場合は間隔を変更
Send,{Volume_Down 50}		;一旦音量を0に
Send,{Volume_Up 12}		;指定の音量まで上げる
SoundPlay,*64			;ホットキーで音量を調節するごとにWindows標準の通知音を再生
Return

アプリケーションのGUIフロントエンド作成[編集]

アイコンの変更ダイアログ表示

Gui,Add,Button, gButton, アイコンの変更
Gui,Show, h40 w100, TestWindow
Return

Button:
WinGet, hWnd, ID, TestWindow
Index := 0
VarSetCapacity(IconPath, 260)
Dlg := DllCall("Shell32.dll\PickIconDlg", "Uint", hWnd, "str", IconPath, "Uint", 260, "IntP", Index)
If !Dlg
	Return
MsgBox, アイコン番号>%Index%`nファイル名>%IconPath% 
Return

GuiClose:	;スクリプト終了用
ExitApp

通常・サスペンド時のアイコン変更GUI、タスクトレイメニュー変更

GUI表示、タスクトレイメニュー作成・変更、別途INIファイルの読み書きを行うコマンドを付ければ設定の保存も出来る。
;---Auto-executeセクション ここから---
#NoTrayIcon				;スクリプトのタスクトレイアイコンを非表示にする。 デフォルトのアイコンが一瞬表示されるのを防止

;---初期設定---
IconPath = %SystemRoot%\system32\SHELL32.dll
Index	 = 138
IconPath2 = %SystemRoot%\system32\SHELL32.dll
Index2	 = 110

;---タスクトレイ---
Menu,Tray,NoStandard			;初期アイコンメニュー非表示
Menu,Tray,icon,%IconPath%,%Index%,1	;タスクトレイアイコンを変更する。
Menu,Tray,icon				;#NoTrayIcon指令でアイコンが非表示になっているとき、デフォルトのアイコンを表示する。
Menu,Tray,Tip,TestWindow		;マウスを乗せたときに表示されるツールチップ
Menu,Tray,Add,表示/非表示,GUI_OnOff	;項目追加、指定した名前のラベルを割り当てる。
Menu,Tray,Add				;メニューに区切り線を追加する。
Menu,Tray,Add,有効,SuspendOnOff		;項目追加、指定した名前のラベルを割り当てる。
Menu,Tray,Add,無効,SuspendOnOff
Menu,Tray,Add
Menu,Tray,Add,終了,GuiClose		;項目追加、指定した名前のラベルを割り当てる。
Menu,Tray,Default,表示/非表示		;メニューのデフォルト項目を設定する。タスクトレイアイコンをダブルクリックしたときにデフォルト項目が実行される。
Menu,Tray,Check,有効			;項目をチェックが付いた状態にする。

;---GUIウインドウ---
Gui,Add,GroupBox,y+10 w428 h76,アイコンの設定				;GUIウィンドウに複数のコントロールを囲む枠を追加する
Gui,Add,Text,xp+10 yp+21,[有効]						;GUIウィンドウにスタティックテキストを追加する
Gui,Add,GroupBox,x+7 yp-11 w24 h29
Gui,Add,Picture,xp+4 yp+9 w16 h16 vPicture1 Icon%Index%,%IconPath%	;GUIウィンドウに画像を表示するコントロールを追加する
Gui,Add,Edit,x+10 yp-1 w300 r1 ReadOnly vPath1,%IconPath%		;GUIウィンドウにテキスト入力欄を追加する
Gui,Add,Button,x+2 yp-2 gButton1,参照					;GUIウィンドウにボタンコントロールを追加する
Gui,Add,Text,xp-371 y+8,[無効]
Gui,Add,GroupBox,x+7 yp-11 w24 h29
Gui,Add,Picture,xp+4 yp+9 w16 h16 vPicture2 Icon%Index2%,%IconPath2%
Gui,Add,Edit,x+10 yp-1 w300 r1 ReadOnly vPath2,%IconPath2%
Gui,Add,Button,x+2 yp-2 gButton2,参照
Gui,Show,,TestWindow							;GUIウィンドウの表示
Return
;---Auto-executeセクション ここまで---

~Esc::		;サスペンドキー
SuspendOnOff:
	Suspend
	If (A_IsSuspended)			;スクリプトがSuspendコマンドでサスペンドされている場合は「1」= 真(True)になる
	{
		Menu,Tray,icon,%IconPath2%,%Index2%,1	;タスクトレイアイコンを変更する。
		Menu,Tray,Uncheck,有効		;項目をチェックの付いていない状態にする。
		Menu,Tray,Check,無効		;項目をチェックの付いていない状態にする。
		Return
	}
	Menu,Tray,icon,%IconPath%,%Index%,1
	Menu,Tray,Check,有効
	Menu,Tray,Uncheck,無効
	Return

GUI_OnOff:
	IfWinExist,TestWindow			;条件に一致するウィンドウが存在するかどうかで分岐
		Gui,Cancel			;GUIウィンドウを非表示にする
	Else
		Gui,Show			;GUIウィンドウの表示
	Return

Button1:
	WinGet,hWnd,ID,TestWindow
	Index := 0
	VarSetCapacity(IconPath, 260)
	Dlg := DllCall("Shell32.dll\PickIconDlg", "Uint", hWnd, "str", IconPath, "Uint", 260, "IntP", Index)
	If !Dlg
		Return
	Index += 1
	GuiControl,,Picture1,*Icon%Index% %IconPath%
	GuiControl,,Path1,%IconPath%
	Return

Button2:
	WinGet,hWnd,ID,TestWindow
	Index2 := 0
	VarSetCapacity(IconPath2, 260)
	Dlg := DllCall("Shell32.dll\PickIconDlg", "Uint", hWnd, "str", IconPath2, "Uint", 260, "IntP", Index2)
	If !Dlg
		Return
	Index2 += 1
	GuiControl,,Picture2,*Icon%Index2% %IconPath2%
	GuiControl,,Path2,%IconPath2%
	Return

GuiClose:	;ウィンドウを閉じようとしたときに実行される。
ExitApp

マウスジェスチャー[編集]

マウスジェスチャ機能を実現する常駐スクリプト。
AutoHotkeyを流行させるページ管理人によって作成され、現在では有志による派生版である(MouseGestureL.ahk)が実質後継版として公開されている。

  • MouseGesture.ahk (開発終了)
AutoHotkeyを流行らせるページ(跡地)
  • MouseGestureL.ahk (AutoHotkey_L/64-bit対応)
mousegesturel