골랑 데스크탑 자동화. 마우스, 키보드를 제어하고 화면, 프로세스, 창 핸들, 이미지 및 비트 맵 및 글로벌 이벤트 리스너를 읽으십시오.
Robotgo는 Mac, Windows 및 Linux (x11)를 지원합니다. Robotgo는 ARM64 및 X86-AMD64를 지원합니다.
ADB, 포장 안드로이드 ADB API.
Robotn, JavaScript 및 기타 구속력있는 언어는 더 많은 언어를 지원합니다.
이제 Robotgo를 설치하기 전에 Golang, GCC 올바르게 설치되어 있는지 확인하십시오.
Golang
GCC
Xcode 명령 줄 도구 (및 개인 정보 설정 : #277)
xcode-select --install
mingw-w64 (권장 사용) 또는 기타 mingw llvm-mingw;
mingw를 다운로드 한 다음 시스템 환경 변수 C:mingw64bin 경로로 설정하십시오. 명령 줄에서 GCC를 실행하도록 환경 변수를 설정하십시오.
Or the other GCC (그러나 비트 맵을 사용할 때 "libpng"를 직접 컴파일해야합니다.)
GCC
X11 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".)
# gcc
sudo apt install gcc libc6-dev
# x11
sudo apt install libx11-dev xorg-dev libxtst-dev
# Clipboard
sudo apt install xsel xclip
#
# Bitmap
sudo apt install libpng++-dev
# GoHook
sudo apt install xcb libxcb-xkb-dev x11-xkb-utils libx11-xcb-dev libxkbcommon-x11-dev libxkbcommon-dev
# x11
sudo dnf install libXtst-devel
# Clipboard
sudo dnf install xsel xclip
#
# Bitmap
sudo dnf install libpng-devel
# GoHook
sudo dnf install libxkbcommon-devel libxkbcommon-x11-devel xorg-x11-xkb-utils-devel
GO 모듈 지원 (GO 1.11+)을 사용하면 가져 오기 :
import "github.com/go-vgo/robotgo"그렇지 않으면 Robotgo 패키지를 설치하려면 명령을 실행하십시오.
go get github.com/go-vgo/robotgo
png.h : 그러한 파일이나 디렉토리가 없습니까? 문제/47을 참조하십시오.
go get -u github.com/go-vgo/robotgo
참고 Go1.10.x C 파일 컴파일 캐시 문제, Golang #24355. go mod vendor 문제, Golang #26366.
package main
import (
"github.com/go-vgo/robotgo"
)
func main () {
robotgo . MouseSleep = 100
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 main
import (
"fmt"
"github.com/go-vgo/robotgo"
)
func main () {
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 = 100
robotgo . 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 ()
if err == nil {
fmt . Println ( text )
}
} package main
import (
"fmt"
"strconv"
"github.com/go-vgo/robotgo"
"github.com/vcaesar/imgo"
)
func main () {
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 )
defer robotgo . FreeBitmap ( bit )
img := robotgo . ToImage ( bit )
imgo . Save ( "test.png" , img )
num := robotgo . DisplaysNum ()
for i := 0 ; i < num ; i ++ {
robotgo . DisplayID = i
img1 , _ := 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 main
import (
"fmt"
"github.com/go-vgo/robotgo"
"github.com/vcaesar/bitmap"
)
func main () {
bit := robotgo . CaptureScreen ( 10 , 20 , 30 , 40 )
// use `defer robotgo.FreeBitmap(bit)` to free the bitmap
defer robotgo . 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 main
import (
"fmt"
"math/rand"
"github.com/go-vgo/robotgo"
"github.com/vcaesar/gcv"
"github.com/vcaesar/bitmap"
)
func main () {
opencv ()
}
func opencv () {
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 )
defer robotgo . 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 . Y
robotgo . Move ( x , y - rand . Intn ( 5 ))
robotgo . MilliSleep ( 100 )
robotgo . Click ()
res = gcv . FindAll ( img1 , img ) // use find template and sift
fmt . 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 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 ---" )
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 )
}
func low () {
evChan := hook . Start ()
defer hook . End ()
for ev := range evChan {
fmt . Println ( "hook: " , ev )
}
}
func event () {
ok := hook . AddEvents ( "q" , "ctrl" , "shift" )
if ok {
fmt . Println ( "add events..." )
}
keve := hook . AddEvent ( "k" )
if keve {
fmt . Println ( "you press... " , "k" )
}
mleft := hook . AddEvent ( "mleft" )
if mleft {
fmt . Println ( "you press... " , "mouse left button" )
}
} 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 . 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 )
if err == nil && isExist {
fmt . Println ( "pid exists is" , isExist )
robotgo . Kill ( 100 )
}
abool := robotgo . Alert ( "test" , "robotgo" )
if abool {
fmt . Println ( "ok@@@ " , "ok" )
}
title := robotgo . GetTitle ()
fmt . Println ( "title@@@ " , title )
}Robotgo는 주로 "MIT 라이센스 및 Apache 라이센스 (버전 2.0) 모두에 따라 다양한 BSD와 유사한 라이센스가 포함됩니다.
라이센스 아파치, 라이센스 -MIT를 참조하십시오.