有关mshtml的一点问题

lucifer2012_NJ 2012-09-24 03:31:47
是这样的,自己写了个程序做一个自动登录的功能,包括CS应用,WEB应用,我下载了SPY++的源码,CS应用基本没问题,SPY可以截取到基本的控件句柄和ID(当然,像DirectX这类的登录窗口也许截取不到,比如QQ那种,这个我打算放弃先),但是因为SPY++本身对浏览器的元素ID可操作性很低,而我不能每次通过查看网页源代码来获取一系列程序需要的参数吧?
那么我想这样来做,修改一下SPY源码,当捕捉到IE窗口的时候(获得IE窗口句柄还是没问题的^_^),枚举网页上所有的元素,但是现在只能通过MSHTML::IHTMLInputElementPtr的Gettype()获得到type,而class,name,id这些,IHTMLInputElementPtr接口貌似没提供函数,我查了一下mshtml.tlh里面,发现这个类MSHTML::DispHTMLInputElementPtr中包含了,GetclassName(),Getid()函数,但是转了接口以后,却一直报错,百思不得其解,msdn也没有很好的例子,可能有点偏吧。我贴下部分代码先:
MSHTML::IHTMLDocument2Ptr g_lpHTMLDocument2 = NULL;
//先获得到g_lpHTMLDocument2
BOOL CrackHtmlDocument()
{
BYTE buf[1024]; //should be enough
LPBYTE lp = buf;
lp += 4;
MSHTML::IHTMLElementCollection *pForm;
HRESULT hr = g_lpHTMLDocument2->get_all(&pForm);
if(FAILED(hr)) return FALSE;
long len;
pForm->get_length(&len);
DWORD dwRet = 0;
CString strType,strClass,strId;
for(int i = 0; i < len; i++)
{
LPDISPATCH lpItem = pForm->item(CComVariant(i), CComVariant(i));

MSHTML::IHTMLInputElementPtr lpInput;

HRESULT hr = lpItem->QueryInterface(&lpInput);
if(FAILED(hr)) continue;

_bstr_t type(_T("password"));
//get other element
strType = LPSTR(lpInput->Gettype());//到这部分,是没问题的,strType打印出来也没问题,=hidden。
//下面就开始出错了
MSHTML::DispHTMLInputElementPtr lpButton;
hr = lpItem->QueryInterface(&lpButton);
if(FAILED(hr)) continue;

strClass = LPSTR(lpButton->GetclassName());
strId = LPSTR(lpButton->Getid());
我想把strClass,strId 打印出来,却一直报错,不知道问题出在哪?因为我指针转的不对?有没有人能帮忙看下,小弟先谢过!
...全文
107 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
lucifer2012_NJ 2012-09-25
  • 打赏
  • 举报
回复
没人?求顶啊

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧