有关mshtml的一点问题
是这样的,自己写了个程序做一个自动登录的功能,包括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 打印出来,却一直报错,不知道问题出在哪?因为我指针转的不对?有没有人能帮忙看下,小弟先谢过!