Страницы: 1
Добрый день!
Хочу написать приложение, которое бы подключалось к запущенному браузеру и могло им управлять и получать из него данные. Как я понял, это возможно с помощью xpcom glue.
Написал следующее тестовое приложение:
#include <stdio.h> #include "nsISupports.h" #include "nsCOMPtr.h" #include "nsXPCOM.h" #include "nsIServiceManager.h" #include "nsICookieManager.h" #include "nsIWindowMediator.h" #include "nsISimpleEnumerator.h" #include "nsIDOMWindowInternal.h" #include "nsServiceManagerUtils.h" #include "nsXPCOMGlue.h" #include "xpcom-config.h" #define XPCOM_GLUE 1 int main() { nsresult rv; static const GREVersionRange greVersion = { "1.8", PR_TRUE, "2", PR_TRUE }; char xpcomPath[256]; rv = GRE_GetGREPathWithProperties(&greVersion, 1, nsnull, 0,xpcomPath, sizeof(xpcomPath)); if (NS_FAILED(rv)) { fprintf(stderr, "Couldn't find a compatible GRE.\n"); return 1; } printf("GRE: %s\n", xpcomPath); nsCOMPtr<nsIServiceManager> servMan; strcpy(xpcomPath,"/usr/lib/libxpcom.so"); printf("GRE: %s\n", xpcomPath); XPCOMGlueStartup(xpcomPath); rv = NS_InitXPCOM2(getter_AddRefs(servMan), nsnull, nsnull); if (NS_FAILED(rv)) { printf("ERROR: XPCOM intialization error [%x].\n", rv); return -1; } /* nsCOMPtr<nsIWindowMediator> windowMediator (do_GetService(NS_WINDOWMEDIATOR_CONTRACTID)); if (windowMediator) { printf("windowMediator ok\n"); } else { printf("fuck\n"); } */ rv = NS_GetServiceManager(getter_AddRefs(servMan)); if (NS_FAILED(rv)) printf("1\n"); nsCOMPtr<nsIWindowMediator> windowMediator; rv = servMan->GetServiceByContractID("@mozilla.org/appshell/window-mediator;1",NS_GET_IID(nsIWindowMediator),getter_AddRefs(windowMediator)); printf("2\n"); nsCOMPtr<nsISimpleEnumerator> windowEnumerator; windowMediator->GetEnumerator(nsnull, getter_AddRefs(windowEnumerator)); printf("3\n"); PRBool more; windowEnumerator->HasMoreElements(&more); printf("4\n"); printf("more %d\n", more); while (more) { printf("5\n"); nsCOMPtr<nsISupports> protoWindow; windowEnumerator->GetNext(getter_AddRefs(protoWindow)); if (protoWindow) { nsCOMPtr<nsIDOMWindowInternal> domWindow = do_QueryInterface(protoWindow); if (domWindow) { printf ("Found DOM window!!!\n"); } else { printf ("no window\n"); } } else { printf("NO WINDOFZZ\n"); } windowEnumerator->HasMoreElements(&more); } // Shutdown XPCOM NS_ShutdownXPCOM(nsnull); XPCOMGlueShutdown(); }
и ничего :-( Пробовал с разными GRE (как видно из кода)
список окон возвращается всегда 0
Если собирать этот код как компоненту, то все в порядке, находится DOM окно ...
Я чего то не понимаю в этой жизни? :-((
Отсутствует
Страницы: 1