代码之家  ›  专栏  ›  技术社区  ›  Luiscencio

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

  •  2
  • Luiscencio  · 技术社区  · 14 年前

    我有一个3G卡为远程电脑提供互联网…我必须运行一个程序(与卡一起提供)来建立连接…由于连接突然断开,我编写了一个脚本来终止程序并重新打开它,以便重新建立连接,所以这个程序的某些版本在终止/终止时不会终止连接,只要正确关闭。

    因此,我正在寻找一个脚本或程序,它可以“正确关闭”一个窗口,这样我就可以关闭它,并在连接丢失时重新打开它。

    这是杀死程序的代码

    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 
    
    2 回复  |  直到 14 年前
        1
  •  2
  •   Joe    14 年前

    如果必须使用vbscript,一个简单的方法是激活应用程序,然后使用sendkeys还原最小化的应用程序,然后发送“alt-f4”。这是黑客,但它可能比找到主窗口的把手容易,而且它可能会很好地为您工作。

    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 
    
        2
  •  2
  •   Steven Sudit    14 年前

    据我所知,基本的想法是彻底关闭进程,而不是突然终止进程。一种方法是在wm_关闭的情况下向主窗口发送一条windows消息。

    (您可以通过发送与alt+f4对应的击键来模拟这一点,但最好只发送wm_close。)