2017-11-13 9 views
3

Großer Kerl.Windows-wie man Bildschirmauflösung in Golang

Ich habe eine Anforderung, um die Windows-System-Bildschirmauflösung zu bekommen, aber ich kann keine nützliche Sache mit Google bekommen.

So suche ich Hilfe in Stackoverflow.

Wer weiß, wie es geht?

Danke Fortschritt.

Updates: dann versuche ich diesen Befehl wmic desktopmonitor get screenheight screenwidth und die Antwort wie diese:
das ist das cmd: enter image description here

diese go-Programm: enter image description here

Antwort

1

ich für einige Graben haben Sie und einen Weg gefunden, um Ihre Bildschirme Breite und Höhe über die Befehlszeile in Windows:

wmic desktopmonitor get screenheight, screenwidth 

Alles, was Sie tun müssen, ist diesen Befehl in einem Go-Programm auszuführen und die Ausgabe zu drucken!

package main 

import (
    "os/exec" 
    "fmt" 
    "log" 
    "os" 
) 

func main() { 
    command:= "wmic" 
    args := []string{"desktopmonitor", "get", "screenheight,", "screenwidth"} 
    cmd := exec.Command(command, args...) 
    cmd.Stdin = os.Stdin 
    out, err := cmd.Output() 
    fmt.Printf("out: %#v\n", string(out)) 
    fmt.Printf("err: %#v\n", err) 
    if err != nil { 
    log.Fatal(err) 
    } 
} 

Hier ist die Go Spielplatz Link: https://play.golang.org/p/KdIhrd3H1x

+0

wunderbar ~! das ist ein guter Weg ~! Ich versuche diesen Befehl, gibt nichts zurück – alphayan

+0

Was gibt es zurück? Einfach nichts? – Ethan

+0

Ja, einfach nichts, Es gibt keinen Fehler. – alphayan

2

Wir Bildschirmauflösung durch powershell bekommen können, und seine Argumente sind sind die Skripte. so habe ich Skript in args Variable enthalten.

Die Ausgabe ist nicht direkt, Sie erhalten einige weitere Informationen, versuchen Sie mit bytes Paket oder strings Paket, um die erforderlichen Informationen zu scannen.

Nach powershell Befehl retrived von here:

Add-Type -AssemblyName System.Windows.Forms;[System.Windows.Forms.Screen]::AllScreens

package main 

import (
    "fmt" 
    "log" 
    "os/exec" 
) 

func main() { 
    args := "Add-Type -AssemblyName System.Windows.Forms;[System.Windows.Forms.Screen]::AllScreens" 
    out, err := exec.Command("powershell", args).Output() 
    if err != nil { 
     log.Fatalln(err) 
    } 
    fmt.Print(string(out)) 
} 

ich es in Windows 7 Virtual Box aktiviert haben, ihre Arbeiten. Sie können dies von Command Prompt oder powershell ausführen, wie dies powershell any wie.

+0

oh danke, dieser Weg kann es bekommen. – alphayan

1

Ich hatte das gleiche Problem und es über exec.Command tun ist keine Option für mich.

Die Windows API hat eine Funktion, mit der Sie die Bildschirmauflösung erhalten, so dass Sie nur die richtige DLL laden und die Funktion aufrufen müssen.

package main 

import (
    "fmt" 
    "syscall" 
) 

var (
    user32   = syscall.NewLazyDLL("User32.dll") 
    getSystemMetrics = user32.NewProc("GetSystemMetrics") 
) 

func GetSystemMetrics(nIndex int) int { 
    index := uintptr(nIndex) 
    ret, _, _ := getSystemMetrics.Call(index) 
    return int(ret) 
} 

const (
    SM_CXSCREEN = 0 
    SM_CYSCREEN = 1 
) 

func main() { 
    fmt.Printf("X: %d, Y: %d\n", GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN)) 
} 

Offizielle Dokumentation:

https://msdn.microsoft.com/en-us/library/ms724385(v=vs.85).aspx

https://github.com/golang/go/wiki/WindowsDLLs

https://golang.org/pkg/syscall/#Syscall

0

Ein bisschen spät, aber wie durch Marco vorgeschlagen, können Sie die Windows-API-GetSystemMetrics für diese. Der einfachste Weg, dies zu tun ist durch das github.com/lxn/win Paket:

package main 

import (
    "fmt" 

    "github.com/lxn/win" 
) 

func main() { 
    width := int(win.GetSystemMetrics(win.SM_CXSCREEN)) 
    height := int(win.GetSystemMetrics(win.SM_CYSCREEN)) 
    fmt.Printf("%dx%d\n", width, height) 
} 

Etwas aufwendiger, mit GetDeviceCaps:

package main 

import (
    "fmt" 

    "github.com/lxn/win" 
) 

func main() { 
    hDC := win.GetDC(0) 
    defer win.ReleaseDC(0, hDC) 
    width := int(win.GetDeviceCaps(hDC, win.HORZRES)) 
    height := int(win.GetDeviceCaps(hDC, win.VERTRES)) 
    fmt.Printf("%dx%d\n", width, height) 
}