找到的以前的一些源码测试了无效,比如这个,按说是能结束EXCEL.EXE的,但测试后无效,哪位能给个XP下能用的,谢谢了!Private Declare Function CreateToolhelpSnapshot Lib "KERNEL32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function ProcessFirst Lib "KERNEL32" Alias "Process32First" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function ProcessNext Lib "KERNEL32" Alias "Process32Next" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private 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 Type
Private Const TH32CS_SNAPPROCESS = &H2
Private Const TH32CS_SNAPheaplist = &H1
Private Const TH32CS_SNAPthread = &H4
Private Const TH32CS_SNAPmodule = &H8
Private Const TH32CS_SNAPall = TH32CS_SNAPPROCESS + TH32CS_SNAPheaplist + TH32CS_SNAPthread + TH32CS_SNAPmodule
Private Declare Function OpenProcess Lib "KERNEL32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function TerminateProcess Lib "KERNEL32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function CloseHandle Lib "KERNEL32" (ByVal hObject As Long) As Long
Private Const PROCESS_TERMINATE As Long = (&H1)
Private Sub Command1_Click()
    Dim proc As PROCESSENTRY32
    Dim snap As Long
    Dim lngContinue As Long
    snap = CreateToolhelpSnapshot(TH32CS_SNAPall, 0) '获得进程“快照”的句柄
    proc.dwSize = Len(proc)
    lngContinue = ProcessFirst(snap, proc) '获取第一个进程,并得到其返回值
    lngCount = 0
    While lngContinue <> 0 '当返回值非零时继续获取下一个进程
        If UCase(proc.szExeFile) = "EXCEL.EXE" Then
            Dim hProcess As Long
            hProcess = OpenProcess(PROCESS_TERMINATE, False, th32ProcessID)  '获取进程句柄
            ret = TerminateProcess(hProcess, 0) '关闭进程
            CloseHandle hProcess
        End If
        lngContinue = ProcessNext(snap, proc)
    Wend
    CloseHandle snap '关闭进程“快照”句柄End Sub

解决方案 »

  1.   

    '枚举所有进程,发现EXCEL就关闭它
    Option Explicit
    Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
    Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
    Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
    Private Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
    Private Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
    Private Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
    Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
    Private Const SW_HIDE = 0
    Private Const SW_RESTORE = 9
    Private Const SW_SHOW = 5
    Private Const TH32CS_SNAPPROCESS = &H2
    Private Const TH32CS_SNAPheaplist = &H1
    Private Const TH32CS_SNAPthread = &H4
    Private Const TH32CS_SNAPmodule = &H8
    Private Const TH32CS_SNAPall = TH32CS_SNAPPROCESS + TH32CS_SNAPheaplist + TH32CS_SNAPthread + TH32CS_SNAPmodule
    Private Const MAX_PATH As Integer = 260
    Private Const PROCESS_TERMINATE = &H1
    Private 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 * MAX_PATH
    End Type
    Private Sub Form_Load()
        Dim i As Long
        Dim proc As PROCESSENTRY32
        Dim snap As Long
        Dim exename As String
        Dim hand As Long, theloop As Long
        snap = CreateToolhelpSnapshot(TH32CS_SNAPall, 0)    ':获得进程“快照”的句柄
        proc.dwSize = Len(proc)
        theloop = ProcessFirst(snap, proc)  ':获取第一个进程,并得到其返回值
        i = 0
        While theloop <> 0  ':当返回值非零时继续获取下一个进程
            exename = proc.szExeFile
            If Left(UCase(exename), 9) = "EXCEL.EXE" Then
                hand = OpenProcess(PROCESS_TERMINATE, True, proc.th32ProcessID) ':获取进程句柄
                TerminateProcess hand, 0    ':关闭进程
            End If
            theloop = ProcessNext(snap, proc)
        Wend
        CloseHandle snap    ':关闭进程“快照”句柄
    End Sub
      

  2.   

    楼上的方法正解,不过还有个更厉害的,有时候程序不能结束一些进程,用
    shell命令调用:ntsd -c q -p PID结束进程更好用些!
    其中PID代表了想关闭的进程的进程号。进程号可以在任务管理器里找到。
    ntsd可以杀死除了System、SMSS.EXE和CSRSS.EXE以外的所有进程。
      

  3.   

    首先通过CreateToolhelp32Snapshot函数创建一个进程的快照,然后通过调用Process32First使用快照返回的句柄对进程进行遍历,相关的信息存放在PROCESSENTRY32结构类型的实例中,然后显示出来。 Winxp+vb6+sp6代码如下:Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As LongPrivate Declare Function Process32First Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As LongPrivate Declare Function Process32Next Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As LongPrivate Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _    ByVal blnheritHandle As Long, ByVal dwAppProcessId As Long) As Long Private Declare Function TerminateProcess Lib "kernel32" (ByVal ApphProcess As Long, _    ByVal uExitCode As Long) As Long Private 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 * 1024End Type Const TH32CS_SNAPHEAPLIST = &H1Const TH32CS_SNAPPROCESS = &H2Const TH32CS_SNAPTHREAD = &H4Const TH32CS_SNAPMODULE = &H8Const TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST Or TH32CS_SNAPPROCESS Or TH32CS_SNAPTHREAD Or TH32CS_SNAPMODULE)Const TH32CS_INHERIT = &H80000000'添加listview控件,3个按钮'删除listview中选定的进程Private Sub Command2_Click()    If MsgBox("你想删除 " & ListView1.SelectedItem.SubItems(2) & " 进程?", vbYesNo + vbQuestion) <> vbYes Then        Exit Sub    End If        Dim mProcID As Long    mProcID = OpenProcess(1&, -1&, ListView1.SelectedItem)    TerminateProcess mProcID, 0&    DoEvents    ListView1.ListItems.Remove (ListView1.SelectedItem.Index)    ListView1.RefreshEnd Sub'得到进程填充listviewPrivate Sub Command1_Click()  Dim my As PROCESSENTRY32  Dim l As Long  Dim l1 As Long  Dim mlistitem As ListItem  '  List1.Clear  l = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)  If l Then    my.dwSize = 1060    If (Process32First(l, my)) Then '遍历第一个进程      Do       Set mlistitem = ListView1.ListItems.Add(, , my.th32ProcessID)             mlistitem.SubItems(1) = my.th32ParentProcessID             mlistitem.SubItems(2) = my.szExeFile      Loop Until (Process32Next(l, my) < 1) '遍历所有进程知道返回值为False    End If    l1 = CloseHandle(l)  End IfEnd Sub Private Sub Form_Load()    ListView1.ListItems.Clear    ListView1.ColumnHeaders.Clear    ListView1.FullRowSelect = True    ListView1.ColumnHeaders.Add , , "Process ID", 1500    ListView1.ColumnHeaders.Add , , "Process Parent ID", (1500)    ListView1.ColumnHeaders.Add , , "Name", (Me.Width - 3200)    ListView1.View = lvwReportEnd Sub '循环检测进程中是否有指定进程,如果有,关闭,如果没有,启动一个程序Private Sub Command3_Click()  Dim my As PROCESSENTRY32  Dim l As Long  Dim l1 As Long  Dim flag As Boolean  Dim mName As String  Dim i As Integer   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 = "winword.exe" Then             PID = my.th32ProcessID             pname = mName             MsgBox "找到word"              If MsgBox("你想删除 " & mName & " 进程?", vbYesNo + vbQuestion) <> vbYes Then                    Exit Sub                End If                 Dim mProcID As Long             mProcID = OpenProcess(1&, -1&, PID)             TerminateProcess mProcID, 0&                          flag = True             Exit Sub         Else             flag = False         End If      Loop Until (Process32Next(l, my) < 1) '遍历所有进程知道返回值为False    End If    l1 = CloseHandle(l)  End If    If flag = False Then    MsgBox "没有找到word"    Shell "c:\Program Files\Microsoft Office\Office\WINWORD.EXE", vbNormalFocus  End IfEnd Sub
      

  4.   

    http://community.csdn.net/Expert/topic/4181/4181298.xml?temp=9.751529E-02
    去看看吧
      

  5.   

    调用下面命令,只有windows内核进程杀不掉,其它都可以杀.只有System、SMSS.EXE和CSRSS.EXE不能杀。前两个是纯内核态的,最后那个是Win32子系统,ntsd本身需要它。ntsd从2000开始就是系统自带的用户态调试工具。被调试器附着(attach)的进程会随调试器一起退出,所以可以用来在命令行下终止进程。使用ntsd自动就获得了debug权限,从而能杀掉大部分的进程。ntsd会新开一个调试窗口,本来在纯命令行下无法控制,但如果只是简单的命令,比如退出(q),用-c参数从命令行传递就行了。NtsdNtsd 按照惯例也向软件开发人员提供。只有系统开发人员使用此命令。有关详细信息,请参阅 NTSD 中所附的帮助文件。用法:开个cmd.exe窗口,输入:  ntsd -c q -p PID   把最后那个PID,改成你要终止的进程的ID。如果你不知道进程的ID,任务管理器->进程选项卡->查看->选择列->勾上"PID(进程标识符)",然后就能看见了。
      

  6.   

    只要提升权限,系统进程也是可以被kill掉的,不过系统进程kill掉了,系统就崩溃了,罪过~