|
@@ -0,0 +1,65 @@
|
|
|
|
|
+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)
|
|
|
|
|
+ }
|
|
|
|
|
+}
|