Функция, вызываемая примером Python, выглядит как , документированная здесь .Это часть общей библиотеки 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 для автоматического поиска typedef из какого-то заголовка Windows, но я просто буду использовать :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)
должен переместить мышь в верхний левый угол.