私の知る限り、ポーリングが唯一の選択肢です。user1118321 が指摘しているように、O(分) ごとにポーリングしても、パフォーマンスなどの問題が発生する可能性はほとんどありません。
アプリに GUI があり、とにかく UI イベントを受け取る場合は、+[NSEvent addLocalMonitorForEventsMatchingMask:handler:]
イベントごとにタイマーをリセットするハンドラーをインストールできます。少なくとも自分のアプリでは、ユーザーが一貫してアクティブな場合、投票をなくすことはできませんが、減らすのに役立ちます。
ユーザーが十分長い間アイドル状態であると判断したら、グローバル イベント タップをインストールして、次のイベントを監視できます。例を参照してください-[NSEvent addGlobalMonitorForEventsMatchingMask:handler:]
。
注: CGEventSourceSecondsSinceLastEventType
IO レジストリを突っ込むのではなく、可能な限り使用する必要があります。これは公式でサポートされている API であり、より効率的である可能性があります。言うまでもなく、それははるかに簡単です。Carbonに依存していますがUKIdleTimerもあるので、適用できない場合があります。