Я хочу скрыть указатель мыши или предотвратить его глобальное перемещение в фоновом приложении.
Я пробовал "CGDisplayHideCursor (kCGDirectMainDisplay);", но, похоже, это работает только с приложениями переднего плана.
Этот ответ кажется моим лучшим выбором, но я не могу его скомпилировать. В частности, я получаю:
Неопределенные символы для архитектуры i386:
"_CGSDefaultConnection ()", на которую ссылаются из:
_main in main.o
"CGSSetConnectionProperty (int, int, __CFString const *, __CFBoolean const *)", на который ссылаются из:
_main in main.o
Что касается сокрытия указателя, этот код, использующий Event Taps, является самым близким, что я нашел до сих пор:
#include <ApplicationServices/ApplicationServices.h>
CGEventRef mouseEventCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon)
{
if (type != kCGEventMouseMoved)
return event;
return NULL;
}
int main(void)
{
CFMachPortRef mouseEventTap;
CFRunLoopSourceRef mouseRunloop;
mouseEventTap = CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap, 0, (1 << kCGEventMouseMoved), mouseEventCallback, NULL);
if(!mouseEventTap)
exit(1);
mouseRunloop = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, mouseEventTap, 0);
CFRunLoopAddSource(CFRunLoopGetCurrent(), mouseRunloop, kCFRunLoopCommonModes);
CGEventTapEnable(mouseEventTap, true);
CFRunLoopRun();
exit(0);
}
Приведенный выше код блокирует события движения мыши, поэтому другие приложения не реагируют на перемещение указателя над ними. Но это не мешает движению самого указателя.
EDIT
Почему я хочу это сделать? Я записываю дельты мыши, чтобы управлять другим компьютером по сети. Такие приложения, как Synergy и Teleport, делают это, но курсор по-прежнему виден в Synergy (последний раз, когда я проверял).