BlueStacksでゲームやSNS、ポイ活などのアプリを動かしていると、
毎日のポチポチ操作が面倒くさい・・・
寝ている間に勝手に操作してくれないかな・・・
なんて思うことが多いですよね
なにか方法がないかな~?と調べていたところ、AutoHotkeyというアプリケーションを見つけて、すごい便利だったので紹介しようと思います。
AutoHotkeyとは?

AutoHotkey(オートホットキー)は、Windowsの操作を自動化できる無料のスクリプト言語です。
キーボードやマウス操作を記録・再生したり、ボタン1つで繰り返し作業を効率化できます。
プログラミング初心者でも扱いやすく、PC作業の時短ツールとして人気です。
今回はBlueStacksでアプリケーションのクリック操作を自動化してみたので、そのやり方とサンプルコードを紹介します。
どこの国、会社が運営している?
AutoHotkeyはアメリカの開発者 Chris Mallett 氏によって2003年に開発されました。
現在は公式サイト(autohotkey.com)を通じてオープンソースとして有志によってメンテナンス・発展が続けられています。企業ではなくコミュニティ主体のプロジェクトです。
使用するプログラミング言語
AutoHotkey(AHK)は、独自のスクリプト言語(AutoHotkey言語)を使用しています。
これは他の一般的なプログラミング言語(PythonやJavaScriptなど)とは異なり、Windowsの自動化に特化して設計された軽量スクリプト言語です。
独自の言語とはいえ、他のプログラミング言語に比べると、コードの書き方がとても簡単なので既にJavascriptやPythonを使用したことがある人であればそこまで難しく感じることもないと思います。
AutoHotkeyのインストール方法
AutoHotkeyの概要がわかったところで、早速インストールしていきましょう。
まずは公式サイトにアクセスし、アプリケーションをダウンロードします。
今回は最新バージョンのV2.0をダウンロードします。
バージョンに関する注意点
AutohotkeyはV1.1とV2.0で現在2種類のバージョンがあります。
最新のAutoHotkey v2は、旧バージョン(v1.1)に比べて構文が大きく刷新され、より厳格で読みやすいコード記述が可能になりました。
関数や変数の扱いが明確になり、エラーも事前に防ぎやすくなった反面、v1とは互換性がなく、スクリプトは書き換えが必要です。今後はv2が主流となる見込みです。
代表的なAutoHotkey v1.1 と v2 のコード比較
| 操作内容 | v1.1 の書き方 | v2 の書き方 |
|---|---|---|
| 変数代入 | x = 100 | x := 100 |
| メッセージ表示 | MsgBox, Hello | MsgBox(“Hello”) |
| 条件分岐 | if x = 1 | if x = 1 |
| 文字列結合 | MsgBox, Hello %name%! | MsgBox(“Hello ” . name . “!”) |
| ランダム値取得 | Random, x, 1, 10 | x := Random(1, 10) |
| ホットキー定義 | F1:: MsgBox, Hello | F1:: MsgBox(“Hello”) |
| ラベル・Goto | Goto, ラベル名 | 非推奨(関数化が基本) |
| スクリプト先頭 | (特に指定なし) | #Requires AutoHotkey v2.0 |
| グローバル変数 | Global x | global x(関数内に明記) |
| 関数定義 | Returnを使う従来構文 | ()=> ラムダ関数や明示的な引数が必須 |
今回紹介するサンプルコードはV2.0での使用を想定したコードになりますので、既にV1.1を使用している方は、そのまま使用できないことがあるので注意して下さい。(これから初めて使う人はV2.0を選択しておけば大丈夫です。)
ダウンロードしたら早速インストールしていきましょう。

アプリケーションのインストールは1ステップですぐ終わります。
インストール先を確認し、問題がなければ「Install」をクリックしましょう。
完了したら、次は早速自動化スクリプトを作っていきます。
今回作成するスクリプト
BlueStacksの操作を自動化するに当たり、今回2種類のスクリプトを作る必要があります。
1.クリックする場所(X、Y座標)を調べるためのスクリプト
特定の画像やリンク、ボタン位置を指定するためには、画面上の座標情報が必要になるので、今回一番重要な、「どこをクリックするか」を調べるためのスクリプトをまず作成します。
新規作成したらファイル名を入れて保存します。
ディレクトリ内に「location.ahk」といった感じでプログラムファイルができていれば成功です。
作成したらエディタでahkファイルを開き、プログラムを書いていきます。
以下のコードをコピペして、保存しましょう。
<if
保存が完了したら、ahkファイルをダブルクリックまたはEnterキー(エディタで開かない)で開きましょう。
プログラムを開くとマウスカーソルの下に座標が表示されます。
後ほど作る自動化プログラムの座標はこの数値を入れますので、しっかり場所を確認してメモしておきましょう。
位置座標確認の注意点
このスクリプトで確認できるのは、各アプリケーションごとの位置座標になります。
例えばデスクトップを選択していれば、デスクトップ全体の座標、ブラウザを選択していれば、ブラウザアプリの範囲内の座標、BlueStacksを選択していれば、BlueStacks画面範囲内の座標といった感じです。
解像度やサイズによって数値が変わったり、複数モニターを接続している場合は、位置情報の数値が変わることがありますので、必ずBlueStacksアプリを選択した状態で位置情報を確認しましょう。
画面サイズを固定しておくと、アプリを移動した際にサイズ変更による位置情報ズレが起きなくなるのでおすすめです。(サイズ変えてしまうと、プログラムの座標も変える必要があるためです。)
2.自動化スクリプト
位置座標を確認できたら、次はいよいよ自動化スクリプトの作成です。
新しくahkファイルを作成します。ファイル名は自分がわかりやすいもので大丈夫です。
自動化する内容
今回自動化する内容としては
ゲームアプリのバトルイベント周回クリック操作を想定した一連の動きを例にしていきます。
- クエスト出発ボタンを押す(画面クリック1回目)
- 戦闘アニメーションが始まる
- 戦闘結果画面へ遷移する(画面クリック2回目)
- 結果画面が表示される
- 次へボタンを押す(画面クリック3回目)
- 報酬獲得画面が表示される
- 再出発ボタンを押す(画面クリック4回目)
- クエスト出発画面に戻る
- →①へループする
至ってシンプルなクリック操作ですが、ゲームはもちろん、SNSやビジネスツール、ポイ活アプリなど汎用性は物凄く高いので、是非試してみて下さい。
自動化ツールを使用する際の注意点
特にゲームアプリ等に多いですが、アプリケーションによっては自動化操作を利用規約で禁止している場合があり、アカウント停止や利用制限といった措置が取られることもありますので、ご利用はあくまでも自己責任でお願いします。
自動化する際にやっていること
今回の自動化プログラムの処理の種類は主に以下の5つです。
特定の画面箇所をクリックする
まずは何と言っても一番重要なアクションとなるクリック操作です。
Click関数を以下のように記述します。
Click x, y
とってもシンプルですね。
変数を代入する場合はこのようになります。
Click x + "変数", y + "変数"
クリックする場所を座標指定する
小さなリンクやボタンをピンポイントにクリックするためには座標指定が必要になります。
モニター上の座標を指定することで、PC画面上の任意の位置をクリックするように指定することができます。
PC画面上の座標を確認する場合は、random関数を使います。
Random(-n, n)
変数を宣言して使用する場合はこのように書きます。
"変数" := Random(-n, n)
次のクリック操作までの時間を指定する
最初のクリックから次のクリック操作まで少し時間が空く場合は、その間隔を秒数指定することができます。
秒数指定はSleep関数を使用します。
Sleep 1000
指定する単位は特に記述せず、数値のみを指定します。
1秒=1000という単位になります。
なのでこの場合は次の操作までに1秒、間を空けることになります。
クリック操作する場所と時間にランダム性をもたせる
自動操作を使用するアプリ側から検知されにくくするために、ある程度操作にランダム性をもたせることができます。
1回のループで1つのアクションの感覚や、クリックする座標位置を微妙にずらすことで、あたかも機械ではなく人間が操作しているような動きを演出することができます。
連続使用時間や使用するアプリによっては、完全に自動操作を検知されなくなるわけではありませんが、この処理をしておくと多少効果があります。
先程のクリック操作にランダム性をもたせる場合はこんな感じになります。
location := Random(-5, 5) Click x + location", y + "location
この場合は、X座標、Y座標の前後5pxをクリックするコードになります。
次のクリックまでの時間指定の場合はこのような感じです。
time := Random(1000, 2000) Sleep time
こちらは次のクリックまでの時間を1秒~2秒の間で空けるコードになります。
変数を使用する場合は、必ず先に変数を宣言して、関数を記述しましょう。
クリックログを取得する
ゲームやアプリの操作を自動化したいとき、「どこをいつクリックしたか」を記録しておくと、動作確認や調整がしやすくなります。
AutoHotkey(v2)を使えば、クリックの実行座標やタイミングを ログファイルに自動保存することが可能です。
-
F1キーで自動クリックのループを開始
-
F2キーでループ停止、F3キーでスクリプト終了
-
各クリック操作の実行座標と時間をログ出力(デスクトップに
autoclick_log.txtを生成)
Log(msg) {
try {
now := FormatTime(, "yyyy-MM-dd HH:mm:ss")
logPath := A_Desktop "\\autoclick_log.txt"
FileAppend(now . ": " . msg . "`n", logPath)
} catch {
MsgBox("ログ書き込み失敗")
}
}
-
Log(msg)は、引数として渡されたメッセージをデスクトップのautoclick_log.txtに追記していく関数です。 -
FormatTime()で現在時刻を取得し、ログにタイムスタンプ付きで記録。 -
FileAppend()によりファイルに1行ずつ追記され、毎回上書きされることはありません。 -
万が一ログ保存に失敗した場合には
MsgBoxでエラー通知も出してくれます。
Log("Click 出発ボタン at " . (250 + dx1) . ", " . (785 + dy1))
このように、Click の直前でクリック位置をログに記録しておくことで、「どこを押したか」「いつ押したか」があとで確認できます。
開始ボタン、停止ボタン、終了ボタンを設定する
自動化プログラムを開始、停止、終了するボタンを設定できます。
自動化している途中で他の作業をしたり、終了したくなったときに、ボタン一つで停止、再開ができます。
F1:: {
global running, busy
if !running {
running := true
busy := false
SetTimer(RunLoop, 100)
}
}
F1キーを押すと、クリックループを100ミリ秒ごとに実行する SetTimer が起動します。
すでに動作中であれば無視されるため、誤動作も防げます。
running と busy で状態管理しているのがポイントです。
F3:: {
global running, busy
running := false
busy := false
SetTimer(RunLoop, 0)
}
F3キーを押すと、ループ処理が即座に停止します。
SetTimer を0に設定することで RunLoop の実行も完全に止まり、クリック操作が無効化されます。
F1と組み合わせてON/OFFを切り替え可能です。
F5:: {
ExitApp()
}
F5キーを押すとスクリプト自体を終了します。
タスクトレイからも消えるため、完全に終了したいときに使います。
動作中にうまく停止できないときの緊急用としても便利です。
私の場合、普段F2、F4を頻繁に使用するので、あまり使わないF1、F3、F5キーをそれぞれ設定しましたが、このボタン配置は自由に変更できるので、使いやすいキーに設定するのがおすすめです。
サンプルコード
今回の一連の自動クリックスクリプトのサンプルを用意しました。
ゲームによってはオレンジ色の数値部分を変えればそのまま使えたり、ちょっとだけクリック回数を増やすだけで、代用できると思いますので、これをベースに自動化スクリプトを作ってみて下さい。
終わりに
いかがでしたか?
今回は、AutoHotkeyを使ってBlueStacks上のアプリ操作を自動化する方法についてご紹介しました。
面倒なポチポチ作業を自動化するだけで、時間もストレスもぐっと減らせます。
ゲームの周回はもちろん、ポイントアプリや単純作業系アプリにも応用できるので、日々の作業効率化に大いに役立つはずです。
ただし、自動化の使用についてはアプリの規約をよく確認し、自己責任で安全に運用しましょう。
今後も便利なスクリプトや活用例を紹介していく予定ですので、ぜひブックマーク&シェアしてもらえると嬉しいです!