web-dev-qa-db-ja.com

Windowsのシャットダウンまたはログオフを検出する方法

Windowsがシャットダウン(または再起動)したとき、またはユーザーがログオフしたときを検出する必要があります。アプリケーションを閉じる前に、アプリケーションを適切に閉じる必要があります。 Windowsが終業しているときに、exitアプリケーションイベントが発生しないことに気付きました。

私は投稿を読みました c#でWindowsのシャットダウン/ログオフを検出し、そのアクションをキャンセルする方法はありますか(ユーザーに尋ねた後)

しかし、閉じる前にどこで操作を実行する必要があるのか​​わかりません。ありがとう。

47
Andrea Nagar

イベントハンドラメソッドを接続するSystemEvents.SessionEnding event 。イベントが発生するたびにハンドラーメソッドが呼び出されます。このイベントを処理すると、保留中のログオフまたはシャットダウンをcancelできます(必要な場合)。 (実際には、現在のオペレーティングシステムでの音のようには動作しませんが、詳細については MSDNドキュメント を参照してください。)

イベントをキャンセルしたくないが、適切に対応したい場合は、 SystemEvents.SessionEnded event 代わりに。

ただし、アプリケーションが閉じられたときに、イベントハンドラーは静的イベントであるため、必ずdetachする必要があります。

55
Cody Gray

コードが非対話型セッション(システムサービスなど)で実行されていない場合は、 pinvoke を使用してネイティブソリューションを使用できます。

//SM_SHUTTINGDOWN = 0x2000
bool bShutDownPending = GetSystemMetrics(SM_SHUTTINGDOWN) != 0;
9
c00000fd