Моя цель - реализовать программу, которая просто возвращает текущую позицию мыши (без открытия каких-либо окон и независимо от того, что работает). После поиска этого, ближайшая и самая простая реализация, которую я смог найти, была через autopy, библиотеку python для такого рода вещей.Реализация части исходного кода c
Функция 'get_pos()', которая возвращает текущую позицию мыши. См. Документацию here. Я просто хочу реализовать функцию get_pos() самостоятельно (потому что это все, что мне нужно включить из автопиля для разрабатываемой программы).
В реестре github я просмотрел исходный код автокатастрофы, и я пришел к следующим выводам. Вызов 'get_pos() приводит к тому, * mouse_get_pos функцию, чтобы произойти (см полный код here):
/* Syntax: get_pos() => tuple (x, y) */
/* Description: Returns a tuple `(x, y)` of the current mouse position. */
static PyObject *mouse_get_pos(PyObject *self, PyObject *args);
Эта функция, кажется, называют 'getMousePos':
static PyObject *mouse_get_pos(PyObject *self, PyObject *args)
{
MMPoint pos = getMousePos();
return Py_BuildValue("kk", pos.x, pos.y);
}
, который расположен в заголовке mouse.c файл:
MMPoint getMousePos()
{
#if defined(IS_MACOSX)
CGEventRef event = CGEventCreate(NULL);
CGPoint point = CGEventGetLocation(event);
CFRelease(event);
return MMPointFromCGPoint(point);
#elif defined(USE_X11)
int x, y; /* This is all we care about. Seriously. */
Window garb1, garb2; /* Why you can't specify NULL as a parameter */
int garb_x, garb_y; /* is beyond me. */
unsigned int more_garbage;
Display *display = XGetMainDisplay();
XQueryPointer(display, XDefaultRootWindow(display), &garb1, &garb2,
&x, &y, &garb_x, &garb_y, &more_garbage);
return MMPointMake(x, y);
#elif defined(IS_WINDOWS)
POINT point;
GetCursorPos(&point);
return MMPointFromPOINT(point);
#endif
}
Этот код, кажется, включает в себя способ возвращения положения мыши во всех операционных системах, что я и пытаюсь реализовать в моем программа. Как я могу заставить эту функцию c работать должным образом в моей системе, чтобы я мог ее реализовать в своей программе?
EDIT: Я попытался просто компиляции mouse.c с помощью «GCC mouse.c», и я получаю эту ошибку:
Undefined symbols for architecture x86_64:
"_CFRelease", referenced from:
_moveMouse in ccVkh5f7.o
_getMousePos in ccVkh5f7.o
_toggleMouse in ccVkh5f7.o
"_CGEventCreate", referenced from:
_getMousePos in ccVkh5f7.o
"_CGEventCreateMouseEvent", referenced from:
_moveMouse in ccVkh5f7.o
_toggleMouse in ccVkh5f7.o
"_CGEventGetLocation", referenced from:
_getMousePos in ccVkh5f7.o
"_CGEventPost", referenced from:
_moveMouse in ccVkh5f7.o
_toggleMouse in ccVkh5f7.o
"_deadbeef_rand", referenced from:
_smoothlyMoveMouse in ccVkh5f7.o
"_getMainDisplaySize", referenced from:
_smoothlyMoveMouse in ccVkh5f7.o
"_main", referenced from:
start in crt1.10.6.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
ли это сделать какие-либо основные проблемы очевидны?
mouse.c не является файлом заголовка. – Sebastian
Вы хотите реализовать его в чистом питоне? Наверное, невозможно. Таким образом, вам понадобится компилятор C (или C++), скомпилируйте часть автозапуска, которая вам нужна, и интерфейс. Почему вы не можете использовать autopy, даже если вам не нужны все его функции? – Sebastian
«Как я могу заставить эту функцию c правильно работать в моей системе, чтобы я мог ее реализовать в своей программе?» Какая у вас система? Что не работает должным образом? – Sebastian