如何取得IE窗口?

aloneone 2009-09-03 11:18:41
===file1.htm===
<html>

<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>在右边打开一个网页</title>
<script language ="javascript" type ="text/javascript">
<!--
function clickcode(){
alert("OK");
showModalDialog("file2.htm",window,"dialogtop=10px;dialogleft=30px");
}
-->
</script>
</head>

<body>

<input id = "button" type ="button" onclick = "clickcode" value = "打开一个窗口">

</body>

</html>


===file2.htm===
<html>

<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>弹出窗口</title>
</head>

<body>

<p><input id="text" type="text" name="T1" size="20"></p>

</body>

</html>


===C#代码===

private void LoadFile1()
{
webBrowser1.Navigate("file1.htm");
HtmlElement he = webBrowser1.Document.GetElementById("button");
he.InvokeMember("click");
}
些处会弹出一个加载了file2.htm的窗口

···请问我要写一个函数读取这个窗口中的网页元素id="text"的文本框中的内容该如何写?
private void ReadFile2()
{
//1. 如何得到通过WebBroser控件弹出的那个窗口句柄(handleWin)?
//2. 如何通过handleWin得到其中的网页对象?
//3. 如何通过得到的网页对象读取、操作网页中的元素?
}


---每问30分
...全文
324 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
aloneone 2009-09-28
  • 打赏
  • 举报
回复
我提的三个问题,基本功能都解决了。散分,谢谢关注
aloneone 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 saijie 的回复:]
可以导入浏览器的一个程序集吧 这样你就可以操作浏览器了.具体的话要查下资料
[/Quote]
请再说得详细点
saijie 2009-09-11
  • 打赏
  • 举报
回复
可以导入浏览器的一个程序集吧 这样你就可以操作浏览器了.具体的话要查下资料
aloneone 2009-09-11
  • 打赏
  • 举报
回复
又卡壳了,没想到新打开的文件里面还在<Object>不知如何操作
aloneone 2009-09-09
  • 打赏
  • 举报
回复
经过今天一天的研究,第二题也解决了,第三题已在进行中。
没有会的人来接分吗?
aloneone 2009-09-08
  • 打赏
  • 举报
回复
把我的三个问题再明确一下,(能用webbroswer 以及navigate,我就不提问了)
一、通过API找到网页用showModalDialog弹出的网页窗口
二、得到里面的网页对象
三、利用得到网页对象操作网页上的元素。
yankunlin 2009-09-08
  • 打赏
  • 举报
回复
学习了
顶,.......
aloneone 2009-09-08
  • 打赏
  • 举报
回复
经过下午的研究
发现MSHTML.IHTMLDocment2 很有用我想现在的问题重点应该是
如何通过窗口句柄得到MSHTML.IHTMLDocment2
aloneone 2009-09-08
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 ttojj 的回复:]
引用 14 楼 ttojj 的回复:
private void axWebBrowser1_NewWindow2(object sender, AxSHDocVw.DWebBrowserEvents2_NewWindow2Event e)
        {
            e.cancel=true;
            Form2 a = new Form2();
            a.Show();
            a.axWebBrowser1.Navigate(aa);
           
        }
a就是你打开的新窗口
a.axwebbrowser就是新窗口的流缆控件
有了新窗口的流缆控件对象,还不能完成任务?????


什麽時候說用showModalDialog了, a.Show();
a.Show();
a.Show();
a.Show();
a.Show();
a.Show();
a.Show();

[/Quote]
我要解析的是不是自己写的网页,别人的网页中用了showMOdalDialog
为什么自己不直接用navigate(他的网址),在前面已经讲了
对方不可能为了为专门重写web service
liffe 2009-09-08
  • 打赏
  • 举报
回复
帮顶
TTOJJ 2009-09-08
  • 打赏
  • 举报
回复
你們自己動手去寫寫啊,光看不做!我給的程序是已經可以完成你說的功能的!
TTOJJ 2009-09-08
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 ttojj 的回复:]
private void axWebBrowser1_NewWindow2(object sender, AxSHDocVw.DWebBrowserEvents2_NewWindow2Event e)
        {
            e.cancel=true;
            Form2 a = new Form2();
            a.Show();
            a.axWebBrowser1.Navigate(aa);
           
        }
a就是你打开的新窗口
a.axwebbrowser就是新窗口的流缆控件
有了新窗口的流缆控件对象,还不能完成任务?????

[/Quote]
什麽時候說用showModalDialog了, a.Show();
a.Show();
a.Show();
a.Show();
a.Show();
a.Show();
a.Show();
TTOJJ 2009-09-08
  • 打赏
  • 举报
回复
二、如何通过窗口句柄得到其中的网页对象?——35分
三、如何通过得到的网页对象操作其中的网页元素——55分

你怎么不直接去读本地缓存!~

网页哪里有什么所谓"通过句柄得到对象"~~!!!全部都是ML标记语言~~!
你得到的句柄只是解释标记的程序的句柄

思路错误~
24K純帥 2009-09-08
  • 打赏
  • 举报
回复
up
aloneone 2009-09-08
  • 打赏
  • 举报
回复
第一题已解决,与大家分享 代码如下:
[DllImport("User32.dll", EntryPoint = "FindWindow")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);


……

private void butFindWindow_Click(object sender, EventArgs e)
{

//按标题寻找窗口
IntPtr _WindowIntPtr = FindWindow(null, "数据保存 -- 网页对话框");

}

现在请帮解答另两题吧
二、如何通过窗口句柄得到其中的网页对象?——35分
三、如何通过得到的网页对象操作其中的网页元素——55分
请提供代码

其中第三题的代码请至少提供操作如下两个元素的代码
1. <INPUT TYPE="radio">
2. <button id="btn_save" onclick="btn_save_onclick()">

请别用webbrowser,如果可以用这个控件,我也不用高分发贴了
蒋晟 2009-09-07
  • 打赏
  • 举报
回复
怎么不要对方写个web service
aloneone 2009-09-07
  • 打赏
  • 举报
回复
自己顶
aloneone 2009-09-07
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 ttojj 的回复:]
  private void axWebBrowser1_NewWindow2(object sender, AxSHDocVw.DWebBrowserEvents2_NewWindow2Event e)
        {
            e.cancel=true;
            Form2 a = new Form2();
            a.Show();
            a.axWebBrowser1.Navigate(aa);
           
        }
其中的a.axwebBrowser1你可以直接做任何操作好不好!!!
别说什么handle不handle的了
[/Quote]
[Quote=引用 15 楼 jiangsheng 的回复:]

showmodaldialog不会触发newwindow2/newwindow3
[/Quote]

一、如jiangsheng所说,无法通过NewWindowX()事件进行处理。

二、我面对的网页showModalDialog时传递了参数,在showModalDialog中提交时,脚本函数要调用传递来的参数window.dialogArguments,用Navigate无法模拟
三、我面对的网页中有套复杂的存储、取回、比对seesion id 以及Work ID 的机制,简单地用一个新的窗口进行替代,会造成比对失败,服务器拒绝响应的结果。

所以感觉只剩下用API找窗口的一条路了

lovexilove 2009-09-04
  • 打赏
  • 举报
回复
帮顶
aloneone 2009-09-04
  • 打赏
  • 举报
回复
showModalDialog弹出的应该是一个Windows窗口吧,
如果不是窗口那又是什么东西?只要知道是什么对象,一定有办法操作的。
加载更多回复(13)

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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