现在有个程序,需要经常重新启动,想偷个懒,就自己用VB作了个小程序,在WINDOWS XP下工作正常,但是转到WINDOWS2000后发现问题:因为想重启的程序名称是中文名,在进程管理器中显示的进程名是乱码,结果只能打开不能关闭,希望有高人能帮忙解决这个问题。
以下是我的源码:
Private Sub Timer1_Timer()
   Dim min
   min = Minute(Time)
   Select Case min
    Case 10, 20, 30, 40, 50, 0  '每10分钟打开一次
        Shell "****.exe", vbNormalFocus
    Case 1, 11, 21, 31, 41, 51  '1分钟后关闭
        Shell "cmd   /c   ntsd   -c   q   -pn   ****.exe", vbMinimizedFocus
    End Select
End Sub

解决方案 »

  1.   

    试了 一下,还是关不了
    要关闭的程序是delphi编写的,不知道有没有影响?
    以下是刚才写,麻烦高人指导
    Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
      Private Declare Function PostMessage Lib "user32.dll" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
      Private Const WM_CLOSE       As Long = &H10Dim l     As Long
      l = FindWindow(vbNullString, "xxxx(程序标题)")
      If l <> 0 Then
              PostMessage l, WM_CLOSE, 0, 0
        End If
      

  2.   

    朋友,你可以试试用DOS命令里的PID来结束这个程序如:
    Shell "taskkill.exe /pid " & id0 & " /f", vbHide
    至于PID你就得自己用API来获得你哪个程序的。
      

  3.   

    不要用:Shell "cmd   /c   ntsd   -c   q   -pn   ****.exe", vbMinimizedFocus 关闭。用API函数SendMessege最好。先找到你窗口的标题,然后找到你窗口的句柄hWnd。
      

  4.   

    关闭窗体用:Call SendMessage(hWnd,WM_CLOSE,0,0)
      

  5.   

    Dim WMI
            Dim objs, obj, SQuery As String
            Set WMI = GetObject("WinMgmts:")
            SQuery = "SELECT * FROM Win32_Process"
            Set objs = WMI.ExecQuery(SQuery)
            For Each obj In objs
                DoEvents
                If LCase(Trim(strName)) = LCase(Trim(obj.Name)) Then
                    obj.Terminate
                    Exit For
                End If
            Next
            Set objs = Nothing
            Set WMI = Nothing
      

  6.   

    还是没有成功,郁闷,WINDOWS 2000server下很多事情还做不了
    根据程序的标题来关闭程序好像行不通
    现在要是能通过进程名称找到窗口句柄或者进程的pid就好了
    不知道哪位高人有好办法