阅读:8147回复:1
如何用自己编写的exe去操纵mozilla的cookiemanager和password manager?
我在windows下编写了一个程序,想用它操作mozilla的cookie manager和password manager,以便用程序添加删除cookie和password信息. 以下是我的代码
// MySample.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <stdio.h> #include "prenv.h" #include "nspr.h" #include "nsXPCOMPrivate.h" // for XPCOM_DLL defines. #include "nsXPCOMGlue.h" #include "nsIComponentManager.h" #include "nsIComponentRegistrar.h" #include "nsIServiceManager.h" #include "nsCOMPtr.h" #include "nsILocalFile.h" #include "nsEmbedString.h" #include "nsIDirectoryService.h" #include "nsDirectoryServiceDefs.h" #include "nsICookieManager.h" #include "nsICookie.h" #include "nsIWebBrowser.h" //#include <nsISomething.h> int main() { static const char szContractId[] = "Your component's contract ID goes here"; nsresult rv; // Initialize XPCOM and check for failure ... // rv = NS_InitXPCOM(nsnull, nsnull); rv = NS_InitXPCOM2(nsnull, nsnull, nsnull); if ( NS_FAILED(rv) ) { printf("Calling NS_InitXPCOM returns [%x].\n", rv); return -1; } nsIComponentManager* pComponentManager = NULL; rv = NS_GetComponentManager(&pComponentManager); if ( NS_FAILED(rv) ) { printf("NS_GetComponentManager returns [%x].\n", rv); return -1; } // nsCOMPtr<nsIServiceManager> servMan; // NS_InitXPCOM2(getter_AddRefs(servMan), nsnull, nsnull); // nsCOMPtr<nsIComponentRegistrar> registrar = do_QueryInterface(servMan); // NS_ASSERTION(registrar, "Null nsIComponentRegistrar"); // if (registrar) // registrar->AutoRegister(nsnull); nsCOMPtr<nsIServiceManager> servMan; rv = NS_GetServiceManager(getter_AddRefs(servMan)); if (NS_FAILED(rv)) return -1; nsCOMPtr<nsIComponentRegistrar> registrar = do_QueryInterface(servMan); NS_ASSERTION(registrar, "Null nsIComponentRegistrar"); registrar->AutoRegister(nsnull); nsCOMPtr<nsIWebBrowser> webBrowser; rv = pComponentManager->CreateInstanceByContractID("@mozilla.org/embedding/browser/nsWebBrowser;1", 0 , NS_GET_IID(nsIWebBrowser), getter_AddRefs(webBrowser)); nsCOMPtr<nsICookieManager> cookieManager; rv = pComponentManager->CreateInstanceByContractID("@mozilla.org/cookiemanager;1", 0 , NS_GET_IID(nsICookieManager), getter_AddRefs(cookieManager)); rv = servMan->GetServiceByContractID("@mozilla.org/cookiemanager;1", NS_GET_IID(nsICookieManager), getter_AddRefs(cookieManager)); if (NS_FAILED(rv)) return -1; nsCOMPtr<nsISimpleEnumerator> simpleManager; rv = cookieManager->GetEnumerator(getter_AddRefs(simpleManager)); if (NS_FAILED(rv)) return -1; nsCOMPtr<nsICookie> cookie; PRBool bMoreElements = PR_FALSE; nsACString string; simpleManager->HasMoreElements(&bMoreElements); while(PR_TRUE == bMoreElements) { simpleManager->GetNext(getter_AddRefs(cookie)); simpleManager->HasMoreElements(&bMoreElements); cookie->GetName(string); printf("name = %s\n" , string); cookie->GetValue(string); printf("value = %s\n" , string); } // Shutdown XPCOM NS_ShutdownXPCOM(nsnull); return 0; } 以上代码中 rv = pComponentManager->CreateInstanceByContractID("@mozilla.org/cookiemanager;1", 0 , NS_GET_IID(nsICookieManager), getter_AddRefs(cookieManager)); rv = servMan->GetServiceByContractID("@mozilla.org/cookiemanager;1", NS_GET_IID(nsICookieManager), getter_AddRefs(cookieManager)); 都返回错误,错误信息为无法创建类工厂 , 但是我查了mozilla/component目录下的XPCOM注册信息,cookiemananger;1是被注册过了. 先开始我以为要把我编写的EXE也放在mozilla/component下才能够使程序正确找到cookiemanager的注册信息 , 但是我尝试了一下,还是不行 哪位高手能够指点一下? |
|
1楼#
发布于:2005-06-10 10:34
|
|