You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
vcaesar 661c80150c update appveyor to go1.12.9 5 days ago
.circleci update dockerfile and appveyor to go1.12.7 1 month ago
.github update issue template.md 9 months ago
base add ToBitmapBytes func (#204) 5 months ago
bitmap update bitmap_save return code 7 months ago
cdeps update vendor pkg to newest 11 months ago
clipboard update clipboard error hand Fixed #212 3 months ago
docs Update CHANGELOG.md 5 months ago
event update head hint 11 months ago
examples Update example README.md 1 month ago
key add key_Toggles() c function 4 months ago
mouse update code style and fixed #endif error 7 months ago
screen update code style 1 month ago
test update and unify copyright year 1 year ago
vendor update and tidy go mod 3 weeks ago
window update code style 1 month ago
.gitignore Update .gitignore 8 months ago
.travis.yml update CI add go1.12.x support 5 months ago
CONTRIBUTING.md update and unify copyright year 1 year ago
LICENSE Update LICENSE 1 year ago
README.md Update README.md 1 month ago
README_zh.md Update README.md 1 month ago
appveyor.yml update appveyor to go1.12.9 5 days ago
go.mod update and tidy go mod 3 weeks ago
go.sum update and tidy go mod 3 weeks ago
keycode.go export hook keycode and add godoc 2 months ago
robotgo.go update code remove duplicate code and update godoc 2 weeks ago
robotgo_adb.go add android null file [wait push] 5 months ago
robotgo_android.go add android null file [wait push] 5 months ago
robotgo_mac_win.go optimize get title code, Fixed #165 and typo 5 months ago
robotgo_ocr.go update head hint 11 months ago
robotgo_test.go update appveyor and test code 4 months ago
robotgo_unix.go update unix get title type 5 months ago
robotgo_win.go add the head copyright 1 year ago

README.md

Robotgo

Build Status CircleCI Status Appveyor Go Report Card GoDoc GitHub release

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-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, 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("だんしゃり")
  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"
)

func main() {
  ok := robotgo.AddEvents("q", "ctrl", "shift")
  if ok {
    fmt.Println("add events...")
  }

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

  mleft := robotgo.AddEvent("mleft")
  if mleft {
    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

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

Authors

Plans

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

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.