を使用してフォーム内の WebBrowser コントロールにマウス クリックを送信しようとしPostMessage()
ましたが、かなり重大な問題に遭遇しました。私が達成しようとしているのは、フォームが最小化されている間にこの WebBrowser でマウス クリックをシミュレートすることです。通常PostMessage()
はこれで問題なく動作しますが、フォームにフォーカスがある場合にのみ機能するようです。これにより、WebBrowser コントロールにロードしている特定の Web サイトがマウス イベントを処理する前にフォーカスされているかどうかを確認するためのチェックが行われていると思われます。
これは、プログラムでクリックを送信する方法です。
private void SendClick(Point location)
{
resetHandle = true;
StringBuilder className = new StringBuilder(100);
while (className.ToString() != "Internet Explorer_Server")
{
handle = GetWindow(handle, 5); // 5 == child
GetClassName(handle, className, className.Capacity);
//MessageBox.Show(className.ToString());
}
IntPtr lParam = (IntPtr)((location.Y << 16) | location.X);
IntPtr wParam = IntPtr.Zero;
const uint downCode = 0x201;
const uint upCode = 0x202;
const uint moveCode = 0x200;
PostMessage(handle, moveCode, wParam, lParam); //move mouse
PostMessage(handle, downCode, wParam, lParam); // mousedown
PostMessage(handle, upCode, wParam, lParam); // mouseup
}
これは resetHandle が行うことです:
private void timer3_Tick(object sender, EventArgs e)
{
if (resetHandle == true)
{
handle = webBrowser1.Handle;
resetHandle = false;
}
}
マウス イベントをバックグラウンド ウィンドウに送信するより良い方法があるかどうかはわかりませんが、どんなアイデアも受け入れます。私が本当に求めているのは、実際にはまだ最小化されているときに、ウィンドウにフォーカスがあると信じ込ませることができるかどうかです。
どんな助けでも大歓迎です!