Windows Vista の C# でシャットダウン イベントをインターセプトできるようにしたいと考えています。Vista の高度なセキュリティ機能により、shutdown コマンドが呼び出された後に実行されているアプリケーションはすべて停止され、リストに表示され、ユーザーはそれらを操作するように求められます。
これを克服する方法と、Vista で使用する必要があるイベントを知っている人はいますか?
ありがとう。
Windows Vista の C# でシャットダウン イベントをインターセプトできるようにしたいと考えています。Vista の高度なセキュリティ機能により、shutdown コマンドが呼び出された後に実行されているアプリケーションはすべて停止され、リストに表示され、ユーザーはそれらを操作するように求められます。
これを克服する方法と、Vista で使用する必要があるイベントを知っている人はいますか?
ありがとう。
WPF のアプリケーション オブジェクトを使用して、その SessionEnding イベントをサブスクライブできます。次に、SessionEndingCancelEventArgs.ReasonSessionEnding列挙を調べて、セッションが終了する理由 (LogOff または Shutdown) を正確に判断できます。
あなたが見たいと思うかもしれないものはここにあります - Windows Vistaのアプリケーションシャットダウンの変更. 基本的に、あなたが望むもののために、それはすべて WM_QUERYENDSESSION を中心に展開します。
これは .net フレームワークで公開されていることに注意してください。代わりに、ネイティブ関数 (p/invoke) を使用し、コードで wndproc をフックして Windows メッセージに応答する必要があります。
例 (シャットダウンしない理由を示す) については、Windows Vista - ShutdownBlockReasonCreate in C#を参照してください。
イベントを利用する
WPF の Application.SessionEnding。
Microsoft.Win32.SystemEvents の SessionEnding / SessionEnded イベントが探しているものかもしれません。
System.Environment.HasShutdownStarted