现在有个程序,需要经常重新启动,想偷个懒,就自己用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
以下是我的源码:
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
要关闭的程序是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
Shell "taskkill.exe /pid " & id0 & " /f", vbHide
至于PID你就得自己用API来获得你哪个程序的。
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
根据程序的标题来关闭程序好像行不通
现在要是能通过进程名称找到窗口句柄或者进程的pid就好了
不知道哪位高人有好办法