【小弟新来,请求帮助】尝试在VB6.0下使用findwindow()遇到的问题

blc1001 2009-06-27 10:34:31
各位老大有礼,小弟初来贵地,有求于各位,感谢您的帮忙。我喜欢把遇到的问题描述的很清楚,有劳各位细看,给予小弟帮助。谢谢。

问题是这样的,我打算用【VB6.0,不是VB.NET】做个程序自动点击网页上的几个按钮,我只想用VB6.0来做。请不要跑题帮我推荐其他了,咱们一个问题一个问题来过关,不跑题,呵呵呵

网页上的按钮分别是
1. 【全选】 2.【删除选中】 3.当按了前面2个按钮后出现一个对话框了,就说“确认删除?”,对话框上是按钮【确认】,和另外一个按钮【取消】


那么我的程序声明部分如下
Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

当我点FORM1上的Command3按钮的时候,执行我要的操作
Private Sub Command3_Click()

Dim hwnd As Long
hwnd = 0

WebBrowser1.Document.getelementbyID("Submit").Click '这个是点击按钮【全选】
WebBrowser1.Document.getelementbyID("Delete").Click '这个是点击按钮【删除选中】

Sleep 200

hwnd = FindWindow("#32770", "Microsoft Internet Explorer")

MsgBox hwnd

End Sub

在WebBrowser1加载了网页后,【全选】, 【删除选中】都很顺利,当点击了【删除选中】后,网页就弹出一个对话框(不是新窗口哦)了,要我点【确认】

我用hwnd = FindWindow("#32770", "Microsoft Internet Explorer")语句来取得弹出对话框的句柄,这个时候,突然想先测试一个能不能成功获得句柄
于是。。。我来个一个MsgBox hwnd, 很不幸的。。。hwnd显示为0,意味着没有读取到这个弹出的对话框,既然读取不到那就不能对这个窗口进行操作啦。。。。郁闷

于是,我查啊查啊查查查。。。居然,很雷人的事情出现了

那就是

当我在浏览器世界之窗,也打开这个网页,也点【全选】也点击【删除选中】, 然后世界之窗也弹出了对话框,好了,保持不动
接着,我再执行我的VB的这个程序,点击Command3,居然检测到了hwnd,但是,多次测试后发现,这个hwnd是世界之窗浏览器里面的弹出对话框。。。而不是WebBrowser1里面网页的弹出对话框。

也就是说,hwnd = FindWindow("#32770", "Microsoft Internet Explorer"), 检测不到WebBrowser1这个弹出的对话框啊!但是检测到世界之窗浏览器的弹出对话框去了。。。

我的WebBrowser1和Command3都是同在一个form1上的,我不清楚是不是这个原因。

小弟是个今天开始学习的新新手,求各位能知道怎么办么。
================================下面是一个可能大家会提及的问题==================================================================

hwnd = FindWindow("#32770", "Microsoft Internet Explorer")
这个就不对
你用
(NULL,"Microsoft Internet Explorer")
还有你最好用myspy看看弹出的那个对话框的句柄到底是多少
========================================================
您好,这个是没问题的哦。因为

1. 这个是#32770是类,是我使用SPY++查找出来的;当然,使用vbNullString也正确。但是实际上,无论是使用#32770还是vbNullString, 都是一样的结果,hwnd = 0。

2. 还有一个能证明这个是没问题的。就是我之前说的,这个hwnd = FindWindow("#32770", "Microsoft Internet Explorer") 它最雷人的地方,居然正确无误的找出了世界之窗浏览器里面的那个网页的对话框了, 而不能找出WebBrowser1里面一样的网页弹出的一样的对话框。所以,语句是没问题的。
...全文
220 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
NARUTOSJP 2012-07-09
  • 打赏
  • 举报
回复
我跟你遇到同样问题啊,总觉得用程序后台打开的窗体,导致了程序的暂停,目前没找到办法 求解释啊
peakcao 2010-09-26
  • 打赏
  • 举报
回复
这个问题怎 么没下文了???
shenyc 2009-07-11
  • 打赏
  • 举报
回复
另外第一个参数最好使用 vnNullString
shenyc 2009-07-11
  • 打赏
  • 举报
回复
hwnd = FindWindow("#32770", "Microsoft Internet Explorer")
"Microsoft Internet Explorer"参数传递有问题
IE 打开时窗口标题会随着打开的文档改变
yanlongwuhui 2009-06-28
  • 打赏
  • 举报
回复
可以试下:先延时一会,然后发送模拟按键(“确认删除?”的提示框出现时,默认按钮是“确认”,则直接模拟一个回车键;如果是“取消”,则先模拟一个方向键,再模拟一个回车键)
ydz00ydz 2009-06-28
  • 打赏
  • 举报
回复
额。。。 顶下
学习 学习
古今多少事 2009-06-27
  • 打赏
  • 举报
回复
呵呵……

帮顶!
blc1001 2009-06-27
  • 打赏
  • 举报
回复
to ASDFY,谢谢~~~~
=================
很详细,也很雷人……

总觉得下面这句应该就是世界之窗浏览器中的:
hwnd = FindWindow("#32770", "Microsoft Internet Explorer")

这样试试:
hwnd = FindWindow("#32770", "WebBrowser1")
=====================================================

hwnd = FindWindow("#32770", "Microsoft Internet Explorer") 之中的类#32770, 弹出对话框的标题Microsoft Internet Explorer,都是我使用SPY++查出来的哦。应该不会错误了。
如果使用hwnd = FindWindow("#32770", "WebBrowser1") ,似乎找的是类为#32770, , 窗口标题为WebBrowser1的窗体,貌似我的系统没这个窗体的存在呀。即使存在,也不是我要的网页弹出对话框了。

另外,根据另外一位网友启发,我打算延迟Sleep的时间,试试能否成功,我回家后测试,然后马上来报告。
还可以, 或许可以试试使用FindWindow先找出Form1窗体,再用FindWindowEx找出这个对话框,但是感觉有点累。。。所以还是算了。
另外的一个可能方法是使用timer不断的循环检测这个窗体,我试过也无效,不过即使有效这个方法也还是有点累。。。所以也没用心在这个timer上了

所以,我最想的还是单纯在Command3_Click()中实现在WebBrowser1中点击【全选】,点击【删除选中】,然后读取到弹出对话框的句柄(读取到之后,怎么点击确定按钮,是另外一回事了,目前读取不到对话框句柄就什么都做不成啦。。。。)
古今多少事 2009-06-27
  • 打赏
  • 举报
回复
很详细,也很雷人……

总觉得下面这句应该就是世界之窗浏览器中的:
hwnd = FindWindow("#32770", "Microsoft Internet Explorer")

这样试试:
hwnd = FindWindow("#32770", "WebBrowser1")
blc1001 2009-06-27
  • 打赏
  • 举报
回复
--------- 【自己总结一下问题出现的情况】---------

============================情况1.打开世界之窗的情况下=================================

1. 打开浏览器世界之窗,打开这个个网页,点击【全选】,点击【删除选中】,弹出了我要查找的对话框。

2. 打开我制作的VB程序,在WebBrowser1打开一样的网页。点击自动执行的按钮Command3_Click() , 程序会点击【全选】,点击【删除选中】,弹出了我要查找的对话框,此时,VB程序暂停。

3. 我手动点击VB程序中的WebBrowser1弹出的对话框的X, 关闭弹出对话框,弹出我vb程序设置的MsgBox hwnd , 读取正确,但是。。。。。。

4. 但是,雷人的是,它读取的是世界之窗里面的网页弹出对话框的句柄(使用SPY++可以知道),而不是WebBrowser1的弹出对话框句柄!!!晕了。

============================情况2. 没有打开世界之窗的情况=================================
1. 打开我制作的VB程序,在WebBrowser1打开一样的网页。点击自动执行的按钮Command3_Click() , 程序会点击【全选】,点击【删除选中】,弹出了我要查找的对话框,此时,VB程序暂停。

2. 我手动点击VB程序中的WebBrowser1弹出的对话框的X, 关闭弹出对话框,弹出我程序设置的MsgBox hwnd , 读取不正确了,此时hwnd = 0, 晕!

我希望的是能读取到WebBrowser1弹出的对话框呀。。。。郁闷
古今多少事 2009-06-27
  • 打赏
  • 举报
回复
【我喜欢把遇到的问题描述的很清楚】……

呵呵!程序员应有的风格……
blc1001 2009-06-27
  • 打赏
  • 举报
回复
已经测试了一下,延迟了Sleep的时间,不起作用了。

郁闷的很,发现似乎有这样的情况,当下面的程序点击时WebBrowser1.Document.getelementbyID("Delete").Click '这个是点击按钮【删除选中】,不是弹出的一个对话框么,这个时候,所有接下去的程序语句都给暂停了啊!!晕,只有点击或者关闭这个对话框,下面的程序才继续执行!!!

但是,假如我另外制作一个VB程序来检测这个对话框,居然!!!神奇的检测到了~~~~汗汗汗
就是说:
在FROM1中的WebBrowser1打开这个网页,然后点击【全选】,【删除选中】,此时弹出对话框了。
执行另外一个制作的一个VB小程序,上面只有一个按钮,用来检测对话框的句柄的。好了,按下按钮,就找到这个对话框的句柄了(SPY++检测过,这次找到的句柄是正确的!!!)

所以,我想,假如WebBrowser1里面出现了弹出的对话框,同一个FORM下面所有的程序语句立刻暂停了!!!所以,我原来的检测语句根本不起作用了啊。。。

各位,我的理解对么?有什么办法能解决么?

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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