如何“结束任务”而不是“终止”或“终止”?

我有一个3G卡提供互联网远程计算机…我必须运行一个程序(与卡提供)build立连接…因为连接突然失去了我写了一个脚本,杀死程序,并重新打开它以便重新build立连接,这个程序的某些版本在杀死/终止时不会终止连接,只是closures正确。

所以我正在寻找一个脚本或程序,“正确closures”一个窗口,所以我可以closures它,并重新打开它的情况下,连接丢失。

这是杀死程序的代码

Option Explicit Dim objWMIService, objProcess, colProcess Dim strComputer, strProcessKill strComputer = "." strProcessKill = "'Telcel3G.exe'" Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" _ & strComputer & "\root\cimv2") Set colProcess = objWMIService.ExecQuery _ ("Select * from Win32_Process Where Name = " & strProcessKill ) For Each objProcess in colProcess objProcess.Terminate() Next WSCript.Echo "Just killed process " & strProcessKill _ & " on " & strComputer WScript.Quit 

如果你必须使用VBScript,一个简单的方法是激活应用程序,然后使用SendKeys恢复它,如果它被最小化,并发送“alt-f4”。 这是hacky,但它可能比找到主窗口的手柄更容易,它可能适合你的工作。

 Option Explicit Dim objWMIService, objProcess, colProcess Dim strComputer, strProcessKill strComputer = "." strProcessKill = "'Telcel3G.exe'" Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" _ & strComputer & "\root\cimv2") dim WshShell set WshShell = CreateObject("WScript.Shell") Set colProcess = objWMIService.ExecQuery _ ("Select * from Win32_Process Where Name = " & strProcessKill ) For Each objProcess in colProcess WshShell.AppActivate objProcess.ProcessId WScript.Sleep 1000 WshShell.Sendkeys "% r" WScript.Sleep 1000 WshShell.Sendkeys "%{F4}" Next 

据我了解,基本的想法是彻底关闭这个过程,而不是突然终止它。 一种方法是使用WM_CLOSE将Windows消息发布到主窗口。

(您可以通过发送与Alt + F4相对应的按键来模拟,但最好只发送WM_CLOSE。)