lee168
小狐狸
小狐狸
  • UID6678
  • 注册日期2005-06-10
  • 最后登录2005-06-10
  • 发帖数1
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
阅读:7911回复:1

如何用自己编写的exe去操纵mozilla的cookiemanager和password manager?

楼主#
更多 发布于:2005-06-10 10:34
我在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的注册信息 , 但是我尝试了一下,还是不行

哪位高手能够指点一下?
xiaosong8588
小狐狸
小狐狸
  • UID10017
  • 注册日期2005-11-23
  • 最后登录2006-10-07
  • 发帖数10
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
1楼#
发布于:2005-06-10 10:34
http://www.xulplanet.com/forum/

那里高手很多,也许对你有帮助

firefox中文论坛实在令人郁闷。。。。。。。
游客

返回顶部