RobotGo, Go Native cross-platform GUI automation
C Objective-C C++ Go
Clone or download
Latest commit 245f48f Aug 15, 2018
Permalink
Failed to load latest commit information.
.circleci Simplify linux dependency installation commands Jul 6, 2018
.github update issue template more obvious Aug 11, 2018
base update var code style Jul 29, 2018
bitmap just free internal bitmap and add bitmapStr example Jul 28, 2018
cdeps use 10.10 to compile .a verify multi os Aug 7, 2018
clipboard update code style and move scale to win_sys Aug 14, 2018
docs Update CHANGELOG.md Aug 8, 2018
event move hook to cdeps Aug 3, 2018
examples Update README.md [add freeBitmap example] Aug 3, 2018
key update type string fixed #155 Aug 14, 2018
mouse update code style Jul 7, 2018
screen update code style fix non-standard code Jul 7, 2018
test update and unify copyright year Feb 1, 2018
vendor update pkg to newest Jul 29, 2018
window update code style and move scale to win_sys Aug 14, 2018
.gitignore Update .gitignore Jul 28, 2018
.travis.yml update Travis ci Jun 16, 2018
CONTRIBUTING.md update and unify copyright year Feb 1, 2018
Gopkg.lock update pkg to newest Jul 29, 2018
Gopkg.toml try to add Windows partial methods and update packages Jul 4, 2018
LICENSE Update LICENSE Sep 18, 2017
README.md Update README.md Aug 15, 2018
README_zh.md Update README.md Aug 15, 2018
appveyor.yml update robotgo ci to 1.10.3 Jun 8, 2018
robotgo.go Update README.md Aug 15, 2018
robotgo_mac_win.go add internalGetBounds and x11 getXidFromPid to GetBounds Aug 13, 2018
robotgo_ocr.go add simple ocr support Aug 8, 2018
robotgo_unix.go fix return error Aug 13, 2018
robotgo_win.go add the head copyright Jul 29, 2018

README.md

Robotgo

Build Status CircleCI Status Appveyor Go Report Card GoDoc Release Join the chat at https://gitter.im/go-vgo/robotgo

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

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

This is a work in progress.

简体中文

Contents

Docs

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-get install gcc libc6-dev

sudo apt-get install libx11-dev xorg-dev libxtst-dev libpng++-dev   

sudo apt-get install xcb libxcb-xkb-dev x11-xkb-utils libx11-xcb-dev libxkbcommon-x11-dev
sudo apt-get install libxkbcommon-dev

sudo apt-get 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.

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.TypeString("Hello World")
  robotgo.TypeString("测试")
  robotgo.TypeStr("测试")
  ustr := uint32(robotgo.CharCodeAt("测试", 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"
)

func main() {
  keve := robotgo.AddEvent("k")
  if keve == 0 {
    fmt.Println("you press...", "k")
  }

  mleft := robotgo.AddEvent("mleft")
  if mleft == 0 {
    fmt.Println("you press...", "mouse left button")
  }
} 

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) > 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("ok@@@", "ok")
  }

  title := robotgo.GetTitle()
  fmt.Println("title@@@", title)
} 

CrossCompiling

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

Ohter 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

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 vzvway@gmail.com

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.