PeekMessage を動作させることができません。実際には、メッセージが殺到することが予想されますが、戻り値は 0 です。
私は WinForm を使用し、メッセージを覗くバックグラウンド スレッドを開始し、マウスでウィンドウを使用します。ウィンドウはいつものように使用できますが、メッセージをのぞくことができません。私は何を間違っていますか?最後のエラーは常に 0 です。
[StructLayout(LayoutKind.Sequential)]
public struct NativeMessage
{
public IntPtr handle;
public uint msg;
public IntPtr wParam;
public IntPtr lParam;
public uint time;
public Point p;
public override string ToString()
{
return handle + ", " + msg + ", " + wParam + ", " + lParam + ", " + time + ", " + p;
}
}
[DllImport("user32.dll")]
public static extern int PeekMessage(out NativeMessage lpMsg, IntPtr window, uint wMsgFilterMin, uint wMsgFilterMax, uint wRemoveMsg);
public Form1()
{
ThreadPool.QueueUserWorkItem(o => run());
}
private void run()
{
for (int i = 0; i < 1000000; )
{
NativeMessage a = new NativeMessage();
int c = PeekMessage(out a, IntPtr.Zero, (uint) 0, (uint) 0, (uint) 0);
if (c != 0)
trace(" -> " + c); // prints strings
}
}
解決済み:
Show()
フォームを表示するためにメインスレッドを呼び出しました- メインスレッドをリダイレクトしてメッセージをログに記録しました
- (XY の問題ではなく、PeekMessage が機能するか、少なくとも使用方法を理解する必要がありました)
(私が犯したエラーを教えてくれてありがとう)