38 lines
846 B
Go
38 lines
846 B
Go
//go:build windows && go1.21
|
|
|
|
package screenshot
|
|
|
|
import (
|
|
"image"
|
|
"runtime"
|
|
"syscall"
|
|
"unsafe"
|
|
|
|
"github.com/lxn/win"
|
|
)
|
|
|
|
func NumActiveDisplays() int {
|
|
count := new(int)
|
|
pinner := new(runtime.Pinner)
|
|
pinner.Pin(count)
|
|
defer pinner.Unpin()
|
|
*count = 0
|
|
ptr := unsafe.Pointer(count)
|
|
enumDisplayMonitors(win.HDC(0), nil, syscall.NewCallback(countupMonitorCallback), uintptr(ptr))
|
|
return *count
|
|
}
|
|
|
|
func GetDisplayBounds(displayIndex int) image.Rectangle {
|
|
ctx := new(getMonitorBoundsContext)
|
|
pinner := new(runtime.Pinner)
|
|
pinner.Pin(ctx)
|
|
defer pinner.Unpin()
|
|
ctx.Index = displayIndex
|
|
ctx.Count = 0
|
|
ptr := unsafe.Pointer(ctx)
|
|
enumDisplayMonitors(win.HDC(0), nil, syscall.NewCallback(getMonitorBoundsCallback), uintptr(ptr))
|
|
return image.Rect(
|
|
int(ctx.Rect.Left), int(ctx.Rect.Top),
|
|
int(ctx.Rect.Right), int(ctx.Rect.Bottom))
|
|
}
|