thd111(小蛐蛐) 什么意思,什么东西我就可以不懂呢?请教。我的vc水平不敢称好,但也绝不会差到连是不是窗口都分不出来吧。
解决方案 »
- 对话框怎样添加ribbon面板式的菜单?
- time控件,数据库时间,CTime。。。的时间格式不一样如何互相通信?
- 关于libjingle中thread的问题
- fatal error C1010: 这句出错信息是什么意思?
- 服务器出现红色X 标记错误信息,内容为“0x0040b4de”指令引用“0x00000000”内存,该内存不能为“read”,要终止程序请单击“确定”,要
- 编译错误:error LNK2001: unresolved external symbol _CINRun
- vc这个东西好像很难学习,那个大哥能够教教我?
- SOCKET skt ; nRecv=recv(skt,pTemp,nLen,0))>0) 出现阻塞,在何处设置同步异步啊? 设置超时呢?
- IE编程的问题,送分!
- 新手,望各位大大多多提携,顺便问个问题
- 遇上麻烦了……………………
- COM入门该看什么书?
的问题,
你试试用SendMessage发WM_GETTEXT或EM_GETLINE消息,用GetWindowText是肯定得不到的!
如果你试成功了,请告诉我!
我在2000下用这个方法没成功,我怀疑试因为2000的原因。我得机子上也没有98,试不成!
我现在有两个思路,一个是为ie做个钩子,钩它得键盘消息,但这样要做个dll,文件太多对我们可不利呀,呵呵。
一个思路是改写IE的html源文件,(相当于欺骗网页),将密码先引入自己的asp中。呵呵,不过,有好多技术细节还没有搞懂,比如如何改写html的源文件(能否先存盘->改写->调入)。
所以在动手之前,虚心的向大伙请教,还望大虾们不吝赐教。
有兴趣的朋友或同志者帮忙push一下,Thanks.
有什么资料提供一点,万分感谢,
1、先取得ie窗口的IID_IHTMLDOCUMENT2接口 。
在不同的进程中取得IE的Webbrowser控件的IHTMLDocument2接口,请参阅MSDN上的一篇文章,标题是:HOWTO: Get IHTMLDocument2 from a HWND(根据HWND取得IHTMLDocument2接口)(http://support.microsoft.com/default.aspx?scid=kb;EN-US;q249232).它的实现机理是向Webbrowser控件(窗口类名是"Internet Explorer_Server")发一个WM_HTML_GETOBJECT,然后把返回值传给Microsoft Active Accessibility (MSAA) 函数ObjectFromLresult,这样你会取得一个已经编排(Marshaling)过的COM接口
2、取得页面所有元素集合的接口 IHTMLElementCollection
IHTMLElementCollection* pColl;
hr = pHTMLDocument2->get_all ( &pColl );
3、遍历各个元素,检查校验,取得符合条件的元素的内容即可。
for ( int i=0; i< celem; i++ )
{
VARIANT varIndex;
varIndex.vt = VT_UINT;
varIndex.lVal = i;
VARIANT var2;
VariantInit( &var2 );
IDispatch* pDisp;
hr = pColl->item( varIndex, var2, &pDisp );
if ( hr == S_OK )
{
IHTMLElement* pElem;
hr = pDisp->QueryInterface( IID_IHTMLElement, (void **)&pElem ); IHTMLInputTextElement * pPwdElement;
hr=pElement->QueryInterface(IID_IHTMLInputTextElement,
(void**)&pPwdElement);//是否有表单输入元素
if(SUCCEEDED(hr)){
CComBSTR type;
hr=pPwdElement->get_type(&type);
if(SUCCEEDED(hr)){
if(type==_T("password")){//是密码框吗?
CComBSTR pwd;
hr=pPwdElement->get_value(&pwd);
if(SUCCEEDED(hr)){
if(pwd.Length()!=0){//有密码则显示
CComBSTR msg=_T("密码是:");
msg+=pwd;
CString str(msg);
..........
其它的,如设立系统全局键盘钩子,实现对机器运行的ie窗口进行监听的细节在些不再多说。
看“星星”的工具并不比“星星”的个数少,由于其原理比较简单,初学者很容易制作一个。然而,有时天公不作美,它会给晴朗的星空抹上一道乌云,这时你就无法寻觅那颗明亮的星。网页中的“星星”就是一颗被掩盖的星。透过密码编辑框看“星星”,主要是通过向密码编辑框发送WM_GETTEXT,获得密码编辑框的窗口文本,这种方法在Windows 9x/NT4/ME环境下屡试不爽,星星既属于你,又属于我,大家都可以看到。到了Windows 2K/XP环境,这招有些失灵,星星变聪明了,它只属于它中意的人,别的进程别想打它的主意。对于没有权限获得密码的进程,它会简单地返回一个ERROR_ACCESS_DENIED,来打发那些动机不纯或者别有用心的人们。但是还是有高手能够通过钩子函数,来笼络星星的心,钩子函数能够实现把一个动态连接库注入到另外一个进程,获取窗口文本,再返回给另外一个进程,面对这个吃里扒外的东西,不明真相的星星姑娘,居然听之任之,全抛一片心。网页中的星星是一颗特别的星,铁石心肠,然而它却是豆腐作的。你很难获得它的窗口句柄,通过Visual Studio提供的SPY++也很难获得它的窗口句柄和它收到的窗口消息。获得网页中的密码必须通过必须通过HTML中的MSHTML文档对象模型。你首先必须通过各种方法获得Internet Explorer浏览器(Mr Navigate,Sorry)窗口句柄,判断它的类名是否是"Internet Explorer_Server",然后通过下述代码获得其文档对象模型指针,即IHTMLDocument2接口。
HWND hw; MSHTML::IHTMLDocument2Ptr doc; MSHTML::IHTMLElementCollectionPtr col; MSHTML::IHTMLElementPtr EL; DWORD lRes; HRESULT hres; UINT MSG = RegisterWindowMessage("WM_HTML_GETOBJECT"); SendMessageTimeout(hw, MSG, 0, 0, SMTO_ABORTIFHUNG, 1000, &lRes); hres=ObjectFromLresult(lRes, __uuidof(MSHTML::IHTMLDocument2), 0, (void**)&doc); 然后你必须获得鼠标屏幕坐标,把它转换成相对于客户区的坐标,然后根据坐标位置获得网页对对应的元素,查询IID_IHTMLInputTextElement接口指针,判断元素类型是否是一个密码编辑框,并获得对应密码。CString GetPassword(IHTMLDocument2 *pDoc2,POINT pt){ if(pDoc2==NULL)return ""; CComPtr<IHTMLElement> pElement; HRESULT hr=pDoc2->elementFromPoint(pt.x,pt.y,&pElement); if(SUCCEEDED(hr)){ CComPtr<IHTMLInputTextElement> pPwdElement; hr=pElement->QueryInterface(IID_IHTMLInputTextElement, (void**)&pPwdElement); if(SUCCEEDED(hr)){ CComBSTR type; hr=pPwdElement->get_type(&type); if(SUCCEEDED(hr)){ if(type==_T("password")){ CComBSTR pwd; hr=pPwdElement->get_value(&pwd); if(SUCCEEDED(hr)){ if(pwd.Length()!=0){ CComBSTR msg; msg=pwd; CString str(msg); return str; } else{ return ""; } } } } } } pDoc2->Release(); return ""; }如果你想尝试一下如何在后台记录网页密码,你可以实现一个IE扩展的COM组件,由IE负责自动加载,在组件中你必须实现IOleObjectSite接口,在SetSite方法中得到一个指向IE COM对象的Iunknown的指针,再通过它获得其它接口的指针。在程序中还需要创建一个线程负责对当前的网页所有元素实现轮询解析,判断元素的属性是否是一个编辑框(密码编辑框),然后把用户名和密码记录到一个文件中。
1、用BHOs,这样就可以很方便的得到IHTMLDocument2等接口,MSDN上有详细说明(不过这种方法要用DLL实现)
2、监视本机所有的网络信息。在Win2K下可用原式套接字实现,加以分析就可以了。(可以参看CodeGuru的ipman),如果是9x,我就不太清楚了,记得要通过一个什么vpacket之类动工具包。这种方法的好处是不需要单独的dll)
如果你做了可以发一份给我吗?先谢了!