2015-05-22 2 views
1

Я пытался использовать SnedKeys:Как смоделировать Ctrl + link?

SendKeys.SendWait("^" + "http://stackoverflow.com/"); 

Что я хочу сделать, чтобы имитировать комбинацию Ctrl + ссылку так будет открыть новую вкладку браузера в фоновом режиме. Из хромированной документа: «Нажмите Ctrl и щелкните ссылку Открыть ссылку в новой вкладке в фоновом режиме»

Я также попытался перед первым:

SendKeys.Send("^" + "http://stackoverflow.com/"); 

Но затем получить исключение:

InvalidOperationException

SendKeys не может запускаться внутри этого приложения, потому что приложение не обрабатывает сообщения Windows. Либо измените приложение для обработки сообщений, либо используйте метод SendKeys.SendWait.

+0

Ну, 'InvalidOperationException' не требует пояснений. См. Также http://stackoverflow.com/q/8294139 –

ответ

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 на поиске и активации окна хром.

+0

John это работает с SendKeys, но есть ли способ скрыть это окно или сделать так, что он откроет его в фоновом режиме, чтобы пользователь не увидел, что программа открыть новое хромированное окно? Я хочу сказать, что фокус останется в текущем окне, в котором я нахожусь, и не буду двигаться, чтобы сосредоточиться на новом хромированном окне. –

+0

Вы можете вызвать this.Acitvate(), чтобы повторно активировать вашу форму. Если вы хотите, чтобы все было полностью в фоновом режиме, вам нужно будет использовать некоторые сообщения Windows для отправки текста вместо использования sendkeys. –