HWND
次のように、を使用してメッセージを発信者に返すネイティブライブラリと通信しようとしています。
private void Example()
{
using (
var hwnd = new HwndSource(
new HwndSourceParameters("I sense a disturbance in the force...") {HwndSourceHook = WndProc}
)
)
{
//send hwnd.handle to native library
while (true) { }
}
}
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool ishandled)
{
ishandled = false;
Console.WriteLine("Intercepted message: 0x{0:X}", msg);
return IntPtr.Zero;
}
ネイティブライブラリの呼び出しが省略されている場合でも、次のメッセージのみを(順番に)受信します。
- 0x0001:
WM_CREATE
- 0x0018:
WM_SHOWWINDOW
- 0x0046:
WM_WINDOWPOSCHANGING
- 0x0046:
WM_WINDOWPOSCHANGING
- 0x001C:
WM_ACTIVATEAPP
- 0x0086:
WM_NCACTIVATE
- 0x007F:
WM_GETICON
- 0x007F:
WM_GETICON
- 0x007F:
WM_GETICON
- 0x0006:
WM_ACTIVATE
- 0x0281:
WM_IME_SETCONTEXT
- 0x0282:
WM_IME_NOTIFY
- 0x0007:
WM_SETFOCUS
- 0x0085:
WM_NCPAINT
- 0x0014:
WM_ERASEBKGND
- 0x0047:
WM_WINDOWPOSCHANGED
- 0x0083:
WM_NCCALCSIZE
- 0x0085:
WM_NCPAINT
- 0x0014:
WM_ERASEBKGND
- 0x0005:
WM_SIZE
- 0x0003:
WM_MOVE
- 0x000D:
WM_GETTEXT
この後、HwndSource
周囲に対応するウィンドウをドラッグできますが、サイズを変更したり閉じたりすることはできません。さらに、オペレーティングシステムは、このウィンドウが応答していないと主張します。
このウィンドウが応答を停止するのはなぜですか。また、メッセージを傍受し続けるにはどうすればよいですか。