几秒钟后,在OS X上隐藏鼠标光标

时间:2010-09-26 20:36:01

标签: objective-c cocoa cursor python-idle

对于我的全屏应用,如果没有移动,我想在几秒钟后隐藏光标,如QuickTime或iTunes中的全屏模式。大概我打算打电话给[NSCursor setHiddenUntilMouseMoves:YES],但我怎么知道何时打电话呢?

据推测,我正在寻找与Hide mouse cursor after an idle time相同的内容,但在Mac上。我找不到一种方法来获得类似的“空闲时间”。 (另外,我可能不关心键盘事件,只关心鼠标移动。)

3 个答案:

答案 0 :(得分:5)

您可以使用以下命令获取光标(如果您还需要键盘)的空闲时间: CGEventSourceSecondsSinceLastEventType(kCGEventSourceStateCombinedSessionState, kCGEventMouseMoved)

Swift 3代码: CGEventSource.secondsSinceLastEventType(CGEventSourceStateID.combinedSessionState, eventType: CGEventType.mouseMoved)

另见http://developer.apple.com/library/mac/#documentation/Carbon/Reference/QuartzEventServicesRef/Reference/reference.html。您可能每隔几秒钟就必须轮询一次这个函数,如果返回的时间减少,您应该假设用户移动了光标。

答案 1 :(得分:1)

如何使用NSTimer并在n秒后检查是否有任何事情发生?

答案 2 :(得分: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)
        }
    }
}