現在のプロセスのすべてのメッセージを覗き見し、特定のメッセージを探し、特定のメッセージが検出されたときにイベントを発生させるために使用できるメッセージ ループをコントロールに実装しようとしています。
これは私の現在のコードです:
public void MessageHandler()
{
MSG msg;
while (GetMessage(out msg, IntPtr.Zero, 0, 0) > 0)
{
if (msg.message == 272)
{
// Fire event here
}
else
{
TranslateMessage(ref msg);
DispatchMessage(ref msg);
}
}
}
[DllImport("user32.dll")]
static extern sbyte GetMessage(out MSG lpMsg, IntPtr hWnd, uint wMsgFilterMin, uint wMsgFilterMax);
[DllImport("user32.dll")]
static extern bool TranslateMessage([In] ref MSG lpMsg);
[DllImport("user32.dll")]
static extern IntPtr DispatchMessage([In] ref MSG lpmsg);
このループは現在非同期で実行されています。私が抱えている問題は、メッセージを受け取っていないように見えることです。ループは GetMessage() 呼び出しで終了します。
ループ while(true) を実行して、GetMessage() からの戻り値が <= 0 の場合は続行しようとしましたが、同じ結果が得られたようです。
任意の入力をいただければ幸いです。