2

CまたはPythonでシステムのアイドル時間(キーを押さずにマウスを動かした)を取得するにはどうすればよいですか?

編集:私のプログラムは、アイドル時間が10秒を超えるとカウンターを一時停止します

4

4 に答える 4

2

現時点ではテストする Mac がないため、これが機能することを確認できませんが、このスレッドはあなたが探しているソリューションを提供しているようです: http://www.dssw.co.uk/sleepcentre/threads/ system_idle_time_how_to_retrieve.html

簡単に言うと、subprocessモジュールを使用して以下を呼び出します。

ioreg -c IOHIDSystem

次に、出力を解析し、値を 10^9 で割り、アイドル時間を秒単位で取得します。

于 2010-07-08T23:09:58.503 に答える
0

アプリケーションは GUI 駆動型ですか?

その場合、GUI が起動したときにタイマーを開始し、最上位でキーボードとマウスのコールバックを行うことができます。キーボードまたはマウスのコールバックがトリガーされるたびに、タイマーをリセットします。それ以外の場合、タイマーがオフになると、ハンドラー コードがカウンターを一時停止する必要があります。

そうでない場合は、これを無視してください... ;-)

于 2010-07-08T23:15:21.490 に答える
0

python(win)でそれはどうですか?Python の標準 lib の time モジュールのように ... ?

于 2010-07-08T22:33:29.000 に答える
0

プログラムの過程で費やされた時間を意味する場合、プログラムが完了した後、最も簡単な方法は、UNIX の「時間」関数を実行することです。

# echo foo
foo

# time echo foo
foo

real     0m0.000s
user     0m0.000s
sys  0m0.000s

プログラムの実行中にデータ収集を本当に行う必要がある場合は、より技術的な答えがあります.UNIXの本を見てみましょう...

アップデート:

clock_t times( struct tms *buf );

詳細については、マンページまたは「UNIX 環境での高度なプログラミング」のセクション 8.15 (Stevens) を参照してください。この種の質問に対するバイブルです。

更新 2:

別のプロセスで「sar」を実行し (top の stdout 印刷バージョンのようなものです)、必要な結果を探し、そのプロセスにシグナルを送信します。

または、「ioreg」に関して投稿された他のソリューション。

ただし、それ自体が本質的に「カーネルのような」プログラムであり、コアに大きなアクション ループがある場合は、未使用のサイクルを自分で追跡するのが最善の方法であることに気付くかもしれません。それ以外の場合、これは解決するのが重要な問題です。

于 2010-07-08T22:28:53.520 に答える