4

ユーザーが X 時間アイドル状態になったことを検出し、ユーザーがすぐにアクティブになったことを検出する最良の方法は何ですか?

will/did sleep/wake 通知を提供する NSWorkspace があることは知っていますが、スリープ設定は通常約 15 分でまったくないため、それに頼ることはできません。ユーザーが 1 ~ 2 分間アイドル状態になっているかどうかを検出できる必要があります。

この回答は、アイドル時間を取得する方法を提供します。可能であれば、ポーリングを避けたいと思います。

4

1 に答える 1

2

私の知る限り、ポーリングが唯一の選択肢です。user1118321 が指摘しているように、O(分) ごとにポーリングしても、パフォーマンスなどの問題が発生する可能性はほとんどありません。

アプリに GUI があり、とにかく UI イベントを受け取る場合は、+[NSEvent addLocalMonitorForEventsMatchingMask:handler:]イベントごとにタイマーをリセットするハンドラーをインストールできます。少なくとも自分のアプリでは、ユーザーが一貫してアクティブな場合、投票をなくすことはできませんが、減らすのに役立ちます。

ユーザーが十分長い間アイドル状態であると判断したら、グローバル イベント タップをインストールして、次のイベントを監視できます。例を参照してください-[NSEvent addGlobalMonitorForEventsMatchingMask:handler:]

注: CGEventSourceSecondsSinceLastEventTypeIO レジストリを突っ込むのではなく、可能な限り使用する必要があります。これは公式でサポートされている API であり、より効率的である可能性があります。言うまでもなく、それははるかに簡単です。Carbonに依存していますがUKIdleTimerもあるので、適用できない場合があります。

于 2012-11-17T08:50:56.877 に答える