我偿试用三种不同的api函数来向IE地址栏发送回车键,但是postmessage 和 sendmessage都不能真正完成回车的功能,似乎只有换行的功能,只有keybd_event完成了回车的功能,有朋友知道使用postmessage 和 sendmessage怎么样才能完成回车功能吗?我的代码: [DllImport("user32.dll", EntryPoint = "SendMessage")]
public static extern int SendMessage(
int hwnd,
int wMsg,
int wParam,
int lParam
); [DllImport("user32.dll", EntryPoint = "PostMessage")]
public static extern int PostMessage(
int hwnd,
int wMsg,
int wParam,
int lParam
);
[DllImport("user32.dll")]
static extern void keybd_event(Keys bVk, byte bScan, uint dwFlags, uint dwExtraInfo); private const int WM_KEYDOWN = 0x100;
private const int WM_KEYUP = 0x101;
private const int WM_CHAR = 0x102;
private const int WM_SETFOCUS = 0x007;
private int VK_RETURN = 13; private void timer1_Tick(object sender, EventArgs e)
{
PostMessage(3150852, WM_SETFOCUS, 0, 0);//设焦点 SendMessage(3150852, WM_KEYDOWN, VK_RETURN, 0);//SendMessage发送回车
SendMessage(3150852, WM_CHAR, VK_RETURN, 0);
SendMessage(3150852, WM_KEYUP, VK_RETURN, 0); keybd_event(Keys.Enter, 0, 0, 0);//keybd_event发送回车
PostMessage(3150852, WM_KEYDOWN, VK_RETURN, 0);//PostMessage发送回车
}
public static extern int SendMessage(
int hwnd,
int wMsg,
int wParam,
int lParam
); [DllImport("user32.dll", EntryPoint = "PostMessage")]
public static extern int PostMessage(
int hwnd,
int wMsg,
int wParam,
int lParam
);
[DllImport("user32.dll")]
static extern void keybd_event(Keys bVk, byte bScan, uint dwFlags, uint dwExtraInfo); private const int WM_KEYDOWN = 0x100;
private const int WM_KEYUP = 0x101;
private const int WM_CHAR = 0x102;
private const int WM_SETFOCUS = 0x007;
private int VK_RETURN = 13; private void timer1_Tick(object sender, EventArgs e)
{
PostMessage(3150852, WM_SETFOCUS, 0, 0);//设焦点 SendMessage(3150852, WM_KEYDOWN, VK_RETURN, 0);//SendMessage发送回车
SendMessage(3150852, WM_CHAR, VK_RETURN, 0);
SendMessage(3150852, WM_KEYUP, VK_RETURN, 0); keybd_event(Keys.Enter, 0, 0, 0);//keybd_event发送回车
PostMessage(3150852, WM_KEYDOWN, VK_RETURN, 0);//PostMessage发送回车
}
而SendMessage 不行,是因为你拿的窗口句柄不对,看一看如何获取IE地址栏的句柄。
还有,句柄是系统动态分配的,不可能定死的。
SendMessage(3150852, WM_KEYDOWN, VK_RETURN, 0);//就可以了,估计你找的句柄不对