2

私のフルスクリーンアプリでは、QuickTimeやiTunesのフルスクリーンモードのように、カーソルが動かされていない場合は、数秒後にカーソルを非表示にします。おそらく私は電話をかけたいと思っています[NSCursor setHiddenUntilMouseMoves:YES]が、いつ電話をかけるかをどうやって知ることができますか?

おそらく私はアイドル時間の後にマウスカーソルを隠すのと同じものを探していますが、Mac上にあります。似たような「アイドルタイム」を得る方法が見つかりませんでした。(さらに、私はおそらくキーボードイベントを気にせず、マウスの動きだけを気にします。)

4

3 に答える 3

5

次を使用して、カーソル(および必要に応じてキーボードも)がアイドル状態になっている時間を取得できます。 CGEventSourceSecondsSinceLastEventType(kCGEventSourceStateCombinedSessionState, kCGEventMouseMoved)

スウィフト 3 コード: CGEventSource.secondsSinceLastEventType(CGEventSourceStateID.combinedSessionState, eventType: CGEventType.mouseMoved)

http://developer.apple.com/library/mac/#documentation/Carbon/Reference/QuartzEventServicesRef/Reference/reference.htmlも参照してください。おそらく数秒ごとにこの関数をポーリングする必要があり、返された時間が減少した場合は、ユーザーがカーソルを移動したと想定する必要があります。

于 2010-09-27T08:16:34.730 に答える
1

NSTimer を使用して n 秒後に何も起こらなかったかどうかを確認するのはどうですか?

于 2010-09-26T20:38:32.203 に答える
0

NSCursor.setHiddenUntilMouseMoves(true)たとえば、次のように設定できます。

import Cocoa

class MyWindowController: NSWindowController {

    private var mouseTimer: Timer?
    private var mouseTimeOut: Float = 1.0

    override func awakeFromNib() {
        mouseTimer = Timer.scheduledTimer(timeInterval: TimeInterval(mouseTimeOut),
                                          target: self,
                                          selector: #selector(hideMouse),
                                          userInfo: nil,
                                          repeats: true)
    }

    // MARK: - Mouse Cursor
    @objc func hideMouse() {
        if Float(CGEventSource.secondsSinceLastEventType(CGEventSourceStateID.combinedSessionState, eventType: CGEventType.mouseMoved)) > mouseTimeOut {
            NSCursor.setHiddenUntilMouseMoves(true)
        }
    }
}
于 2020-01-03T19:45:19.837 に答える