ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3388|回复: 1

[求助] 请教弦月老师如何用VBA在程序开始后指定时间强行杀掉所有的IE进程?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-5-29 18:45 | 显示全部楼层 |阅读模式
本帖最后由 goldowl2011 于 2012-5-31 13:20 编辑

请教问题:

      我在做一个抓取内网信息的VBA程序,主体已经完成,但该网站很奇怪:在执行完查询后,因该网页采用 了.document.add.submit()自动提交方式处理,造成在完成查询后,又会自动打开一个IE窗口并自动运行前面的查询过程,但由于已没有参数传递,故造成弹出错误提示,且无法取得其控制权用sendkeys "{Enter}"也无效,程序在最后无法完美收关,ie无法自动关闭退出。
     我的思路是,是否可以做一个定时器,在最后一次循环查询操作结束后的指定时间后,用下列几种方法进行处理(目前尚未成功:-(,代码来自或修改自网络/论坛
1、直接用代码处理
Public Sub GetIEWinandCloseit()   ' 直接关闭所有IE窗口
  On Error Resume Next
  Dim Phwnd&, Rtn&, ChkFile$
  Dim mShellWindow As New SHDocVw.ShellWindows
  Dim mIndex As Long

  For mIndex = 0 To mShellWindow.count - 1
        If VBA.TypeName(mShellWindow.Item(mIndex).Document) = "HTMLDocument" Then
            ChkFile = mShellWindow.Item(mIndex).Document.URL
            'Print ChkFile
            Debug.Print ChkFile
            'Close ie window
            Phwnd = mShellWindow.Item(mIndex).Hwnd
            PostMessage Phwnd, WM_CLOSE, 0, 0 '关闭

        End If
  Next mIndex
End Sub


2、用API遍历进程,再

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Public Declare Function SetForegroundWindow Lib "user32" (ByVal Hwnd As Long) As Long


Dim dWinFolder As New ShellWindows
Dim objIE As Object, myHWND, objIE2 As Object
Dim Czpmxurl As String, Czpmxname As String
Dim Czpmxhwnd As Long, aA        '窗口句柄
Dim sm


   Czpmxhwnd = FindWindow(vbNullString, "**平台管理系统 - Windows Internet Explorer")
   aA = SetForegroundWindow(Czpmxhwnd)    '将网页调到前台
   Application.Wait now + TimeValue("00:00:01") ''   程序休息
   SendKeys "%{F4}"
   SendKeys "{ENTER}", True

   IE.Quit
   Application.Wait now + TimeValue("00:00:02") ''   程序休息
   SendKeys "{ENTER}", True

   'Shell ("C:\Program Files\Internet Explorer\IEXPLORE.exe about:blank")
   Set IE = Nothing   



2、用tasklist取得进程列表,再用Shell "taskkill /F /IM iexplore.exe /T" 或  Shell "ntsd -c q -p " & pid方式强行将所有ie进程杀掉,以曲线救国方式完成程序结束操作。
Public Sub gameover_ie()
On Error Resume Next
Dim objSet
Set objSet = GetObject("winmgmts:").InstancesOf("Win32_Process")
For Each Item In objSet
    If Item.Name = "iexplore.exe" Then
        pid = Item.Handle
        Shell "ntsd -c q -p " & pid
    End If
Next
End Sub



     请大侠(如弦月大师等)能给个建议或示例什么的,我试了各种方法,就是无法取得其控制权,因新弹出的IE窗口不是在我的程序控制范围之内,也不在我的查询循环中,真的很头痛,请赐教!

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-31 13:20 | 显示全部楼层
自己顶一下,请高手支招,先谢谢了。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-16 17:07 , Processed in 0.019928 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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