高分!!!--怎么修改任意网页中text文本框的值?

oldfhp 2003-09-03 11:47:54
有个网页,用showdialogmodel打开的,没有工具栏、菜单,对右键没反应。
请问怎么通过外界修改网页中text文本框的值?
有重赏!!!
...全文
382 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
abrams 2003-09-22
  • 打赏
  • 举报
回复
请注意.如果程序在Windows95,98和NT 4.0 Service With Pack 4 or 5下运行必须要把Microsoft Active Accessibility (MSAA)运行时组件(RDK)与程序一起发布(Windows2000及Windows NT 4.0 Service With Pack 6中已经有了,所以不用)..3.使用这种方法前要调用CoInitialize(NULL);然后应该相应地调用CoUninitialize(); 所以我们先在CGetPassDlg::OnInitDialog()的最后加入CoInitialize(NULL);再重载WM_DESTROY消息,在其对应函数void CGetPassDlg::OnDestroy()中加入如下代码:
CoUninitialize();//卸载com组件
KillTimer(1); //卸载时钟

这样,我们就取得了IHTMLDocument2*接口了,要取得密码框的密码还得一番周折,现在改写我们刚才的GetPass工程的void CGetPassDlg::OnTimer(UINT nIDEvent)函数,其改写后的内容如下:
HWND hwnd;
CPoint MousePos;
GetCursorPos(&MousePos); //取得当前鼠标的坐标
static TCHAR buf[100];
hwnd= ::WindowFromPoint(MousePos);//得到当前坐标的对应窗口的句柄
if(hwnd!=NULL){
::GetClassName( hwnd, (LPTSTR)&buf, 100 );
if ( _tcscmp( buf, _T("Internet Explorer_Server") ) == 0 )
//如果是ie则用别的方法
{
POINT iept=MousePos;
::ScreenToClient(hwnd,&iept);
GetPassword(GetDocInterface(hwnd),iept);
}
else //如果是其它窗口则用原来的方法来取得密码

GetPassText(hwnd, m_hWnd);

}
CDialog::OnTimer(nIDEvent);
再在CgetPassDlg类中加入两个成员函数
void CGetPassDlg::GetPassword(IHTMLDocument2 *pDoc2, POINT pt)
IHTMLDocument2* CGetPassDlg::GetDocInterface(HWND hWnd)
IHTMLDocument2* CGetPassDlg::GetDocInterface(HWND hWnd)函数的代码如前所述
void CGetPassDlg::GetPassword(IHTMLDocument2 *pDoc2, POINT pt)的代码如下:
if(pDoc2==NULL)return;
CComPtr<IHTMLElement> pElement;
HRESULT hr=pDoc2->elementFromPoint(pt.x,pt.y,&pElement);
if(pElement==NULL)return;
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=_T("");
msg+=pwd;
CString str(msg);
SetDlgItemText(IDC_EDIT1, str);
UpdateData(false);
}
else{
SetDlgItemText(IDC_EDIT1, "密码为空");
UpdateData(false);
}
}
}
}
}
}
pDoc2->Release();
最后在stdafx.h中加入所用的头文件
#include <atlbase.h>
#include <oleacc.h>
#include <winuser.h>
#include <mshtml.h>
这样再编译链接我们的程序,把鼠标指向网页的密码框时就可以得到密码了。其实得到网页的密码的方法还有一种更简单的方法:

使用脚本语言和IE右键菜单:
我们可以使用注册表来控制IE右键菜单.当你装了FlashGet(网际快车)时,你会发现IE右键菜单多了两项:"使用网际快车下载"和"使用网际快车下载全部链接",而这时你打开注册表,在HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\下有这两个主键.这两个主键下都有两个值,一个是默认的串值,指定了选择了这个菜单命令要打开的URL,IE在一个隐藏的窗口打开它,并这个隐藏窗口的external.menuArguments值设为当前窗口对象,执行完URL对话网页包含的脚本程序该窗口自动关闭.另一个名称是contexts是DWORD值,指定了在什么情况下需要显示这个菜单项.具体的值见下.
(0x1 << CONTEXT_MENU_DEFAULT) (等于 0x1) //缺省时显示
(0x1 << CONTEXT_MENU_IMAGE) (等于 0x2) //右键点击图像时显示该项
(0x1 << CONTEXT_MENU_CONTROL) (等于 0x4) //右键点击表单元素时显示该项
(0x1 << CONTEXT_MENU_TABLE) (等于 0x8) //右键点击表格时显示该项
(0x1 << CONTEXT_MENU_TEXTSELECT) (等于 0x10) //右键点击高亮选择的文本时显示该项
(0x1 << CONTEXT_MENU_ANCHOR) (等于 0x20) //右键点击链接时显示该项
(0x1 << CONTEXT_MENU_UNKNOWN) (等于 0x40)//右键点击网页中除上以外的地方显示该项
现在我们写一段脚本程序以获取密码框的值.
<!--getpassword.htm->
<script language="VBScript">
Sub GetPassword()
set srcEvent = external.menuArguments.event
Set doc=external.menuArguments.document
set ele=doc.elementFromPoint( srcEvent.clientX, srcEvent.clientY )
if ele.type ="password" then
if ele.value="" then
Alert("密码为空")
else
Alert("密码为:"+ele.value)
end if
end if
end sub
call GetPassword()
</script>
将上述脚本存为getpassword.htm放于C盘根目录下,然后在注册表HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\下新建一下主键,键名为"取得密码",缺省值设为该htm文件的路径c:\getpassword.htm,在该主键下另增一个DWORD值,值为4,表示只在右击表单元素时显示该项.关闭注册表,重新启动IE窗口,点击一下密码框,就会出现该项,点击该项,弹出一个对话框,告诉你的密码了.呵呵其实条条大路通罗马的,只要你仔细的研究。本文只可用于研究,和忘记密码时来用,切不可作为它用,以免误入其途。
abrams 2003-09-22
  • 打赏
  • 举报
回复
不让我连续发3次,你另外一处发了前两端,最后一段发在这里
alexlovejava 2003-09-07
  • 打赏
  • 举报
回复
window.opener.forms[i]=......
oldfhp 2003-09-07
  • 打赏
  • 举报
回复
不是父子窗口
lionelbin 2003-09-06
  • 打赏
  • 举报
回复
用javascript可以实现
gboy2003 2003-09-06
  • 打赏
  • 举报
回复
怎么回事?
是修改其他的任意页面的text值?
那要它们有联系才可以啊!

up一下
Keepers 2003-09-06
  • 打赏
  • 举报
回复
用tab健切换到哪个地方然后修改
oldfhp 2003-09-06
  • 打赏
  • 举报
回复
lionelbin(stone) :
怎么实现?
oldfhp 2003-09-06
  • 打赏
  • 举报
回复
Keepers(中文昵称)
你真行,我都没想到用这个方法。佩服佩服!!!!!!!!
还有其它的吗?
oldfhp 2003-09-05
  • 打赏
  • 举报
回复
编程呢?
zwxu 2003-09-04
  • 打赏
  • 举报
回复
如果是任意打开的网页,去修改另一个网页是不能实现的,如果是用javascript打开的,可以修改父窗口的text文本值
oldfhp 2003-09-03
  • 打赏
  • 举报
回复
更正:应是showmodeldialog

81,095

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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