请问用ShellExecute调用的程序,可以用什么函数关掉?急

解决方案 »

  1.   

    http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=35579
      

  2.   

    给程序发送ctrl+F4,或是close的消息
    再或者直接用killprocess
      

  3.   

    WM_CLOSE最好,Ctrl+F4可能关不掉(“是否要保存?”),KillProcess会造成程序故障
      

  4.   

    '把以下代码放入一个模块中, 调用函数KillWindow(用ShellExecute调用的程序的标题)Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal HWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongPublic Const SC_CLOSE = &HF060&
    Public Const WM_SYSCOMMAND = &H112'关闭程序的函数
    Public Sub KillWindow(byval title as string)
    On Error GoTo ErrHandleDim HWnd As Double
    Dim ret As Double     HWnd = FindWindow(vbNullString,title)
         ret = SendMessage(HWnd, WM_SYSCOMMAND, SC_CLOSE, 0)
      
      Exit Sub
    ErrHandle:
      msgbox Err.Description
      Exit SubEnd Sub
      

  5.   

    楼上zxs0001(小盛)的这种方法是可以,但问题是我调用的应用程序的窗口标题是不固定的呀,不过调用这个程序的窗口标题就是固定的,如何才能获得调用程序窗口的标题呢??(注意,应用程序窗口的id是不知道的)
      

  6.   

    这是我所写的代码:
    Private Sub Command2_Click()
    ShellExecute Me.hwnd, "open", "talkback.exe", vbNullString, ".\", SW_SHOWMAXIMIZED
    End Sub
    但是我上面调用的应用程序,窗口标题是不固定的,因为我要用到相对路径调用呀.
    请各为大虾帮忙解决这个难题吧..小弟急着用呀!!!
      

  7.   

    talkback本身的窗口标题是固定的吧?
    不固定的部分是不是只是标题的前一部分,就好像IE的标题栏。
    “网站名 - Microsoft Internet Explorer”
    既然talkback.exe是由你调用的,那么标题栏前一部分的内容你应该知道啊。
    还有,在用FindWindow找窗口时,如果不知道标题可以只传类名过去,也能找到窗口。
    hwnd = FindWindow("类名", vbNullString)
      

  8.   

    我写过一个软件叫窗口间谍,在这里有下载,对你应该有帮助。
    它可以通过鼠标拖动获得任意窗口的句柄,类名和标题,有点像spy++,不过是中文的。http://www.800down.com/view.asp?id=1412