robotgo

by go-vgo

go-vgo /robotgo

RobotGo, Go Native cross-platform GUI automation @vcaesar

6.1K Stars 556 Forks Last release: 9 days ago (v0.90.3) Apache License 2.0 1.1K Commits 20 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

Robotgo

Build Status CircleCI Status Build Status Appveyor Go Report Card GoDoc GitHub release Join the chat at https://gitter.im/go-vgo/robotgo <!-- Release --> <!-- Releases -->

Golang Desktop Automation. Control the mouse, keyboard, bitmap, read the screen, Window Handle and global event listener.

RobotGo supports Mac, Windows, and Linux(X11).

Chinese Simplified

Contents

Docs

Binding:

Robotn, binding JavaScript and other, support more language.

Requirements:

Now, Please make sure

Golang, GCC
is installed correctly before installing RobotGo.

ALL:

Golang

GCC

For Mac OS X:

Xcode Command Line Tools

For Windows:

MinGW-w64 (Use recommended) or other GCC

For everything else:

GCC, libpng

X11 with the XTest extension (also known as the Xtst library)

Event:

xcb, xkb, libxkbcommon

Ubuntu:
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

Fedora:

sudo dnf install libxkbcommon-devel libXtst-devel libxkbcommon-x11-devel xorg-x11-xkb-utils-devel

sudo dnf install libpng-devel

sudo dnf install xsel xclip

Installation:

go get github.com/go-vgo/robotgo

It's that easy!

png.h: No such file or directory? Please see issues/47.

Update:

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

Note go1.10.x C file compilation cache problem, golang #24355.

go mod vendor
problem, golang #26366.

Examples:

Mouse

package main

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

func main() { robotgo.ScrollMouse(10, "up") robotgo.MouseClick("left", true) robotgo.MoveMouseSmooth(100, 200, 1.0, 100.0) }

Keyboard

package main

import ( "fmt"

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

func main() { robotgo.TypeStr("Hello World") robotgo.TypeStr("だんしゃり", 1.0) // robotgo.TypeString("テストする")

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

// ustr := uint32(robotgo.CharCodeAt("Test", 0)) // robotgo.UnicodeType(ustr)

robotgo.KeyTap("enter") // robotgo.TypeString("en") robotgo.KeyTap("i", "alt", "command")

arr := []string{"alt", "command"} robotgo.KeyTap("i", arr)

robotgo.WriteAll("Test") text, err := robotgo.ReadAll() if err == nil { fmt.Println(text) } }

Screen

package main

import ( "fmt"

"github.com/go-vgo/robotgo"

)

func main() { x, y := robotgo.GetMousePos() fmt.Println("pos: ", x, y)

color := robotgo.GetPixelColor(100, 200) fmt.Println("color---- ", color) }

Bitmap

package main

import ( "fmt"

"github.com/go-vgo/robotgo"

)

func main() { bitmap := robotgo.CaptureScreen(10, 20, 30, 40) // use defer robotgo.FreeBitmap(bit) to free the bitmap defer robotgo.FreeBitmap(bitmap)

fmt.Println("...", bitmap)

fx, fy := robotgo.FindBitmap(bitmap) fmt.Println("FindBitmap------ ", fx, fy)

robotgo.SaveBitmap(bitmap, "test.png") }

Event

package main

import ( "fmt"

"github.com/go-vgo/robotgo" hook "github.com/robotn/gohook" )

func main() { add() low() event() }

func add() { fmt.Println("--- Please press ctrl + shift + q to stop hook ---") robotgo.EventHook(hook.KeyDown, []string{"q", "ctrl", "shift"}, func(e hook.Event) { fmt.Println("ctrl-shift-q") robotgo.EventEnd() })

fmt.Println("--- Please press w---") robotgo.EventHook(hook.KeyDown, []string{"w"}, func(e hook.Event) { fmt.Println("w") })

s := robotgo.EventStart()

Window

package main

import ( "fmt"

"github.com/go-vgo/robotgo"

)

func main() { fpid, err := robotgo.FindIds("Google") if err == nil { fmt.Println("pids... ", fpid)

if len(fpid) &gt; 0 {
  robotgo.ActivePID(fpid[0])

  robotgo.Kill(fpid[0])
}

}

robotgo.ActiveName("chrome")

isExist, err := robotgo.PidExists(100) if err == nil && isExist { fmt.Println("pid exists is", isExist)

robotgo.Kill(100)

}

abool := robotgo.ShowAlert("test", "robotgo") if abool == 0 { fmt.Println("[email protected]@@ ", "ok") }

title := robotgo.GetTitle() fmt.Println("[email protected]@@ ", title) }

CrossCompiling

Windows64 to win32
SET CGO_ENABLED=1
SET GOARCH=386
go build main.go

Other to windows

GOOS=windows GOARCH=amd64 CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ go build -x ./
// CC=mingw-w64\x86_64-7.2.0-win32-seh-rt_v5-rev1\mingw64\bin\gcc.exe
// CXX=mingw-w64\x86_64-7.2.0-win32-seh-rt_v5-rev1\mingw64\bin\g++.exe

Some discussions and questions, please see issues/228, issues/143.

Authors

Plans

  • Update Find an image on screen, read pixels from an image
  • Update Window Handle
  • Try support Android, maybe support IOS

Donate

Supporting robotgo, buy me a coffee.

Paypal

Donate money by paypal to my account [email protected]

Contributors

License

Robotgo is primarily distributed under the terms of both the MIT license and the Apache License (Version 2.0), with portions covered by various BSD-like licenses.

See LICENSE-APACHE, LICENSE-MIT.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.