Files
OpsLog/screenbounds_windows.go
T
2026-07-26 16:57:19 +02:00

37 lines
1.1 KiB
Go

//go:build windows
package main
import "syscall"
// GetSystemMetrics indices for the virtual desktop — the rectangle spanning
// every attached monitor. Wails' ScreenGetAll reports each monitor's size but
// not its offset, so it cannot answer "is this coordinate on any screen?"; the
// Win32 metrics can.
const (
smXVirtualScreen = 76
smYVirtualScreen = 77
smCXVirtualScreen = 78
smCYVirtualScreen = 79
)
var (
user32Dll = syscall.NewLazyDLL("user32.dll")
procGetSystemMetrics = user32Dll.NewProc("GetSystemMetrics")
)
func systemMetric(index int) int {
r, _, _ := procGetSystemMetrics.Call(uintptr(index))
return int(int32(r)) // signed: the virtual desktop origin is negative with a monitor to the left
}
// virtualScreenBounds returns the rectangle covering all monitors, and whether
// it could be determined at all.
func virtualScreenBounds() (x, y, w, h int, ok bool) {
w, h = systemMetric(smCXVirtualScreen), systemMetric(smCYVirtualScreen)
if w <= 0 || h <= 0 {
return 0, 0, 0, 0, false
}
return systemMetric(smXVirtualScreen), systemMetric(smYVirtualScreen), w, h, true
}