Visit Mozilla.org

Talk:Code snippets:Finding Window Handles

From MDC

How to add this code to a java file to build into an xpi extension?

Looks pretty insane to me. How about this:

nsCOMPtr<nsIInterfaceRequestor>
  requestor(do_QueryInterface(aWindow, &rv));
NS_ENSURE_SUCCESS(rv, rv);

nsCOMPtr<nsIWebNavigation> nav;
rv = requestor->GetInterface(NS_GET_IID(nsIWebNavigation),
  getter_AddRefs(nav));
NS_ENSURE_SUCCESS(rv, rv);

nsCOMPtr<nsIDocShellTreeItem> treeItem(do_QueryInterface(nav, &rv));
NS_ENSURE_SUCCESS(rv, rv);

nsCOMPtr<nsIDocShellTreeOwner> treeOwner;
rv = treeItem->GetTreeOwner(getter_AddRefs(treeOwner));
NS_ENSURE_SUCCESS(rv, rv);

requestor = do_QueryInterface(treeOwner, &rv);
NS_ENSURE_SUCCESS(rv, rv);

nsCOMPtr<nsIXULWindow> xulWindow;
rv = requestor->GetInterface(NS_GET_IID(nsIXULWindow), getter_AddRefs(xulWindow));
NS_ENSURE_SUCCESS(rv, rv);

nsCOMPtr<nsIDocShell> docShell;
rv = xulWindow->GetDocShell(getter_AddRefs(docShell));
NS_ENSURE_SUCCESS(rv, rv);

nsCOMPtr<nsIBaseWindow> baseWindow(do_QueryInterface(docShell, &rv));
NS_ENSURE_SUCCESS(rv, rv);

nativeWindow theNativeWindow;
rv = baseWindow->GetParentNativeWindow( &theNativeWindow );
NS_ENSURE_SUCCESS(rv, rv);

HWND hWnd = reinterpret_cast<HWND>(theNativeWindow);
NS_ENSURE_TRUE(mWnd, NS_ERROR_UNEXPECTED);

Note that I'm trying to put together some interfaces for native operating system functionality so hopefully they'll be a proper API for this in the future.