我尝试使用SnedKeys:
SendKeys.SendWait("^" + "http://stackoverflow.com/");
我想要做的是模拟Ctrl +链接的组合,以便在后台打开一个新的浏览器选项卡。 从chrome文档:"按Ctrl键并单击链接在后台的新选项卡中打开链接"
我先尝试过:
SendKeys.Send("^" + "http://stackoverflow.com/");
然后得到例外:
出现InvalidOperationException
SendKeys无法在此应用程序内运行,因为应用程序未处理Windows消息。更改应用程序以处理消息,或使用SendKeys.SendWait方法。
答案 0 :(得分:2)
Ctrl +链接仅在您单击鼠标时有效。由于你想发送密钥,你需要使用适当的按键(Ctrl + N,然后是url,然后输入),所以我会这样做:
SendKeys.SendWait("^n");
SendKeys.SendWait("http://www.stackoverflow.com~");
测试此代码的完整代码(正确激活窗口):
[DllImport("user32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
// For Windows Mobile, replace user32.dll with coredll.dll
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr GetWindow(IntPtr hWnd, GetWindow_Cmd uCmd);
enum GetWindow_Cmd : uint
{
GW_HWNDFIRST = 0,
GW_HWNDLAST = 1,
GW_HWNDNEXT = 2,
GW_HWNDPREV = 3,
GW_OWNER = 4,
GW_CHILD = 5,
GW_ENABLEDPOPUP = 6
}
private void button_Click(object sender, RoutedEventArgs e)
{
IntPtr chromeWindow = FindWindow("Chrome_WidgetWin_1", null);
IntPtr chrome = GetWindow(chromeWindow, GetWindow_Cmd.GW_HWNDNEXT);
SetForegroundWindow(chrome);
SendKeys.SendWait("^n");
SendKeys.SendWait("http://www.stackoverflow.com~");
}
注意,我使用了here描述的方法来查找和激活chrome窗口。