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