Могу ли я перечислить вкладки & quot; MozillaWindowClass & quot; HWND через XPCOM?

IE обеспечивает легкий доступ к IWebBrowser2 а также IHtmlDocument2 из HWND кадра IE. Так что вы EnumWindows а также EnumChildWindows а затем вы тестируете класс и, как только вы найдете правильные, вы можете легко взаимодействовать с ними.

Если есть способ перечислить все открытые вкладки Mozilla Firefox в "MozillaWindowClass" (имея его HWND), с помощью XPCOM а C ++?

Я гуглил долго и сильно, но не могу найти много на эту тему. Я не хочу разрабатывать расширение / надстройку, но хочу управлять браузером извне из несвязанного EXE, а не из DLL расширения. Или, по крайней мере, какой-то доступ только для чтения к нему.

0

Решение

Вы не можете использовать 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 и что-то с ней делать.

1

Другие решения


По вопросам рекламы [email protected]