C# SendMessage不使用InternetExplorer对象

C# SendMessage不使用InternetExplorer对象,c#,internet-explorer,sendmessage,user32,shdocvw,C#,Internet Explorer,Sendmessage,User32,Shdocvw,我试图模拟InternetExplorer对象的鼠标左键单击,即使IE对象是背景窗口。我使用的系统功能是SendMessage。以下是相关代码 [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)] public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); InternetExp

我试图模拟InternetExplorer对象的鼠标左键单击,即使IE对象是背景窗口。我使用的系统功能是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
[DllImport(“user32.dll”,CharSet=CharSet.Auto,SetLastError=false)]
公共静态外部IntPtr SendMessage(IntPtr hWnd、uint Msg、IntPtr wParam、IntPtr lParam);
InternetExplorer IE=新的InternetExplorer();
IntPtr句柄=(IntPtr)IE.HWND;
int x=50;
int y=50;

IntPtr lParam=(IntPtr)((y您不能用postmessage/sendmessage模拟鼠标事件,因为鼠标上下事件总是在当前的光标位置发送。您可以先设置鼠标位置,但当窗口在后台或最小化时,这将不起作用


更多信息:,和。

FYI有更好的方法来调用对元素的单击(通过DOM)如果这是你的意图,谢谢,Alex。我当然会尝试DOM方法。但是,在此期间,我仍然想了解SendMessage不起作用的原因。答案是:而且:我在这里没有看到的是你如何设置鼠标位置。如果你的意图是让鼠标悬停在某个东西上,请单击它之前的位置如果没有,你需要鼠标指针在合适的位置,然后点击你想要的东西。