私はかなり長い間探してきましたが、これを行うには良い方法が見つからないようです。ウィンドウレスのC#プロセスでのWM_イベントの処理
基本的には、WPF(可視ウィンドウなし)を使用するC#プロセスがあり、WM_イベントを処理する必要があります(たとえば、WM_CLOSE
またはWM_DESTROY
など)。ユーザーがログオフするときにエレガントにシャットダウンできるようにします。またはマシンを再起動します)。
System.Windows.InteropServices
を使用してAddHook
を呼び出して、WndProc
になる関数へのポインタを指定することをお勧めするいくつかのソリューションがあります。この問題は、私が知る限り、実際に表示されているウィンドウに依存します(この場合はウィンドウがありません)。
提案されているが動作しない別の方法は、WinFormのWndProc
メソッドをオーバーライドすることですが、このプロセスには表示されるフォームやウィンドウがありません。
メッセージ専用ウィンドウを参照しているものも見つかりました。まだWM_イベントを受信しているインビジブルウィンドウのようなものです。私が見たことから、これはMicrosoft.WindowsCE.Forms
アセンブリでのみ利用可能です。私のプロジェクトでこのアセンブリへの参照を追加し、次のようにMessageWindowをサブクラス化しました:http://msdn.microsoft.com/en-us/library/microsoft.windowsce.forms.messagewindow.aspxしかし、それでも動作しないようです。 WndProc内のブレークポイントはヒットしていません。
ヒント?
のように非表示のウィンドウを作成できます。私はそのレベルでプレイしてからしばらくしていますが、HWNDには0を使用していますどこかのデスクトップのHWNDだった)。検証するために私のアーカイブを掘り下げなければならないだろうが、私はこれがうまくいくと確信している。 –