1

私はかなり長い間見回してきましたが、これを行う良い方法を見つけることができないようです.

基本的に、私は WPF を使用する C# プロセス (可視ウィンドウを持たない) を持っており、WM_ イベントを処理する必要があります (ユーザーがログオフまたはマシンの再起動を選択したときにエレガントにシャットダウンできるようにするため) WM_CLOSEWM_DESTROY

を使用して関数へのポインタをSystem.Windows.InteropServices呼び出して提供することを提案する、私が見た多くのソリューションがあります。これに関する問題は、私が知る限り、実際に表示されているウィンドウに依存していることです (この場合、ウィンドウはありません)。AddHookWndProc

提案されているが機能しない別のWndProc方法は、WinForm のメソッドをオーバーライドすることですが、このプロセスには目に見えるフォームやウィンドウがありません。

メッセージのみのウィンドウに言及しているものも見つかりました。まだ WM_ イベントを受け取るある種の非表示のウィンドウ。私が見たところ、これはMicrosoft.WindowsCE.Formsアセンブリでのみ使用できます。http://msdn.microsoft.com/en-us/library/microsoft.windowsce.forms.messagewindow.aspxに示されているように、プロジェクトにこのアセンブリへの参照を追加し、MessageWindow をサブクラス化しましたが、それでも機能しないようです。WndProc 内のブレークポイントはヒットしていません。

どんな手掛かり?

4

1 に答える 1

1

何を求めているのか考えてみてください。ウィンドウがない場合、アプリケーションはどのようにしてウィンドウ メッセージを受信できますか (メッセージがウィンドウのハンドルに送信されることを考慮してください)。

それは、「メール アドレスを持っていないのに、どうすればメールを受信できるのですか?」と言っているようなものです。

Michael Entin は、シャットダウン中の Windows の動作について説明しています

とにかくユーザーがログオフすると、ユーザーのセッションで実行されているすべてのプロセスが自動的に閉じられることを 99% 確信しているので、これは問題にはなりません。本当にこのウィンドウ メッセージを処理する必要がある場合は、Any way to create a hidden main window in C#?に従って隠しウィンドウを作成できます。

于 2012-03-06T00:23:59.703 に答える