Чтобы получить положение мыши в программе Go, вы можете использовать библиотеки для конкретной платформы или внешние пакеты. Вот несколько примеров использования разных подходов:
-
Использование пакета “github.com/go-vgo/robotgo”:
package main import ( "fmt" "github.com/go-vgo/robotgo" ) func main() { x, y := robotgo.GetMousePos() fmt.Printf("Mouse position: X:%d, Y:%d\n", x, y) } -
Использование пакета “github.com/go-vgo/robotgo” с обработкой событий:
package main import ( "fmt" "github.com/go-vgo/robotgo" ) func main() { quit := make(chan bool) go func() { for { // Listen for mouse events if robotgo.AddEvent("mleft") { // Get mouse position when left mouse button is pressed x, y := robotgo.GetMousePos() fmt.Printf("Mouse position: X:%d, Y:%d\n", x, y) } } }() <-quit } -
Использование пакета “github.com/go-vgo/robotgo” с решением для конкретной платформы (Windows):
package main import ( "fmt" "github.com/go-vgo/robotgo" "syscall" ) var ( user32 = syscall.MustLoadDLL("user32.dll") getCursorPos = user32.MustFindProc("GetCursorPos") screenToClient = user32.MustFindProc("ScreenToClient") getDesktopWindow = user32.MustFindProc("GetDesktopWindow") ) type POINT struct { X, Y int32 } func getMousePos() (int, int) { var p POINT getCursorPos.Call(uintptr(unsafe.Pointer(&p))) hwnd, _, _ := getDesktopWindow.Call() screenToClient.Call(hwnd, uintptr(unsafe.Pointer(&p))) return int(p.X), int(p.Y) } func main() { x, y := getMousePos() fmt.Printf("Mouse position: X:%d, Y:%d\n", x, y) }
Обратите внимание, что третий пример демонстрирует решение, специфичное для Windows, и может потребовать дополнительных модификаций для других операционных систем.