英文:
Go lang - Get current mouse cursor position with RobotGo
问题
我是一个Go语言的初学者,我想解决一个小任务:将鼠标光标的当前坐标打印到控制台,并在鼠标移动时更新坐标。为此,我使用了robotgo库,通过以下命令下载它:"go get github.com/go-vgo/robotgo",然后使用"go get -u github.com/go-vgo/robotgo"进行更新,并使用import "github.com/go-vgo/robotgo"导入它。以下是我编写的代码:
package main
import (
"fmt"
"github.com/go-vgo/robotgo"
)
func main() {
for {
x, y := robotgo.GetMousePos()
fmt.Printf("当前位置 X=%d, Y=%d", x, y)
if x == 540 && y == 960 {
fmt.Println("光标在中心位置")
}
robotgo.Move(x, y)
}
}
但是我遇到了错误:
# github.com/robotn/gohook
C:\CODING\SDK\GO-PATH\pkg\mod\github.com\robotn\gohook@v0.40.0\event.go:51:10: undefined: addEvent
C:\CODING\SDK\GO-PATH\pkg\mod\github.com\robotn\gohook@v0.40.0\event.go:62:7: undefined: Start
C:\CODING\SDK\GO-PATH\pkg\mod\github.com\robotn\gohook@v0.40.0\event.go:75:18: undefined: KeyHold
C:\CODING\SDK\GO-PATH\pkg\mod\github.com\robotn\gohook@v0.40.0\event.go:83:18: undefined: KeyUp
C:\CODING\SDK\GO-PATH\pkg\mod\github.com\robotn\gohook@v0.40.0\event.go:95:22: undefined: KeyUp
C:\CODING\SDK\GO-PATH\pkg\mod\github.com\robotn\gohook@v0.40.0\event.go:96:4: undefined: End
C:\CODING\SDK\GO-PATH\pkg\mod\github.com\robotn\gohook@v0.40.0\event.go:113:7: undefined: Start
C:\CODING\SDK\GO-PATH\pkg\mod\github.com\robotn\gohook@v0.40.0\event.go:121:17: undefined: MouseMove
C:\CODING\SDK\GO-PATH\pkg\mod\github.com\robotn\gohook@v0.40.0\event.go:128:22: undefined: MouseDown
C:\CODING\SDK\GO-PATH\pkg\mod\github.com\robotn\gohook@v0.40.0\event.go:129:4: undefined: End
C:\CODING\SDK\GO-PATH\pkg\mod\github.com\robotn\gohook@v0.40.0\event.go:129:4: too many errors
更新 2023年3月16日 问题已通过完全删除库及其依赖项,然后重新安装解决。
英文:
I'm a beginner in Go and I want to solve a small task: to print the current coordinates of the mouse cursor to the console and update them if the mouse moves. For this, I took the library robotgo, downloaded it using "go get github.com/go-vgo/robotgo", then "go get -u github.com/go-vgo/robotgo", and imported it using import "github.com/go-vgo/robotgo". Here's the code I wrote:
package main
import (
"fmt"
"github.com/go-vgo/robotgo"
)
func main() {
for {
x, y := robotgo.GetMousePos()
fmt.Printf("Current position X=%d, Y=%d", x, y)
if x == 540 && y == 960 {
fmt.Println("Cursor @center")
}
robotgo.Move(x, y)
}
}
But I'm getting errors:
# github.com/robotn/gohook
C:\CODING\SDK\GO-PATH\pkg\mod\github.com\robotn\gohook@v0.40.0\event.go:51:10: undefined: addEvent
C:\CODING\SDK\GO-PATH\pkg\mod\github.com\robotn\gohook@v0.40.0\event.go:62:7: undefined: Start
C:\CODING\SDK\GO-PATH\pkg\mod\github.com\robotn\gohook@v0.40.0\event.go:75:18: undefined: KeyHold
C:\CODING\SDK\GO-PATH\pkg\mod\github.com\robotn\gohook@v0.40.0\event.go:83:18: undefined: KeyUp
C:\CODING\SDK\GO-PATH\pkg\mod\github.com\robotn\gohook@v0.40.0\event.go:95:22: undefined: KeyUp
C:\CODING\SDK\GO-PATH\pkg\mod\github.com\robotn\gohook@v0.40.0\event.go:96:4: undefined: End
C:\CODING\SDK\GO-PATH\pkg\mod\github.com\robotn\gohook@v0.40.0\event.go:113:7: undefined: Start
C:\CODING\SDK\GO-PATH\pkg\mod\github.com\robotn\gohook@v0.40.0\event.go:121:17: undefined: MouseMove
C:\CODING\SDK\GO-PATH\pkg\mod\github.com\robotn\gohook@v0.40.0\event.go:128:22: undefined: MouseDown
C:\CODING\SDK\GO-PATH\pkg\mod\github.com\robotn\gohook@v0.40.0\event.go:129:4: undefined: End
C:\CODING\SDK\GO-PATH\pkg\mod\github.com\robotn\gohook@v0.40.0\event.go:129:4: too many errors
UPD 16.03.2023 problem was solved by completely removing the library and its dependencies, and then reinstalling it.
答案1
得分: 1
对于Windows系统,可以使用系统API:GetCursorPos
//go:build windows
package main
import (
"fmt"
"syscall"
"unsafe"
)
func main() {
userDll := syscall.NewLazyDLL("user32.dll")
getCursorPosProc := userDll.NewProc("GetCursorPos")
type POINT struct {
X, Y int32
}
var pt POINT
_, _, eno := syscall.Syscall(getCursorPosProc.Addr(), 1, uintptr(unsafe.Pointer(&pt)), 0, 0)
if eno != 0 {
fmt.Println(eno)
}
fmt.Printf("[cursor.Pos] X:%d Y:%d\n", pt.X, pt.Y)
}
请注意,这是一个使用Go语言编写的示例代码,用于获取鼠标光标的位置。它使用了Windows系统的user32.dll库中的GetCursorPos函数。
英文:
For windows, use the system API :GetCursorPos
//go:build windows
package main
import (
"fmt"
"syscall"
"unsafe"
)
func main() {
userDll := syscall.NewLazyDLL("user32.dll")
getWindowRectProc := userDll.NewProc("GetCursorPos")
type POINT struct {
X, Y int32
}
var pt POINT
_, _, eno := syscall.SyscallN(getWindowRectProc.Addr(), uintptr(unsafe.Pointer(&pt)))
if eno != 0 {
fmt.Println(eno)
}
fmt.Printf("[cursor.Pos] X:%d Y:%d\n", pt.X, pt.Y)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论