【雷死我了,求救求助谢谢】VB6.0的FindWindow()出现的奇怪现象,不能查找自身FORM

时间:2021-02-18 22:07:27
各位老大有礼,小弟初来贵地,有求于各位,感谢您的帮忙。我喜欢把遇到的问题描述的很清楚,有劳各位细看,给予小弟帮助。谢谢。

问题是这样的,我打算用VB6.0做个程序自动点击网页上的几个按钮,我只想用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上的,我不清楚是不是这个原因。

小弟是个今天开始学习的新新手,求各位能知道怎么办么。

7 个解决方案

#1


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

#2


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里面一样的网页弹出的一样的对话框。所以,语句是没问题的。

我这样的理解对吧。

#3


你另建个程序查找这个程序的句柄吧

如果可以查到到再来谈

世界之窗和ie不一样的 

还有Sleep 200 

你弄长点5秒看看,如果你那个msgbox也会等5秒后才出现

因为你这是单线程自己看自己,很可能是还没有弹出错误框你就在查找了

#4


你另建个程序查找这个程序的句柄吧 ===== 我只是打算在这个Command3_Click()里面查找哦。本来我还打算想另外做一个timmer,但是觉得不大好,不过昨晚也做了一次,时间间隔是500,也没找出来。我回去再试试,谢谢你。

还有Sleep 200 你弄长点5秒看看==== 好的,这个我晚上回家试试。
---------------------------------------------------------------------------------------------------------------
                                                               ---  ---【 自己总结一下问题出现的情况】---------

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

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

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

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

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

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

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

#5


..........

#6


搞这么累,直接用下getforegroundwindow然后判断一下是不是IE弹出的窗口(点击之后因该弹出为活动的吧)!

#7


学习

#1


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

#2


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里面一样的网页弹出的一样的对话框。所以,语句是没问题的。

我这样的理解对吧。

#3


你另建个程序查找这个程序的句柄吧

如果可以查到到再来谈

世界之窗和ie不一样的 

还有Sleep 200 

你弄长点5秒看看,如果你那个msgbox也会等5秒后才出现

因为你这是单线程自己看自己,很可能是还没有弹出错误框你就在查找了

#4


你另建个程序查找这个程序的句柄吧 ===== 我只是打算在这个Command3_Click()里面查找哦。本来我还打算想另外做一个timmer,但是觉得不大好,不过昨晚也做了一次,时间间隔是500,也没找出来。我回去再试试,谢谢你。

还有Sleep 200 你弄长点5秒看看==== 好的,这个我晚上回家试试。
---------------------------------------------------------------------------------------------------------------
                                                               ---  ---【 自己总结一下问题出现的情况】---------

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

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

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

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

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

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

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

#5


..........

#6


搞这么累,直接用下getforegroundwindow然后判断一下是不是IE弹出的窗口(点击之后因该弹出为活动的吧)!

#7


学习