IE
обеспечивает легкий доступ к IWebBrowser2
а также IHtmlDocument2
из HWND
кадра IE. Так что вы EnumWindows
а также EnumChildWindows
а затем вы тестируете класс и, как только вы найдете правильные, вы можете легко взаимодействовать с ними.
Если есть способ перечислить все открытые вкладки Mozilla Firefox в
"MozillaWindowClass"
(имея егоHWND
), с помощьюXPCOM
а C ++?
Я гуглил долго и сильно, но не могу найти много на эту тему. Я не хочу разрабатывать расширение / надстройку, но хочу управлять браузером извне из несвязанного EXE, а не из DLL расширения. Или, по крайней мере, какой-то доступ только для чтения к нему.
Вы не можете использовать C ++ / XPCOM с Firefox извне, как вы используете COM с IE, вы можете использовать C ++ / XPCOM только из двоичного компонента вашего расширения. Таким образом, вы не сможете сделать это без написания расширения, и в этот момент легче прослушивать события табуляции из JS и уведомлять ваш двоичный компонент.
Обратите внимание, что поддержка бинарных компонентов в FF — это PITA, поэтому я не советую вам идти по этому пути без веской причины.
Однако, если у вас есть расширение и двоичный компонент, способ получить HWND из вкладки заключается в следующем (надеюсь, что он все еще работает, мы прекратили поддерживать FF во многих версиях назад):
static HWND GetWndHandle(nsIXULWindow * window) {
HWND hwnd = NULL;
nsCOMPtr<nsIDocShell> docshell;
nsresult res = window->GetDocShell(getter_AddRefs(docshell));
if(NS_SUCCEEDED(res)) {
nsCOMPtr<nsIBaseWindow> basewnd(do_QueryInterface(docshell));
if(basewnd) {
res = basewnd->GetParentNativeWindow((nativeWindow*)&hwnd);
if(NS_FAILED(res)) hwnd = NULL;
}
}
return hwnd;
}
С этим и уведомлениями от JS ваш двоичный компонент может обеспечить поиск вкладки от HWND и что-то с ней делать.