有没有可能用win32程序获取浏览器中网页的文本框控件的内容和焦点状态
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有没有可能用win32程序获取浏览器中网页的文本框控件的内容和焦点状态相关的知识,希望对你有一定的参考价值。
是这样,任何一种浏览器(先假定之有IE和FF)正在浏览的网页中,比如说有个username的输入框控件和password输入框控件,猜想中有一个后台程序,使用钩子或其他技术,获得输入框中的内容,以及获得它和其他输入框之间切换时的focus状态变化~这个我只是假想了一下,我现在都不知道这能不能实现,换句话说我是不是在空想~
请哪位大哥来告诉,这样的东西有可能实现吗,如果有,可否写下你的实现思路,如果你简要的写一下实现过程,小弟感激不尽~最后高分送上
首先要相信,只有你想不到,没有你做不到。VC博大精神。。。
现在就说一下我的思路:
1、首先要远程注入,因为这是跨进程的访问数据,因此,如果不注入的话,是很难从一个进程直接访问另一个进程的空间的,因为每个进程都有自己私有的4G空间。注入的方法很多,不说了。
2、枚举所有的浏览器子窗口。EnumChildWindow
3、监测枚举到的子窗口,获得其注册名字(classname),由此判断是不是一个Edit控件。如果是一个edit控件,则获得它的风格,如果有PASSWORD风格,则说明是一个密码输入框。
4、使用SendMessage( WM_GETTEXT )等函数获得Edit框中的文本。
5、搞定。
另外,至于要判断是不是处于焦点,更简单了。
使用上面第3步得到的Edit句柄,去判断GetFocus()是不是相等。就知道了。
还有,第一步非常重要,否则,余下的都不能实现。 参考技术A 难就一个字。
兄弟,要能实现这网络就都乱了。 参考技术B 如果是IE的话是可以实现的,FF的话就不知道了。
请参看我在此帖的回答:
http://zhidao.baidu.com/question/89453758.html 参考技术C 嗯,差不多算空想。有的东西似是而非,太多的新技术了。除非你有精力把主流浏览器都研究透彻,然后针对每个浏览器写套处理程序,然后自己识别并调用相应的处理程序。不过每个浏览器版本升级恐怕你又要忙一阵子。 参考技术D 可以的,获得当前浏览器的文档,
void CSendMsgDlg::OnDownloadCompleteExplorer()
// TODO: Add your control notification handler code here
IHTMLElementCollection *objAllElement=NULL;
IHTMLDocument2 *objDocument=NULL;
CComPtr<IDispatch>pDisp;
IHTMLAnchorElement *objAnchor=NULL;
CString strUrl;
strUrl=m_ctrlWeb.GetLocationURL();
if(strUrl.IsEmpty())
return;
objDocument=(IHTMLDocument2 *)m_ctrlWeb.GetDocument();
objDocument->get_all(&objAllElement);
objAllElement->item(COleVariant("name"),COleVariant((long)0),&pDisp);
CComQIPtr<IHTMLInputTextElement, &IID_IHTMLInputTextElement>pElement;
pElement=pDisp;
pElement->put_value(CString("123").AllocSysString());
第5个回答 2009-05-21 没有
以上是关于有没有可能用win32程序获取浏览器中网页的文本框控件的内容和焦点状态的主要内容,如果未能解决你的问题,请参考以下文章
vb6 webbrowser 如何判断当前网页中获取焦点的是否一个文本框?