SendMessage 不适用于 InternetExplorer 对象

SendMessage not working with InternetExplorer object

我正在尝试为 InternetExplorer 对象模拟鼠标左键单击,即使 IE 对象是背景时也是如此 window。我使用的系统函数是 SendMessage。下面是相关代码。

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

InternetExplorer IE = new InternetExplorer();
IntPtr handle = (IntPtr) IE.HWND;

int x = 50;
int y = 50;
IntPtr lParam = (IntPtr)((y << 16) | x); // X and Y coordinates of the click
IntPtr wParam = IntPtr.Zero;

const uint downCode = 0x0201; 
const uint upCode = 0x202;
SendMessage(handle, downCode, wParam, lParam); // mousedown
SendMessage(handle, upCode, wParam, lParam); // mouseup

我确定我指定的位置会在左键单击时生成一个新的 IE window。但是,使用上面的代码不会发生这种情况。那么,我在这里缺少什么?

更新
OS 是 Windows 7 专业。 IDE 是 Visual Studio 2013 Pro.

我还尝试添加清单并为每个 this page 指定 UIAccess="true"。但是没用。

您不能用 postmessage/sendmessage 模拟鼠标事件,因为鼠标 up/down 事件总是在 当前 光标位置发送。您可以先设置鼠标位置,但是当 window 在后台或最小化时,这将不起作用。

更多信息:here, here and here.