package main import ( "fmt" "image" "image/png" "os" "os/exec" "strconv" "strings" "time" "github.com/kbinani/screenshot" ) // GetWindowGeometry ... // xdotool search --name "Yu-Gi-Oh! Duel Links" A besoin en parametre le resultat de cette commande func GetWindowGeometry(nwin string) image.Rectangle { win := image.Rectangle{} cmd := exec.Command("/bin/xdotool", "getwindowgeometry", nwin) out, err := cmd.Output() if err == nil { strOut := string(out) posStartPos := strings.Index(strOut, "Position") + len("Position: ") posMidPos := strings.Index(strOut, ",") posEndPos := strings.Index(strOut[posMidPos:], " (") + posMidPos win.Min.X, _ = strconv.Atoi(strOut[posStartPos:posMidPos]) win.Min.Y, _ = strconv.Atoi(strOut[posMidPos+1 : posEndPos]) posStartGeo := strings.Index(strOut, "Geometry") + len("Geometry: ") posMidGeo := strings.Index(strOut, "x") posEndGeo := len(string(out)) - 1 win.Max.X, _ = strconv.Atoi(strOut[posStartGeo:posMidGeo]) win.Max.Y, _ = strconv.Atoi(strOut[posMidGeo+1 : posEndGeo]) } return win } // ScreenShoot ... func ScreenShoot(rect image.Rectangle) string { n := screenshot.NumActiveDisplays() for i := 0; i < n; i++ { img, err := screenshot.CaptureRect(rect) if err != nil { panic(err) } fileName := fmt.Sprintf("%d_%dx%d.png", i, rect.Dx(), rect.Dy()) file, _ := os.Create(fileName) defer file.Close() png.Encode(file, img) return fileName } return "" } // screenshoot [nwin] func main() { time.Sleep(15) rect := GetWindowGeometry(os.Args[1]) filename := ScreenShoot(rect) if filename == "" { panic("ScreenShoot Error...\n") } else { fmt.Println(filename) } }