Как вызвать диалог поиска из элемента управления веб-браузера? - PullRequest
1 голос
/ 28 августа 2010

У меня есть элемент управления веб-браузера, который перешел на данную страницу и готов.Теперь я хочу вызвать диалоговое окно поиска Internet Explorer, когда пользователь нажимает определенную кнопку на моей странице.Пользователь уже может вызвать диалоговое окно поиска, нажав «Ctrl + F», но я хочу отдельную кнопку для этого действия.

Я нашел это: http://support.microsoft.com/kb/329014

НоС ним связаны следующие проблемы:

  1. На странице сказано, что этот метод может не работать в более поздних версиях Internet Explorer:

    Предупреждение В этом примере используетсянедокументированный GUID группы команд, который может быть изменен в будущем.Хотя этот образец был протестирован для корректной работы с Internet Explorer 6 и более ранними версиями, нет гарантии, что эти методы будут продолжать успешно работать в будущих версиях.

  2. Я не могу скомпилироватькод.Я добавил ссылки, описанные на странице, но получаю сообщение об ошибке, сообщающее, что не удалось найти пространство имен AxSHDocVw.

Ответы [ 2 ]

5 голосов
/ 28 августа 2010

Я сам нашел решение: если имя элемента управления веб-браузера - «web», вы можете отправить ему ключ «Crtl + f» со следующим кодом:

web.Focus();
SendKeys.Send("^f");

Я проверил это ив Internet Explorer 8 появилось диалоговое окно поиска.

1 голос
/ 04 августа 2013

Я использую Windows7 и .Net4.0 / WPF (не Win Forms).Решение с

web.Focus();
SendKeys.Send("^f");

у меня не сработало.Во-первых, команда send создает исключение System.InvalidOperationException (в котором говорится, что мое приложение не обрабатывает событие и что мне следует использовать SendKeys.SendWait ()).Во-вторых, SendKeys.SendWait ("^ f") просто ничего не делает.

Мое решение требует фокусировки окна документа вместо окна браузера:

System.Windows.Controls.WebBrowser HtmlView;  //from xaml
HTMLDocument HtmlDoc { get { return (HTMLDocument)HtmlView.Document; } }
HtmlDoc.parentWindow.focus();  //when focusing this window sending Ctr-F has an effect

Далее я использую keybd_event ()отправить ключевое сообщение

[DllImport("user32.dll")]
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, 
                               UIntPtr dwExtraInfo);

byte vKey_f = 0x46;
byte vKey_ctr = 0x11;
byte f_down = 0x21;
byte f_up = 0xa1;
byte ctrl_down = 0x1d;
byte ctrl_up = 0x9d;
byte event_keyup = 0x0002;

keybd_event(vKey_ctr, ctrl_down, 0, UIntPtr.Zero); // Ctrl Press
keybd_event(vKey_f, f_down, 0, UIntPtr.Zero); // f Press
keybd_event(vKey_f, f_up, event_keyup, UIntPtr.Zero); // f Release
keybd_event(vKey_ctr, ctrl_up, event_keyup, UIntPtr.Zero); // Ctrl Release

Почему «^ f» не работает в моем случае - я не знаю.Но keybd_event () работает нормально, хотя msdn (http://msdn.microsoft.com/en-us/library/windows/desktop/ms646304(v=vs.85).aspx) заявляет: «Эта функция была заменена. Вместо этого используйте SendInput.». Я попытался SendInput (), но не смог увидеть эффект.

Дополнительная информацияto keybd_event ():

...