2 Stimmen

Wie kann man "Task beenden" statt "beenden" oder "terminieren"?

Ich habe eine 3G-Karte, um einem entfernten Computer Internet zur Verfügung zu stellen... Ich muss ein Programm ausführen (mit der Karte zur Verfügung gestellt), um die Verbindung herzustellen... da Verbindungen plötzlich verloren geht, habe ich ein Skript geschrieben, das das Programm beendet und wieder öffnet, so dass die Verbindung wiederhergestellt wird, gibt es bestimmte Versionen dieses Programms, die die Verbindung nicht beenden, wenn es beendet wird, nur wenn es richtig geschlossen wird.

Ich suche also ein Skript oder ein Programm, das ein Fenster "ordnungsgemäß schließt", damit ich es schließen und wieder öffnen kann, falls die Verbindung unterbrochen wird.

Der folgende Code beendet das Programm

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

2voto

Steven Sudit Punkte 19005

So wie ich es verstehe, besteht die Grundidee darin, den Prozess sauber zu beenden, anstatt ihn abrupt zu beenden. Eine Möglichkeit wäre, eine Windows-Nachricht mit WM_CLOSE an das Hauptfenster zu senden.

(Sie können dies vielleicht simulieren, indem Sie Tastenanschläge entsprechend Alt+F4 senden, aber am besten ist es, einfach WM_CLOSE zu senden).

2voto

Joe Punkte 3727

Wenn Sie VBScript verwenden müssen, wäre eine einfache Möglichkeit, die Anwendung zu aktivieren und dann SendKeys zu verwenden, um sie wiederherzustellen, wenn sie minimiert ist, und "alt-f4" zu senden. Es ist etwas umständlich, aber es kann einfacher sein, als das Handle des Hauptfensters zu finden, und es könnte für Sie gut genug funktionieren.

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X