2017-11-13 58 views
3

偉大な男。windows-golangの画面解像度を取得する方法

私はWindowsシステムの画面解像度を取得する必要がありますが、私はGoogleでこれに関する有用なことを得ることはできません。

だから私はstackoverflowのヘルプを探します。

誰でも知っていますか?

ありがとうございます。

アップデート: が、私は、このコマンドwmic desktopmonitor get screenheight screenwidthを試してみて、このような答えを得る:私はいくつかのために掘った enter image description here

答えて

1

enter image description here

これは行くプログラムです:
これはCMDでありますWindowsのコマンドラインから画面の幅と高さを取得する方法を見つけました:

wmic desktopmonitor get screenheight, screenwidth 

Goプログラムでこのコマンドを実行して出力を印刷するだけです。ここで

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

は行く遊び場のリンクです: https://play.golang.org/p/KdIhrd3H1x

+0

〜!これは良い方法です〜!私はこのコマンドを試して、何も返さない – alphayan

+0

何が返されますか?単純に何もない? – Ethan

+0

はい、単純に何もエラーはありません。 – alphayan

2

我々はpowershellて画面の解像度を得ることができ、かつそのある引数は、そのスクリプトです。 ですから、args変数にスクリプトを含めました。

出力が直接的ではない場合は、その他の情報が得られます。bytesパッケージまたはstringsパッケージを使用して、必要な情報をスキャンしてみてください。 powershellコマンドに続いて

hereからretrivedさ:

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

私はWindows 7の仮想ボックス、その作業でそれを確認しています。 Command Promptまたはpowershellから実行できます。これは、powershellの呼び出し方法です。

+0

ああ、ありがとう、この方法でそれを得ることができます。 – alphayan

1

私は同じ問題に遭遇していました。exec.Command経由でやっていましたが、私にとってはオプションではありません。

windows apiには、画面の解像度を取得できる機能がありますので、適切なdllを読み込んでその関数を呼び出すだけで済みます。

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

公式ドキュメント:

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

少し遅れて、しかしマルコによって提案されたとして、あなたは、このために、WindowsのAPI GetSystemMetricsを使用することができます。そうするための最も簡単な方法は、github.com/lxn/winパッケージを介してである:

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

もう少し手の込んだ、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) 
} 
関連する問題