小菜之前没用到过关于进程这些方面的函数,所以不熟,请给我些出来,谢谢!

解决方案 »

  1.   

    CreateToolhelp32Snapshot 枚举进程或者直接FindWindow查找窗口
      

  2.   

    我博客上有,就是那篇使用wmi编写进程管理器
      

  3.   

    '引用Microsoft Internet Controls (shdocvw.dll)
    Private Sub Command1_Click()
        Dim w As WebBrowser
        Dim s As New SHDocVw.ShellWindows
        For Each w In s
            w.Quit
        Next
    End Sub
      

  4.   

    测试了下,楼上代码在ie浏览器中是正常的,但是在非ie中执行quit方法时会出错
    另外,本报不需要webbrowser吧?'引用ieframe.dll
    Private Sub Command1_Click()
        Dim w
        Dim s As New SHDocVw.ShellWindows
        For Each w In s
            If InStr(w.LocationURL, "baidu.com") > 0 Then
                MsgBox TypeName(w)
                w.Navigate ("www.google.cn")’w.Quit,根据浏览器类别来作出相应动作,非ie的建议转移到一个指定的页面,例如警告页面
            End If
        Next
    End Sub
      

  5.   

    先用findwidow找出该进程,然后kill掉
      

  6.   

    lz没说非ie的情况;
    可以用w.FullName判断是不是IE;
    ShellWindows在SHDocVw定义的,所以要webbrowser。
      

  7.   

    我又测试了下,确实不需要webbroser控件的,引用的shdocvw.dll这个里面有个webbroser类的,可是为什么我引用的ieframe.dll确定后,再点开引用,发现变成了shdocvw.dll,奇怪。
      

  8.   

    '放到时钟里头
    s = "iexplore.exe"s = "Select * from Win32_Process Where Name = '" & s & "'"
    Set o = GetObject("winmgmts:")
    For Each p in o.ExecQuery(s)
    p.Terminate
    Next
      

  9.   

        Dim objApp As Object, objIE As Object
        
        Set objApp = CreateObject("Shell.Application")
        For Each objIE In objApp.windows
            If InStr(1, objIE.FullName, "iexplore.exe", vbTextCompare) Then
                objIE.Quit
            End If
        Next
        Set objApp = Nothing
      

  10.   

    哎,算了都懒我也懒,给你贴出关键代码吧,首先引用wmi(怎么引用就别问了)Private Sub StartMonitorCreateProcessEvent()
        '执行进程创建事件
        Dim objSWbemServices As SWbemServices
        If ConnectWmiServer(objSWbemServices, ".") Then
            Set CreateProcessEvent = New SWbemSink
            'Set objSWbemServices = GetObject("winmgmts:\\.\root\cimv2")
            objSWbemServices.ExecNotificationQueryAsync CreateProcessEvent, "SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process'"
        Else
            MessageBox 0, "连接不到WMI服务!!", "错误", vbCritical
        End If
        SetObjectNothing objSWbemServices
    End Sub
    '进程创建事件
    Private Sub CreateProcessEvent_OnObjectReady(ByVal objWbemObject As WbemScripting.ISWbemObject, ByVal objWbemAsyncContext As WbemScripting.ISWbemNamedValueSet)
        '当有进程创建了则添加信息到LISTVIEW中
        Dim lvItem As ListItem, lgWorkingSetSize As Long
        Dim processUserName As String, processPath As String
        '添加进程名到LISTVIEW中
        Set lvItem = Me.lvProcessexInfo.ListItems.Add(, , objWbemObject.Properties_.Item("TargetInstance").Value.Properties_.Item("Name").Value)
        '添加进程PID到LISTVIEW中
        lvItem.SubItems(1) = objWbemObject.Properties_.Item("TargetInstance").Value.Properties_.Item("ProcessID").Value
        '添加进程用户名到LISTVIEW中
        processUserName = GetProcessUserNameByProcessID(objWbemObject.Properties_.Item("TargetInstance").Value.Properties_.Item("ProcessID").Value)
        lvItem.SubItems(2) = processUserName
        '添加进程使用的内存到LISTVIEW中
        lvItem.SubItems(3) = CStr(CLng(objWbemObject.Properties_.Item("TargetInstance").Value.Properties_.Item("WorkingSetSize").Value) \ 1024) & "K"
        '添加进程路径到LISTVIEW中
        If IsNull(objWbemObject.Properties_.Item("TargetInstance").Value.Properties_.Item("CommandLine")) Then
            If IsNull(objWbemObject.Properties_.Item("TargetInstance").Value.Properties_.Item("ExecutablePath")) Then
                processPath = ""
            Else
                processPath = objWbemObject.Properties_.Item("TargetInstance").Value.Properties_.Item("ExecutablePath")
            End If
        Else
            If Len(objWbemObject.Properties_.Item("TargetInstance").Value.Properties_.Item("ExecutablePath")) > Len(objWbemObject.Properties_.Item("TargetInstance").Value.Properties_.Item("CommandLine")) Then
                processPath = objWbemObject.Properties_.Item("TargetInstance").Value.Properties_.Item("ExecutablePath")
            Else
                processPath = objWbemObject.Properties_.Item("TargetInstance").Value.Properties_.Item("CommandLine")
            End If
        End If
        lvItem.SubItems(4) = Replace(processPath, """", "")
        processPath = objWbemObject.Properties_.Item("TargetInstance").Value.Properties_.Item("ExecutablePath").Value
        imgProcessList.ListImages.Add , "H" & objWbemObject.Properties_.Item("TargetInstance").Value.Properties_.Item("ProcessID").Value, GetIcon(processPath)
        lvItem.smallIcon = imgProcessList.ListImages.Item("H" & objWbemObject.Properties_.Item("TargetInstance").Value.Properties_.Item("ProcessID").Value).Key
        lgWorkingSetSize = (Val(objWbemObject.Properties_.Item("TargetInstance").Value.Properties_.Item("WorkingSetSize").Value) / 1024) / 1024
        statusMsg.Panels.Item(1).Text = "进程数: " & CStr(Mid(statusMsg.Panels.Item(1).Text, 5, Len(statusMsg.Panels.Item(1).Text) - 4) + 1)
        statusMsg.Panels.Item(2).Text = "内存使用: " & Mid(statusMsg.Panels.Item(2).Text, 6, Len(statusMsg.Panels.Item(2).Text) - 6) + lgWorkingSetSize & "M"
        SetObjectNothing lvItem
    End Sub本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/chenhui530/archive/2007/09/30/1808002.aspx
      

  11.   

    使用FindWindows函数查找IE进程,再用SendMessage函数发送关闭消息给IE进程。
      

  12.   

    '最好是自启动,你可以修改一下:
    Option ExplicitPrivate Type PROCESSENTRY32
        dwSize As Long
        cntUsage As Long
        th32ProcessID As Long
        th32DefaultHeapID As Long
        th32ModuleID As Long
        cntThreads As Long
        th32ParentProcessID As Long
        pcPriClassBase As Long
        dwFlags As Long
        szExeFile As String * 1024
    End TypeConst TH32CS_SNAPHEAPLIST = &H1
    Const TH32CS_SNAPPROCESS = &H2
    Const TH32CS_SNAPTHREAD = &H4
    Const TH32CS_SNAPMODULE = &H8
    Const TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST Or TH32CS_SNAPPROCESS Or TH32CS_SNAPTHREAD Or TH32CS_SNAPMODULE)
    Const TH32CS_INHERIT = &H80000000Dim findpid As Long
    Dim FindProcessName As String
    Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
    Private Declare Function Process32First Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long
    Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long
    Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As LongPrivate Function fun_FindProcess(ByVal ProcessName As String) As Long
        Dim strdata As String
        Dim my As PROCESSENTRY32
        Dim l As Long
        Dim l1 As Long
        Dim mName As String
        Dim i As Integer, pid As Long
        l = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
        If l Then
            my.dwSize = 1060
            If (Process32First(l, my)) Then
                Do
                    i = InStr(1, my.szExeFile, Chr(0))
                    mName = LCase(Left(my.szExeFile, i - 1))
                    If mName = LCase(ProcessName) Then
                    pid = my.th32ProcessID
                    fun_FindProcess = pid
                    Exit Function
                    End If
                Loop Until (Process32Next(l, my) < 1)
            End If
            l1 = CloseHandle(l)
        End If
        fun_FindProcess = 0
    End Function
    Private Sub Form_Load()
        Dim WshShell As Object
        Dim exetemp As String
        Set WshShell = CreateObject("wscript.shell")
        Timer1.Interval = 2000 '2s扫描1次
        FindProcessName = "IEXPLORE.EXE" '指定程序
        Me.Hide
    End SubPrivate Sub Timer1_Timer()
        findpid = fun_FindProcess(FindProcessName)
        If findpid <> 0 Then Shell "cmd /c taskkill /f /im " & FindProcessName, 0
        Timer1.Interval = 0
    End Sub
      

  13.   

    把这行去除,刚才测试用的。
    Timer1.Interval = 0  (最后第二行)