MS-Agent的使用简介
2008年11月3日星期一
通常我们都见过Office里的帮助助手,也见过瑞星里的卡卡,感觉很奇怪。其实,微软早在操作系统里提供了一个COM接口,通过调用COM接口可以实现类型的效果,如果想自定义的话,可以在微软的网站下载相关的工具。下面通过一个示例简要介绍实现过程:
// 创建MS-Agent(使用COM)
::CoInitialize(NULL);
IUnknown * pUnk;
long lShowID;
IDispatch *pCharatmp;
IAgentCharacter *pChara;
//获得IAgent接口
CoCreateInstance (CLSID_AgentServer,
NULL,
CLSCTX_LOCAL_SERVER,
IID_IAgent,
(LPVOID*)&pUnk);
pUnk->QueryInterface(IID_IAgent,(LPVOID*)&pAgent);
pUnk->Release();
if(lID != 0)
pAgent->Unload(lID);
pAgent->Load(COleVariant(_T("merlin.acs")),&lID,&lShowID);
pAgent->GetCharacter(lID,&pCharatmp);
//获得IAgentCharacter接口
pCharatmp->QueryInterface(IID_IAgentCharacter,(LPVOID*)&pChara);
pCharatmp->Release();
pChara->Show(FALSE,&lShowID);//显示助手
pChara->MoveTo(200,200,100,&lShowID);
BSTR bstr1 = SysAllocString(L"HELLO");//构造BSTR类型字符
BSTR bstr2 = SysAllocString(L"Congratulate");
for (int i = 0; i < 10; i++)
{
pChara->Speak(bstr1,NULL,&lShowID);//让助手说话
pChara->Play(bstr2,&lShowID);//
}
SysFreeString(bstr1);//释放STR类型字符
SysFreeString(bstr2);
pChara->Release();
// 释放MS-Agent使用的资源,并关闭COM接口
pAgent->Unload(lID);
pAgent->Release();
::CoUninitialize();
运行效果图: