我要写一个杀进程的程序,搜索后发现了这段程序''用于结束外部进程,hCloseWnd  是要结束的程序的主窗口的  HWND  
Public  Function  TernamiteProcessByHWND(ByVal  hCloseWnd  As  Long)  As  Boolean  
Dim  hProcessID    As  Long  
Dim  hProcess        As  Long  
On  Error  GoTo  PROC_EXIT  
       If  hCloseWnd  =  0  Then  GoTo  PROC_EXIT  
       If  GetWindowThreadProcessId(hCloseWnd,  hProcessID)  =  0  Then  GoTo  PROC_EXIT  
       hProcess  =  OpenProcess(PROCESS_TERMINATE,  False,  hProcessID)  
       If  hProcess  =  0  Then  GoTo  PROC_EXIT  
       If  TerminateProcess(hProcess,  0&)  =  0  Then  GoTo  PROC_EXIT  
       TernamiteProcessByHWND  =  True  
PROC_EXIT:  
       If  Err.Number  <>  0  Then  
               Debug.Print  Err.Description  
               Err.Clear  
       End  If  
End  Function  有一点看不懂,当hProcess  =  0的时候是什么问题,我的程序就是hProcess返回值为0,所以选择的进程杀不掉。

解决方案 »

  1.   

    OpenProcess VB声明 
    Declare Function OpenProcess Lib "kernel32" Alias "OpenProcess" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long 
    说明 
    打开一个现有进程的句柄 
    返回值 
    Long,如执行成功,返回进程句柄;零表示失败。会设置GetLastError 
    参数表 
    参数 类型及说明 
    dwDesiredAccess Long,指定这个句柄要求的访问方法。指定API32.TXT文件中以PROCESS_???开头的一个或多个常数 
    bInheritHandle Long,如句柄能够由子进程继承,则为TRUE 
    dwProcessId Long,要打开那个进程的进程标识符 
    注解 
    这个函数经常用来打开一个要进行同步的进程
     
    //有一点看不懂,当hProcess  =  0的时候是什么问题
    说明OpenProcess函数执行失败,所以转向错误处理语句,不过,建议用Err对象的GetLastError属性获取GetLastError的值。
      

  2.   

    vb的err对象没有getlasterror属性呀,而且我的err.number=0 description为空
      

  3.   

    你在什么系统下面运行这段代码?TerminateProcess只在win9x系列下面起作用,winnt等就不行了,要使用SendMessage Hwnd, WM_close, 0, 0.
      

  4.   

    我是在2000下用的,vb中有相应的API函数吗?
      

  5.   

    GetLastError是API函数//你在什么系统下面运行这段代码?TerminateProcess只在win9x系列下面起作用,winnt等就不行了,要使用SendMessage Hwnd, WM_close, 0, 0.TerminateProcess不是只能在Win9x下用的,而是需要取得权限才可。……手边没有资料,但是与ExitWindowsEX非常相似。可以使用SendMessage,不过不能关闭整个应用程序,也许只是一个窗口。
      

  6.   

    http://www.51813.com/ReadNews.asp?NewsID=676
    PostMessage与sendmessage作用差不多。
      

  7.   

    权限不够,有些程序是kill不掉的。
      

  8.   

    是用本地管理员运行程序的,我的一个定时程序中对excel文件进行读写。为了检测该定时程序是否正确运行结束,又用了另一个定时程序在稍后的时候去检测是否还有excel进程存在。如果存在就将该进程杀掉,将定时程序结束。现在问题是processid可以获得,但是openprocess返回的结果为0。用getlasterror函数检查,返回的结果还是0。不知道怎么办了。
      

  9.   

    使用Err.GetLastDllError返回值5,我查不到这是什么错误。