マウスポインタを隠したり、バックグラウンドアプリケーションでグローバルに動かないようにしたい。OS Xでマウスポインタやブロックの動きを隠す
"CGDisplayHideCursor(kCGDirectMainDisplay);"を試しましたが、これはフォアグラウンドアプリケーションでのみ機能するようです。
このanswerは私の最善の策だと思われますが、コンパイルすることはできません。 、 ")(_CGSDefaultConnection" をから参照:i386アーキテクチャ用
未定義のシンボル:具体的に私が手 "CGSSetConnectionProperty(int型、int型、__CFStringのconstが*、__CFBoolean CONST *)" から参照、main.oに _main :main.o
で _mainは限りポインタを隠すなど、イベントのタップを使用して、このコードは、私がこれまでに見つけた最も近いものです:
#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ではカーソルが引き続き表示されます(最後にチェックしました)。
なぜこれをやりたいですか? –
これを許可すると、あらゆる種類の結果が生じるでしょう。あなたは醜いバグの可能性があるハックなしでそれを達成することができません。 –
シナジーについて聞いたことがありますか?マウスデルタを別のコンピュータに転送したい。別のコンピュータを制御しながらマウスポインタを画面上に残すことは醜いです。 – Luke