Golang 跨平台自动化系统,控制键盘、鼠标、位图、图像、读取屏幕,进程、窗口句柄以及全局事件监听。

vcaesar d7bb4311d8 update appveyor ci 6 年之前
.circleci 35f5016d33 update appveyor, circle and dockerfile 6 年之前
.github ebee256da1 Update version and add CODEOWNERS 6 年之前
base 95b90c19c9 Add mac deps and Update README.md, png_io, cgo link 6 年之前
bitmap 8b1854cac7 update code style 6 年之前
cdeps 95b90c19c9 Add mac deps and Update README.md, png_io, cgo link 6 年之前
clipboard 83dcf38788 fix clipboard golint 6 年之前
docs b8dcaaf0ad Update CHANGELOG.md 6 年之前
event 9503875953 add esc support fix #105 6 年之前
examples 0b6a81e6f0 update godoc and examples and fix 6 年之前
key e0a5aabf28 fix mac input method keytap not work 6 年之前
mouse 3cb987ceb2 fix XFlush wait for events flushing 6 年之前
screen 15233120e0 update code style 6 年之前
test 5b62cac9bc update and unify copyright year 6 年之前
vendor 4c114b0232 add golang bmp pkg 6 年之前
window 8b1854cac7 update code style 6 年之前
.gitignore a7f2f933e1 Add SaveCapture, remove robot and add SaveCapture examples 6 年之前
.travis.yml 600734c884 remove travis ci 1.8.x 6 年之前
CONTRIBUTING.md 5b62cac9bc update and unify copyright year 6 年之前
LICENSE 6c790bdaf4 Update LICENSE 7 年之前
README.md 3c4a887903 Update Kill, README.md and examples 6 年之前
README_zh.md 3c4a887903 Update Kill, README.md and examples 6 年之前
appveyor.yml d7bb4311d8 update appveyor ci 6 年之前
robotgo.go 15afbb6132 add func microsleep and update 6 年之前

README.md

Robotgo

Build Status CircleCI Status Appveyor Go Report Card GoDoc 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).

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
    
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
sudo apt-get install xorg-dev
sudo apt-get install 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
sudo apt-get install 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
sudo dnf install 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  

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)
  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)
} 

Plans

  • Update Find an image on screen, read pixels from an image
  • Update Window Handle
  • Linux support UTF-8
  • 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.