Как «Завершить задание», а не «Убить» или «Завершить»? - PullRequest
2 голосов
/ 07 мая 2010

У меня есть карта 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 ]

2 голосов
/ 07 мая 2010

Если вам нужно использовать 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 голосов
/ 07 мая 2010

Насколько я понимаю, основная идея состоит в том, чтобы аккуратно завершить процесс, а не внезапно завершить его. Одним из способов будет отправить сообщение Windows в главное окно с помощью WM_CLOSE.

(Вы можете смоделировать это, отправив нажатия клавиш, соответствующие Alt + F4, но лучше всего отправить WM_CLOSE.)

...