Войти

Показать полную графическую версию : [решено] Как сделать чтобы когда я запускал ярлык запускалось две программы


AN9ROS
06-10-2011, 18:20
Как сделать чтобы когда я запускал ярлык запускалось две программы и когда я выхожу выходило их двух программ?

mirror
06-10-2011, 18:51
Ну запуск 2х программ можно сделать БАТником , а вот закрытие я не знаю :С

Iska
07-10-2011, 01:34
Например, так:
Option Explicit

Dim strApplication1
Dim strApplication2

Dim strComputer

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim objSWbemObjectEx
Dim objSWbemEventSource
Dim objSWbemObjectEx_AnEvent

Dim lngProcessID1
Dim lngProcessID2


strApplication1 = "Notepad.exe"
strApplication2 = "Calc.exe"

strComputer = "."

Set objSWbemLocator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
Set objSWbemObjectEx = objSWbemServicesEx.Get("Win32_Process")

If objSWbemObjectEx.Create(strApplication1, Null, Null, lngProcessID1) = 0 Then
If objSWbemObjectEx.Create(strApplication2, Null, Null, lngProcessID2) = 0 Then
Set objSWbemEventSource = objSWbemServicesEx.ExecNotificationQuery( _
"SELECT * FROM __InstanceDeletionEvent WITHIN 1 " & _
"WHERE TargetInstance ISA 'Win32_Process' " & _
"AND (TargetInstance.Handle = '" & CStr(lngProcessID1) & "' " & _
"OR TargetInstance.Handle = '" & CStr(lngProcessID2) & "')")

Do
Set objSWbemObjectEx_AnEvent = objSWbemEventSource.NextEvent

Select Case objSWbemObjectEx_AnEvent.TargetInstance.ProcessID
Case lngProcessID1
If objSWbemServicesEx.Get("Win32_Process.Handle='" & CStr(lngProcessID2) & "'").Terminate(0) <> 0 Then
WScript.Echo "Can't terminate process [" & objSWbemServicesEx.Get("Win32_Process.Handle='" & CStr(lngProcessID2) & "'").Name & "]" & vbCrLf & _
"Close it manually"
End If

Exit Do
Case lngProcessID2
If objSWbemServicesEx.Get("Win32_Process.Handle='" & CStr(lngProcessID1) & "'").Terminate(0) <> 0 Then
WScript.Echo "Can't terminate process [" & objSWbemServicesEx.Get("Win32_Process.Handle='" & CStr(lngProcessID1) & "'").Name & "]" & vbCrLf & _
"Close it manually"
End If

Exit Do
Case Else
' Nothing to do
End Select
Loop

Set objSWbemObjectEx_AnEvent = Nothing
Set objSWbemEventSource = Nothing
Else
WScript.Echo "Can't create process [" & strApplication2 & "]"
End If
Else
WScript.Echo "Can't create process [" & strApplication1 & "]"
End If

Set objSWbemObjectEx = Nothing
Set objSWbemServicesEx = Nothing
Set objSWbemLocator = Nothing

WScript.Quit 0

Сохраните код в файле с расширением «.vbs». Создайте на него ярлык и попробуйте исполнить. В роли «двух программ» выступают Блокнот и Калькулятор.

Если всё работает, как Вам потребно — поменяйте в коде скрипта имена исполняемых файлов Блокнота и Калькулятора:
strApplication1 = "Notepad.exe"
strApplication2 = "Calc.exe"
на полные пути к Вашим двум приложениям.

P.S. Снятие приложений по «.Terminate()» — «жёсткое», следствие — не сохранённые данные приложения теряются.

AN9ROS
07-10-2011, 17:14
Iska, Спасибо!




© OSzone.net 2001-2012