找回密码
 加入
搜索
查看: 3588|回复: 9

[IE类操作] [已解决,但仍需深挖] 新建$oIE之前, 想删除前一个$oIE, 如何做?

  [复制链接]
发表于 2015-11-22 10:04:06 | 显示全部楼层 |阅读模式
本帖最后由 duanqs 于 2015-11-23 23:37 编辑

利用组件来写脚本, 确实功能很强.  但是也很消耗系统资源.
比如 :
$oIE = _IECreate('http://www.baidu.com') ;
$oIE = _IECreate('http://www.qq.com')
在新建第二个IE对象之前, 如何做才能删除第一个IE对象呢?
翻遍了论坛, 有看到类似的问题提出, 可是没有找到满意的答案.

测试代码如下:

Func testDeleteObj()
         $oIE = _IECreate('http://www.baidu.com')
        ;~ ObjGet('InternetExplorer.application')
        consoleWrite(@CRLF&'1 '&ObjName($oIE,1 ))
        consoleWrite(@CRLF&'2 '&ObjName($oIE,2 ))
        consoleWrite(@CRLF&'3 '&ObjName($oIE,3 ))
        consoleWrite(@CRLF&'4 '&ObjName($oIE,4 ))
        consoleWrite(@CRLF&'5 '&ObjName($oIE,5 ))
        consoleWrite(@CRLF&'6 '&ObjName($oIE,6 ))
        consoleWrite(@CRLF&'7 '&ObjName($oIE,7 ))


;~ 1 WebBrowser
;~ 2 WebBrowser Control
;~ 3 Shell.Explorer.2
;~ 4 C:\WINDOWS\system32\ieframe.dll
;~ 5 C:\Program Files\AutoIt3\AutoIt3.exe
;~ 6 {8856F961-340A-11D0-A96B-00C04FD705A2}
;~ 7 {D30C1661-CDAF-11D0-8A3E-00C04FC9E26E}

        ;$oIE = 0
        ;$oIE = _IECreate('www.qq.com')

        ;~ _ArrayDisplay(WinList("internetExplorer.application"))


;~         ;$hWnd = 0x000b0644
;~          _ArrayDisplay(WinList("百度一下") , "")
;~          _ArrayDisplay(WinList())
;~         $aList = WinGetClassList("[class:360se6_frame]","")
;~         MsgBox(0,0,$aList)
;~         _ArrayDisplay($aList,'get class list')

        ;~ WinKill()

EndFunc
发表于 2015-11-22 18:38:47 | 显示全部楼层
直接再赋值, 或者先 $oIE=0
 楼主| 发表于 2015-11-22 19:18:45 | 显示全部楼层
回复 2# Alam

多谢你的回复.
不过这招不灵的.
通过ObjCreate创建的对象, 很特别. 你根本无法这样把它就从内存中销毁的.
我尝试过一些办法,  最管用的办法就是关闭该COM所依赖的窗体.
感觉即便是删除该COM所对应的控件ID都不管用.
发表于 2015-11-23 11:10:36 | 显示全部楼层
学习学习,,,,,
发表于 2015-11-23 12:08:12 | 显示全部楼层

这个能解决楼主的问题吗

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2015-11-23 21:08:41 | 显示全部楼层
回复 5# gyhhi

gyhhi 兄, 多谢指点. 这个方法肯定行.  
让你见笑了. 俺废了好大的劲, 竟然没有好好地看IE的UDF帮助.
 楼主| 发表于 2015-11-23 21:23:37 | 显示全部楼层
回复 5# gyhhi

gyhhi 兄, 多谢指点. 这个方法肯定行.  
让你见笑了. 俺废了好大的劲, 竟然没有好好地看IE的UDF帮助.  

还有个问题也想请教: 比如
$oIE=_IECreate('http:www.baidu.com')
$oName= _IEGetObjByName($oIE, $sName) ;假设是可以检索到这个name对象的
这里就又产生了一个$oName的对象, 如果把它视为一个autoit脚本里的一个变量来看待的话,
那么该变量的数据类型是什么呢, 是一个指针吗? 指向$oIE里面的那个由 $sName能够定位到的对象.
还是什么别的类型(整型/实型/句柄...).
$oName会不会随着$oIE的销毁而自动销毁呢?
 楼主| 发表于 2015-11-23 23:17:31 | 显示全部楼层
问题越来越有趣:
1.  打开百度首页
2.  提取里面的input标签集合, 得到 $oInputs, 长度为15(但是用360浏览器时显示的是13)
3. 枚举显示该集合对象里的成员的outerHtml, 没有问题都有其 htmlText
4. quit oIE
5. 问题出来了: 这个时候我本以为 $oInputs 对象也会被销毁, 可是并没有, 但是其内容也不是IE关闭之前的内容了.
其长度没有变化(length属性). 但是内容却看不到了. 请坛友解惑. ??? 先谢了.

见下面的代码:
$oIE=_IECreate('https://www.baidu.com')
$oInputs=_IETagNameGetCollection($oIE,'input' ,-1)
MsgBox(0,'my @extended = ',@extended)
$i=0
For $oInput In $oInputs
        $i+=1
  ;MsgBox(0,$i,$oInput.outerHtml)
Next
;MsgBox(0,10,$oInputs.item(10).outerHtml)
MsgBox(0,'before quit IE, length = ', $oInputs.length)
        _IEQuit($oIE)
MsgBox(0,'after quit IE, length = ', $oInputs.length)
For $oInput In $oInputs
        $i+=1
  MsgBox(0,$i,$oInput.outerHtml)
Next

MsgBox(0,10,$oInputs.item(10).outerHtml)

MsgBox(0,'exit',@extended)
 楼主| 发表于 2015-11-23 23:21:57 | 显示全部楼层
本帖最后由 duanqs 于 2015-11-23 23:26 编辑

忘记了如何做才能让代码高亮起来?


$oIE=_IECreate('https://www.baidu.com')
$oInputs=_IETagNameGetCollection($oIE,'input' ,-1)
MsgBox(0,'my @extended = ',@extended)
$i=0
For $oInput In $oInputs
        $i+=1
  ;MsgBox(0,$i,$oInput.outerHtml)
Next
;MsgBox(0,10,$oInputs.item(10).outerHtml)
MsgBox(0,'before quit IE, length = ', $oInputs.length)
        _IEQuit($oIE)
MsgBox(0,'after quit IE, length = ', $oInputs.length)
For $oInput In $oInputs
        $i+=1
  MsgBox(0,$i,$oInput.outerHtml)
Next

MsgBox(0,10,$oInputs.item(10).outerHtml)

MsgBox(0,'exit',@extended)
发表于 2015-11-24 11:59:16 | 显示全部楼层
回复  gyhhi

gyhhi 兄, 多谢指点. 这个方法肯定行.  
让你见笑了. 俺废了好大的劲, 竟然没有好好地看I ...
duanqs 发表于 2015-11-23 21:23



    $oName的类型你可以查_IEGetObjByName函数原型查到。。类型爱是啥是啥,反正只有IE的UDF能使用这种类型。销不销毁我也不知道
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-22 22:27 , Processed in 0.085314 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表