В приведенном ниже коде hWnd
является «дескриптором URL» в Spy++:
'WorkerW -> ReBarWindow32 -> Address Band Root -> Edit'
URL - это то, что я хочу открыть.
Я использую тот же метод, чтобы открывать вкладки в IE7 и соответствующим образом отправлять hWnd
. Я вижу, что это отлично работает для IE7, а не для IE8. В IE8 открывается только 4 вкладки, а затем IE8 перестает выполнять запрос SendMessage; тем не менее, я все еще могу нажать CTRL+T
ИЛИ ALT+Enter
, чтобы открыть новые вкладки в IE8 (поэтому IE8 по-прежнему реагирует).
/**
* Open URL in IE (open new tab when newTab is true)
* hWnd is found at runtime
**/
private void LaunchURLinIE(IntPtr hWnd, String url, bool newTab = false)
{
StringBuilder ob = new StringBuilder(url);
// Type text in the URL window
SendMessage(hWnd, WM_SETTEXT, 0, ob);
if (!newTab)
{ // Press Enter
SendMessage(hWnd, WM_KEYDOWN, VK_RETURN, 1);
}
else
{ // Press ALT Enter to open new tab
SendMessage(hWnd, WM_SYSKEYDOWN, VK_RETURN, 1 << 29);
}
}
Моя среда: Windows XP с пакетом обновления 3 [32-разрядная ОС], IE8 версии 8.0.6001.18702
Итак, это IE8 или что-то, что мне не хватает?
ОБНОВЛЕНИЕ – 1 Я обновил комментарии к коду, чтобы было понятно, что делает код. Приведенный выше код отлично работает для IE7 (протестировано до 15 вкладок), но в IE8 открывается только до 4 вкладок.
Обновление - 2 Мне удалось решить эту проблему, используя PostMessage вместо SendMessage.
private void LaunchURLinIE(IntPtr hWnd, String url, bool newTab = false) { StringBuilder ob = new StringBuilder(url); // Type text in the URL window SendMessage(hWnd, WM_SETTEXT, 0, ob); if (!newTab) { // Press Enter PostMessage(hWnd, WM_KEYDOWN, VK_RETURN, 1); } else { // Press ALT Enter to open new tab PostMessage(hWnd, WM_SYSKEYDOWN, VK_RETURN, 1
hWnd
не является фиксированным значением, верно? Вы не можете просто получить его один раз с помощью Spy++ и использовать его с тех пор. Каждый раз, когда приложение закрывается и снова открывается (или повторно создается дескриптор элемента управления), значение будет меняться. - person Cody Gray   schedule 04.04.2011