该代码应在Windows 10上运行。我尝试过asking on Reddit,但是这些想法仅适用于Unix / Linux。还有CFFI,但我不知道如何将其用于此问题(the documentation I found的主要可用性部分只是与该问题无关的详尽示例)。
我还浏览了Python的SetCursorPos,发现它调用了ctypes.windll.user32.SetCursorPos(x,y),但是我不知道在CL中会是什么样子。
最后,还有CommonQt,但是虽然Qt中似乎有QtCursor :: setPos,但我找不到CL版本。
答案 0 :(得分:3)
Python示例调用的函数似乎是documented here。它是共享库user32.dll
的一部分,您可以使用CFFI加载该库,
(ql:quickload :cffi)
#+win32
(progn
(cffi:define-foreign-library user32
(:windows "user32.dll"))
(cffi:use-foreign-library user32))
#+win32
表示仅在Windows上评估。
然后,您可以使用SetCursorPos
声明外部CFFI:DEFCFUN
函数。根据文档,它接受两个int
并返回一个BOOL
。 CFFI具有:BOOL
类型,但是Windows BOOL
实际上是int
。您可能可以使用cffi-grovel从某些Windows标头中自动找到typedef,但我将仅在此处直接使用:INT
。
#+win32
(cffi:defcfun ("SetCursorPos" %set-cursor-pos) (:boolean :int)
(x :int)
(y :int))
我在名称中放置了%
,以指示这是一个内部函数,不应直接调用它(因为它仅在Windows上可用)。然后,您应该编写一个在不同平台上都可以使用的包装器(实际上,这里没有在其他平台上实现它)。
(defun set-cursor-pos (x y)
(check-type x integer)
(check-type y integer)
#+win32 (%set-cursor-pos x y)
#-win32 (error "Not supported on this platform"))
现在调用(set-cursor-pos 100 100)
会将鼠标移到左上角附近。
答案 1 :(得分:1)
这里有两个问题:
似乎您已经找到了合适的win32函数,因此面临的挑战是加载相关的库,声明函数名称和类型,然后调用它。不幸的是,我真的无法帮助您。
您可以尝试其他解决方案: