哎我不是回答过你了吗?
算了帮你写了:
Dim RetVal As Long
On Error GoTo Calc: if AppActivate "计算器" then
    RetVal = Shell(App.Path & "\b.EXE", 1)endif
Exit Sub
Calc:
RetVal = Shell(App.Path & "\a.EXE", 1)

解决方案 »

  1.   

    可以用Shell函数的反回值来处理这个东西
      

  2.   

    哎我不是回答过你了吗?
    算了帮你写了:
    Dim RetVal As Long
    On Error GoTo Calc: if AppActivate "计算器" then
        RetVal = Shell(App.Path & "\b.EXE", 1)endif
    Exit Sub
    Calc:
    RetVal = Shell(App.Path & "\a.EXE", 1)
      

  3.   

    http://www.csdn.net/expert/topic/794/794782.xml?temp=.4080469
      

  4.   

    Option ExplicitDim id As Long
    Private Sub Command1_Click()
        id = Shell("notepad.exe", vbNormalFocus)End SubPrivate Sub Command2_Click()
        AppActivate id
        SendKeys "%{F4}"
    End Sub
      

  5.   

    可以用API
     先找到应用程序窗体的句柄
    然后发消息关闭
      

  6.   

    Const SYNCHRONIZE = &H100000
    Const INFINITE = &HFFFFFFFF
      
    Option Explicit
       
    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 WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
    Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
     
    '  分别声明  Process  ID  及  Process  Handle  变数
    Dim pId As Long, pHnd As LongPrivate Sub Command1_Click() 'Open    '  Shell传回Process  ID,运行的程序是CALC.EXE
        pId = Shell("CALC.EXE", 1)
        '  取得  Process  Handle
        pHnd = OpenProcess(SYNCHRONIZE, 0, pId)
    End SubPrivate Sub Command2_Click() 'Close    '  TerminateProcess  所传入的是  Process  Handle
        Call TerminateProcess(pHnd, 0)
        Call CloseHandle(pHnd)
    End Sub