弄了整整一个晚上,看了无数大师们的资料,终于把merlin显示在我的桌面上。网上关于这方面的资料有不少,但是照搬这些程序的时候总是有很多错误,下面是CSDN里的一个贴子: CSDN - 专家门诊 - C++ Builder VCL组件使用和开发问题
http://community.csdn.net/Expert/TopicView3.asp?id=4074506
有不少朋友提供的非常有价值的信息,如constantine(飘遥的安吉儿)和F117p((兰色狐狸),但是照搬这些程序仍有很多错误,不能正确调用MS agent.
那么,下面我想和大家分享一下在C++builder中调用Microsoft agent的一些技巧。
step 1: 调用MS agent 首先要安装 microsoft agent 2.0, windows2000 及XP均已安装了该程序,一般情况下不必安装,当然除非是你曾经卸载了它。
step 2:打开C++builder,菜单component ->import activeX control..., 选择 microsoft agent control 2.0,然后install,之后系统会提示你编译,确认。成功后,ms agent 已经安装到了 ActiveX 控件栏上了,名字是TAgent. (这里想谈一下如何卸掉TAgent的方法,可能有人会用到,因为一次安装不成功的话,必须要卸掉重新安装。在BCB里打开dclusr.bpk,在package-dclusr.bpk窗口里把和agentobjects_OCX有关的两个文件remove掉,然后重新compile,再重复step 2)
step 3: 新建一个项目,在Form1里添加如下代码,这些代码可放在form_create里,也可以放在你需要的地方:
char tmp[100]; //用来暂存windows安装目录
GetWindowsDirectory(tmp,100); //取得windows安装目录
String tmppath=String(tmp)+"\msagent\chars\Merlin.acs";
//String(tmp)是把char类型转变为String,然后将文件的完整路径存入tmppath
BSTR Agentname = BSTR("merlin"); //将String 类型转变为 wchar_t*
Variant Agentpath = Variant(tmppath); //将tmppath 类型转变为tagVARIANT
Agent1->Characters->Load(Agentname,Agentpath);
//载入ms agent 人物,Load的格式为Load(wchar_t*,tagVARIANT)
IAgentCtlCharacterEx* Merlin = (IAgentCtlCharacterEx*)Agent1->Characters->Character(Agentname);
把人物指定给一个变量Merlin,当然你可以自己命名
//下面是一些基本的测试,有关ms agent操纵的更详细内容请参阅有关文档
Merlin->Show(Variant(0));
Merlin->MoveTo(100,100,Variant(2));
Merlin->Play(WideString("Search"));
//以上程序在C++Builder 6.0 上编译通过。
总结:BCB中操纵MS agent最多的错误就是数据类型的不匹配,BSTR() 及Variant()则很好地解决了这个问题。大家学习BCB的时候不要着急,这两个函数都是我慢慢试出来的,同时也感谢各网友提供的WideString,c_bstr(),Tvariant()等函数。