В этом приведенном ниже коде hWnd
- это «URL Handle» в 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