2

ユーザーのログアウトやその他の Windows イベントをリッスンするために Java で使用できるライブラリはありますか? (複数のプラットフォームに対応していればなおさらです!)

何年も前にこの種のライブラリについて読んだことを覚えていますが、今は見つけられないようです。Python と win32ts を使用して、本質的に同じことを行う他のスレッドを見てきました。

また、無料および/またはオープンソースである場合も優れています。

ありがとう。

: using の候補ソリューションは、Runtime.getRuntime().addShutdownHook(Thread)では正しく機能しませんjavaw。私はまだ javaw で動作するソリューションを探しています。Java バグ ID 4486580および4302814を参照してください。ありがとう --cam

4

3 に答える 3

7

Runtime.addShutdownHook()を見たいと思います。これにより、JVM がシャットダウンする前に何かを行う最後のチャンスが得られます。これにより、すべてのアプリケーションがシャットダウンされている実際のログアウトを検出できますが、一時的にユーザーを切り替えて元の状態に戻る準備ができているだけではありません。ただし、警告として、OS はいつでも SIGKILL (または同等の処理) を実行し、JVM を即座に停止させる可能性があるため、シャットダウン プロセス中に実行する計画はすべて簡潔にする必要があります。

これが必要でない場合は、おそらく JNI を使用してネイティブ リスナーを登録する必要があります。その他の Windows イベントに関しては、AWT ライブラリは、ほとんどの通常のアプリが関心を持つリスナーを実装するためのクラスを多数提供しています。この場合、FocusEventに関心があるかもしれません。

于 2009-02-04T18:28:50.823 に答える
3

私の最善の推測は、ShutdownHookを使用することです。JVM がシャットダウンされるとすぐに呼び出されるスレッドを登録できます。

編集:
Windows でこれを実現したい場合は、非表示のウィンドウを作成し、ユーザーのログオフまたはシステムのシャットダウン時に OS から送信されるWM_QUERYENDSESSIONメッセージに反応することができます。

于 2009-02-04T18:21:27.127 に答える