Elsaの技術日記(徒然なるままに)

主に自分で作ったアプリとかの報告・日記を記載

MENU

go言語で自動化してみる

先日よりPythonを用いてキーボードやマウス入力を自動化の方法をまとめてきました。
elsammit-beginnerblg.hatenablog.com
elsammit-beginnerblg.hatenablog.com
elsammit-beginnerblg.hatenablog.com

実際に使って見て便利な点が多いのですが、、、
Python以外にも自動化させる方法はないのか??
と疑問を持ち、他の言語で自動化する方法について調べてみました。

そこで、go言語であれば自動化を行うためのライブラリが存在することを発見!!
試しに使ってみることにしました!!



■ライブラリの紹介

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

■環境構築

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

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

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

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

go get github.com/lxn/win

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

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

後は、WindowsLinuxどちらも

go get github.com/go-vgo/robotgo

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

■マウス操作自動化

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

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)
}
  robotgo.ScrollMouse(10, "up")
  robotgo.Scroll(100, 200)

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

robotgo.MoveMouse(10, 10)

でマウスを移動させ、

robotgo.MouseClick("left", true)

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

■キーボード入力

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

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

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

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. こんにちは世界.")

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

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

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

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

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

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

■最後に

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

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