Golang自动化实现

私(わたし)が年(とし)をとっても仲良(なかよ)くしてください。

ライブラリの紹介

今回見つけたライブラリは、
Robotgo
です。
Robotgoは、
Go言語でのデスクトップオートメーション。マウス、キーボード、ビットマップ、
画像を制御し、画面、プロセス、ウィンドウハンドル、グローバルイベントリスナーを読み取りが行える。
ライブラリです。
対応するOSは、
Windows、Mac、Linux
のようで、64bit/32bit両方に対応しています。

環境構築

今回、Windows、Linuxで動かしてみました。
それぞれの環境構築手順をまとめておきたいと思います。
なお、Windows、Linuxの詳細ですが、
Windows:Windows 10
Linux:Ubuntu20.04
を用いてみました。

まず、Robotgoをインストールする前の下準備をまとめておきます。

最初にWindowsの環境構築手順に関してまとめたいと思います。
といってもWIndowの場合、
MinGW-w64
をインストールするのみです。
すでにインストール済みでしたら他の作業は不要です。
インストール手順は下記にまとまっていますのでこちらをご参考にしてください。
といっても、インストーラを用いてインストールしてパスを通すのみなので簡単。
https://www.javadrive.jp/cstart/install/index6.html

後、もしかしたら下記が必要になるかもです。
(自分は必要でした)

1
go get github.com/lxn/win

次にLinux。
今回Ubuntuを用いたのでUbuntuの手順をまとめます。
下記ライブラリをapt-get する。以上です。

1
2
3
4
5
sudo apt install gcc libc6-dev
sudo apt install libx11-dev xorg-dev libxtst-dev libpng ++-dev
sudo apt install xcb libxcb-xkb-dev x11-xkb-utils libx11-xcb-dev libxkbcommon-x11-dev
sudo apt install libxkbcommon-dev
sudo apt install xsel xclip

後は、Windows、Linuxどちらも

1
go get github.com/go-vgo/robotgo

でインストールするのみです。

マウス操作自動化

では早速、マウス操作の自動化コードを作成してみます。
といっても今回は公式がご紹介しているサンプルを載せておきます。
公式:https://github.com/go-vgo/robotgo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package main

import (
"github.com/go-vgo/robotgo"
)

func main() {
robotgo.ScrollMouse(10, "up")
robotgo.Scroll(100, 200)

robotgo.MoveMouse(10, 10)
robotgo.Drag(10, 10)

robotgo.MouseClick("left", true)
robotgo.MoveMouseSmooth(100, 200, 1.0, 100.0)
}
1
2
robotgo.ScrollMouse(10, "up")
robotgo.Scroll(100, 200)

でマウスのスクロールを行い、

1
robotgo.MoveMouse(10, 10)

でマウスを移動させ、

1
robotgo.MouseClick("left", true)

でマウスの左クリックを押下する。

キーボード入力

次はキーボード入力です。
こちらは公式で展開しているサンプルから少し変更を行い、

1
Hello WorldだんしゃりHi galaxy. こんにちは世界.

という文字を入力後、テキストファイルを保存する処理になります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
func main() {
robotgo.TypeStr("Hello World")
robotgo.TypeStr("だんしゃり", 1.0)

robotgo.TypeStr("Hi galaxy. こんにちは世界.")
robotgo.Sleep(1)

robotgo.KeyTap("enter")
robotgo.KeyTap("s", "ctrl")

time.Sleep(1 * time.Second)

robotgo.TypeStr("こんにちは世界.")

robotgo.KeyTap("enter")

robotgo.WriteAll("Test")
text, err := robotgo.ReadAll()
if err == nil {
fmt.Println(text)
}
}
robotgo.TypeStr("Hello World")
robotgo.TypeStr("だんしゃり", 1.0)

robotgo.TypeStr("Hi galaxy. こんにちは世界.")

でキーボードによる文字入力を行い、

1
2
robotgo.KeyTap("enter")
robotgo.KeyTap("s", "ctrl")

で特定のキーボードをタップする形になります。

PyAutoGuiで言うところの、
pyautogui.write関数が、robotgo.TypeStr関数に該当し、
pyautogui.press関数が、robotgo.KeyTapに該当します。

1
2
robotgo.WriteAll("Test")
text, err := robotgo.ReadAll()

こちらは内部メモリへの文字列書き込みと読み出しを行う処理のようです。

■最後に

今回はgo言語で自動化が行える、Robotgoに関する環境構築や簡単なキーボード・マウス操作に関してまとめてみました。
ちょっと長くなってきたので今回はここまでとします。

まだ画像認識やイベント操作などが書けていないので、次回まとめたいと思います。

https://elsammit-beginnerblg.hatenablog.com/entry/2021/10/03/095838