【发布时间】:2011-08-10 01:01:49
【问题描述】:
我想在后台应用程序中全局隐藏鼠标指针或阻止它移动。
我试过“CGDisplayHideCursor(kCGDirectMainDisplay);”,但这似乎只适用于前台应用程序。
这个answer 似乎是我最好的选择,但我无法编译它。具体来说,我得到:
架构 i386 的未定义符号: “_CGSDefaultConnection()”,引用自: main.o 中的 _main “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);
}
上面的代码阻止了鼠标移动事件,因此其他应用程序不会响应指针在它们上方移动。但它不会阻止指针本身移动。
编辑
我为什么要这样做?我正在记录鼠标增量以通过网络控制另一台计算机。 Synergy 和 Teleport 等应用程序会执行此操作,但 Synergy 上的光标仍然可见(我上次检查过)。
【问题讨论】:
-
允许这样做会产生各种后果。如果没有丑陋且可能有漏洞的 hack,您将无法实现它。
-
听说过 Synergy 吗?我想将鼠标增量转发到另一台计算机。在控制另一台计算机时让鼠标指针停留在屏幕上很丑。
标签: objective-c cocoa macos