Cocoaのグローバルマウス移動イベント
-
06-07-2019 - |
質問
Cocoaでグローバルなマウス移動イベントに登録する方法はありますか? CarbonのInstallEventHandler()
を使用してイベントに登録できましたが、Cocoaに相当するものを好むでしょう。 NSNotificationCenter
イベントを探しましたが、パブリックイベント名はないようです(プライベートイベントはありますか?)
別の方法として、NSTrackingArea
バックグラウンドを持つビューにclearColor
を使用する方法はありますか?
アプリはSnow Leopardのみです。
解決
SnowLeopardには、 NSEvent
に新しいクラスメソッドがあります。これは、必要な処理を正確に実行します。 +(id)addGlobalMonitorForEventsMatchingMask:(NSEventMask)mask handler:(void(^)(NSEvent * ))ブロック
。 mask = NSMouseMovedMask
が必要になります。
他のヒント
StackOverflowで同様の質問が既に尋ねられました: 透明なNSViewサブクラスハンドルを作成する方法マウスイベント?
要約すると、tansparentビューメソッドは機能しませんでした。 Quartz Event Tapsがベストアンサーのようです。
タップの操作に関するヒントを次に示します。
-
CGEventTapCreate
でタップを作成します。
a)ロケーション(最初の)パラメーターには、おそらくkCGSessionEventTap
を使用します。
b)配置(2番目)パラメーターには、おそらくkCGHeadInsertEventTap
が必要です。
c)イベントマスクパラメーターについては、(1<< kCGEventMouseMoved)
を試してください。 -
CFMachPortCreateRunLoopSource
を使用して実行ループソースを作成し、2番目のパラメーターとしてイベントタップを渡します。 -
実行ループソースを実行ループに追加します。メインの実行ループに追加したい場合、次のようにします。
CFRunLoopAddSource(CFRunLoopGetMain()、sourceFromStep2、kCFRunLoopDefaultMode);
-
CGEventTapEnable
どこにいてもマウスを追跡したい場合は、CGEventTapが必要です。 Cocoaに相当するものはありません。アプリケーションで追跡したいだけなら、もう少し詳しくできない理由を説明する必要があります。