有没有办法全局隐藏Cocoa(或Carbon)中所有应用程序的鼠标光标?或者至少用其他东西替换它?
编辑:感谢输入的人,但事实证明丹尼尔Jalkut不久前找到了解决方案:) http://lists.apple.com/archives/carbon-dev/2006/Jan/msg00555.html
我想在后台应用程序中全局隐藏鼠标指针或防止其移动。
我已经尝试过“ CGDisplayHideCursor(kCGDirectMainDisplay);”,但这似乎仅适用于前台应用程序。
这个答案似乎是我最好的选择,但是我无法编译它。具体来说,我得到:
体系结构i386的未定义符号:“ _ CGSDefaultConnection()”,引用自:main.o中的_main“ CGSSetConnectionProperty(int,int,__CFString const *,__CFBoolean const *)”,引用自:main.o中的_main
就隐藏指针而言,使用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);
}
Run Code Online (Sandbox Code Playgroud)
上面的代码阻止了鼠标移动事件,因此其他应用程序不响应在其上移动的指针。但这并不能阻止指针本身移动。
编辑
我为什么要这样做?我正在记录鼠标增量,以通过网络控制另一台计算机。诸如Synergy和Teleport之类的应用程序可以执行此操作,但是光标仍在Synergy上可见(我上次检查过)。