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 Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) As Boolean
Const PROCESS_TERMINATE = 1
Private Sub Form_Load()
       Dim ProID   As Long
       ProID = Shell("notepad.exe", vbNormalFocus)
       Sleep 2000 '两秒钟后关闭
       Dim hProcess As Long
       hProcess = OpenProcess(PROCESS_TERMINATE, False, ProID)
       TerminateProcess hProcess, 1
       CloseHandle hProcess
End Sub
这个例子是打开一个记事本,然后2秒后关闭它.
我想打击一个按钮,打开记事本,然后在退出程序后关闭它,怎么实现呢?

解决方案 »

  1.   

    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 Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) As Boolean
    private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
     Const INFINITE = &HFFFF
    Const PROCESS_TERMINATE = 1
    Private Sub Form_Load()
           Dim ProID   As Long
           ProID = Shell("notepad.exe", vbNormalFocus)
           Sleep 2000 '两秒钟后关闭
           Dim hProcess As Long
           hProcess = OpenProcess(PROCESS_TERMINATE, False, ProID)
           WaitForSingleObject hProcess,INFINITE  '等待笔记本结束
           CloseHandle hProcess
    End Sub
      

  2.   

    在Form_Unload事件中调用TerminateProcess就行了
      

  3.   

    //在Form_Unload事件中调用TerminateProcess就行了
     不知道怎么写!
      

  4.   

    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 Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) As Boolean
    Const PROCESS_TERMINATE = 1Dim ProID As LongPrivate Sub Form_Load()
        ProID = Shell("notepad.exe", vbNormalFocus)
    End SubPrivate Sub Form_Unload(Cancel As Integer)
        Dim hProcess As Long
        hProcess = OpenProcess(PROCESS_TERMINATE, False, ProID)
        TerminateProcess hProcess, 1
        CloseHandle hProcess
    End Sub
      

  5.   

    其实启动程序标准的作法是调用CreateProcess,因为shell也是这样做的。
    这样做可以在函数的返回信息中直接获得进程句柄,不用再OpenProcess。