- Notifications
You must be signed in to change notification settings - Fork924
RobotGo, Go Native cross-platform RPA and GUI automation@vcaesar
License
go-vgo/robotgo
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Golang Desktop Automation. Control the mouse, keyboard, read the screen, process, Window Handle, image and bitmap and global event listener.
RobotGo supports Mac, Windows, and Linux(X11); and robotgo supports arm64 and x86-amd64.
- Docs
- Binding
- Requirements
- Installation
- Update
- Examples
- Type Conversion and keys
- Cross-Compiling
- Authors
- Plans
- Donate
- Contributors
- License
ADB, packaging android adb API.
Robotn, binding JavaScript and other, support more language.
Now, Please make sureGolang, GCC
is installed correctly before installing RobotGo.
GolangGCC
brew install go
Xcode Command Line Tools (And Privacy setting:#277)
xcode-select --install
winget install Golang.go
winget install MartinStorsjo.LLVM-MinGW.UCRT
OrMinGW-w64 (Use recommended) or others Mingwllvm-mingw;
Download the Mingw, then set system environment variablesC:\mingw64\bin
to the Path.Set environment variables to run GCC from command line.
Or the other GCC
(But you should compile the "libpng" with yourself when use thebitmap.)
GCCX11 with the XTest extension (the Xtst library)"Clipboard": xsel xclip"Bitmap": libpng (Just used by the "bitmap".)"Event-Gohook": xcb, xkb, libxkbcommon (Just used by the "hook".)
# sudo apt install golangsudo snap install go --classic# gccsudo apt install gcc libc6-dev# x11sudo apt install libx11-dev xorg-dev libxtst-dev# Clipboardsudo apt install xsel xclip## Bitmapsudo apt install libpng++-dev# GoHooksudo apt install xcb libxcb-xkb-dev x11-xkb-utils libx11-xcb-dev libxkbcommon-x11-dev libxkbcommon-dev
# x11sudo dnf install libXtst-devel# Clipboardsudo dnf install xsel xclip## Bitmapsudo dnf install libpng-devel# GoHooksudo dnf install libxkbcommon-devel libxkbcommon-x11-devel xorg-x11-xkb-utils-devel
With Go module support (Go 1.11+), just import:
import"github.com/go-vgo/robotgo"
Otherwise, to install the robotgo package, run the command:
go get github.com/go-vgo/robotgo
png.h: No such file or directory? Please seeissues/47.
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.
package mainimport ("fmt""github.com/go-vgo/robotgo")funcmain() {robotgo.MouseSleep=300robotgo.Move(100,100)fmt.Println(robotgo.Location())robotgo.Move(100,-200)// multi screen supportedrobotgo.MoveSmooth(120,-150)fmt.Println(robotgo.Location())robotgo.ScrollDir(10,"up")robotgo.ScrollDir(20,"right")robotgo.Scroll(0,-10)robotgo.Scroll(100,0)robotgo.MilliSleep(100)robotgo.ScrollSmooth(-10,6)// robotgo.ScrollRelative(10, -100)robotgo.Move(10,20)robotgo.MoveRelative(0,-10)robotgo.DragSmooth(10,10)robotgo.Click("wheelRight")robotgo.Click("left",true)robotgo.MoveSmooth(100,200,1.0,10.0)robotgo.Toggle("left")robotgo.Toggle("left","up")}
package mainimport ("fmt""github.com/go-vgo/robotgo")funcmain() {robotgo.TypeStr("Hello World")robotgo.TypeStr("だんしゃり",0,1)// robotgo.TypeStr("テストする")robotgo.TypeStr("Hi, Seattle space needle, Golden gate bridge, One world trade center.")robotgo.TypeStr("Hi galaxy, hi stars, hi MT.Rainier, hi sea. こんにちは世界.")robotgo.Sleep(1)// ustr := uint32(robotgo.CharCodeAt("Test", 0))// robotgo.UnicodeType(ustr)robotgo.KeySleep=100robotgo.KeyTap("enter")// robotgo.TypeStr("en")robotgo.KeyTap("i","alt","cmd")arr:= []string{"alt","cmd"}robotgo.KeyTap("i",arr)robotgo.MilliSleep(100)robotgo.KeyToggle("a")robotgo.KeyToggle("a","up")robotgo.WriteAll("Test")text,err:=robotgo.ReadAll()iferr==nil {fmt.Println(text) }}
package mainimport ("fmt""strconv""github.com/go-vgo/robotgo""github.com/vcaesar/imgo")funcmain() {x,y:=robotgo.Location()fmt.Println("pos: ",x,y)color:=robotgo.GetPixelColor(100,200)fmt.Println("color---- ",color)sx,sy:=robotgo.GetScreenSize()fmt.Println("get screen size: ",sx,sy)bit:=robotgo.CaptureScreen(10,10,30,30)deferrobotgo.FreeBitmap(bit)img:=robotgo.ToImage(bit)imgo.Save("test.png",img)num:=robotgo.DisplaysNum()fori:=0;i<num;i++ {robotgo.DisplayID=iimg1,_:=robotgo.CaptureImg()path1:="save_"+strconv.Itoa(i)robotgo.Save(img1,path1+".png")robotgo.SaveJpeg(img1,path1+".jpeg",50)img2,_:=robotgo.CaptureImg(10,10,20,20)robotgo.Save(img2,"test_"+strconv.Itoa(i)+".png")x,y,w,h:=robotgo.GetDisplayBounds(i)img3,err:=robotgo.CaptureImg(x,y,w,h)fmt.Println("Capture error: ",err)robotgo.Save(img3,path1+"_1.png") }}
package mainimport ("fmt""github.com/go-vgo/robotgo""github.com/vcaesar/bitmap")funcmain() {bit:=robotgo.CaptureScreen(10,20,30,40)// use `defer robotgo.FreeBitmap(bit)` to free the bitmapdeferrobotgo.FreeBitmap(bit)fmt.Println("bitmap...",bit)img:=robotgo.ToImage(bit)// robotgo.SavePng(img, "test_1.png")robotgo.Save(img,"test_1.png")bit2:=robotgo.ToCBitmap(robotgo.ImgToBitmap(img))fx,fy:=bitmap.Find(bit2)fmt.Println("FindBitmap------ ",fx,fy)robotgo.Move(fx,fy)arr:=bitmap.FindAll(bit2)fmt.Println("Find all bitmap: ",arr)fx,fy=bitmap.Find(bit)fmt.Println("FindBitmap------ ",fx,fy)bitmap.Save(bit,"test.png")}
package mainimport ("fmt""math/rand""github.com/go-vgo/robotgo""github.com/vcaesar/gcv""github.com/vcaesar/bitmap")funcmain() {opencv()}funcopencv() {name:="test.png"name1:="test_001.png"robotgo.SaveCapture(name1,10,10,30,30)robotgo.SaveCapture(name)fmt.Print("gcv find image: ")fmt.Println(gcv.FindImgFile(name1,name))fmt.Println(gcv.FindAllImgFile(name1,name))bit:=bitmap.Open(name1)deferrobotgo.FreeBitmap(bit)fmt.Print("find bitmap: ")fmt.Println(bitmap.Find(bit))// bit0 := robotgo.CaptureScreen()// img := robotgo.ToImage(bit0)// bit1 := robotgo.CaptureScreen(10, 10, 30, 30)// img1 := robotgo.ToImage(bit1)// defer robotgo.FreeBitmapArr(bit0, bit1)img,_:=robotgo.CaptureImg()img1,_:=robotgo.CaptureImg(10,10,30,30)fmt.Print("gcv find image: ")fmt.Println(gcv.FindImg(img1,img))fmt.Println()res:=gcv.FindAllImg(img1,img)fmt.Println(res[0].TopLeft.Y,res[0].Rects.TopLeft.X,res)x,y:=res[0].TopLeft.X,res[0].TopLeft.Yrobotgo.Move(x,y-rand.Intn(5))robotgo.MilliSleep(100)robotgo.Click()res=gcv.FindAll(img1,img)// use find template and siftfmt.Println("find all: ",res)res1:=gcv.Find(img1,img)fmt.Println("find: ",res1)img2,_,_:=robotgo.DecodeImg("test_001.png")x,y=gcv.FindX(img2,img)fmt.Println(x,y)}
package mainimport ("fmt"// "github.com/go-vgo/robotgo" hook"github.com/robotn/gohook")funcmain() {add()low()event()}funcadd() {fmt.Println("--- Please press ctrl + shift + q to stop hook ---")hook.Register(hook.KeyDown, []string{"q","ctrl","shift"},func(e hook.Event) {fmt.Println("ctrl-shift-q")hook.End() })fmt.Println("--- Please press w---")hook.Register(hook.KeyDown, []string{"w"},func(e hook.Event) {fmt.Println("w") })s:=hook.Start()<-hook.Process(s)}funclow() {evChan:=hook.Start()deferhook.End()forev:=rangeevChan {fmt.Println("hook: ",ev)}}funcevent() {ok:=hook.AddEvents("q","ctrl","shift")ifok {fmt.Println("add events...") }keve:=hook.AddEvent("k")ifkeve {fmt.Println("you press... ","k") }mleft:=hook.AddEvent("mleft")ifmleft {fmt.Println("you press... ","mouse left button") }}
package mainimport ("fmt""github.com/go-vgo/robotgo")funcmain() {fpid,err:=robotgo.FindIds("Google")iferr==nil {fmt.Println("pids... ",fpid)iflen(fpid)>0 {robotgo.TypeStr("Hi galaxy!",fpid[0])robotgo.KeyTap("a",fpid[0],"cmd")robotgo.KeyToggle("a",fpid[0])robotgo.KeyToggle("a",fpid[0],"up")robotgo.ActivePid(fpid[0])robotgo.Kill(fpid[0]) } }robotgo.ActiveName("chrome")isExist,err:=robotgo.PidExists(100)iferr==nil&&isExist {fmt.Println("pid exists is",isExist)robotgo.Kill(100) }abool:=robotgo.Alert("test","robotgo")ifabool {fmt.Println("ok@@@ ","ok") }title:=robotgo.GetTitle()fmt.Println("title@@@ ",title)}
- Refactor some C code to Go (such as x11, windows)
- Better multiscreen support
- Wayland support
- Update Window Handle
- Try to support Android and IOS
- Seecontributors page for full list of contributors.
- SeeContribution Guidelines.
Robotgo is primarily distributed under the terms of "the Apache License (Version 2.0)", with portions covered by various BSD-like licenses.
About
RobotGo, Go Native cross-platform RPA and GUI automation@vcaesar
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.