Автор: azamapendrus
Дата сообщения: 22.11.2008 13:55
Подскажите как чуть исправить скрипт.
Мне необходимо, запускать в свернутом виде по два exe-файла (с нажатием ENTER), после того как один ехе отработал и вырубился, подключается следующий, но чтобы всегда работали одновременно две ехе. После того, как последний ехе отработал и прозвучал сигнал выскакивало бы сообщение: Разорвать инет? , и если в течении 2 минут не нажать отмену разрывал бы инет (модемное соединение), а после такое же сообщение о выключении компа.
On Error Resume Next
Set WshShell = WScript.CreateObject("WScript.Shell")
Set oFSO = CreateObject("Scripting.FileSystemObject")
sPath = "C:\Exefiles"
aFilesArr = Array(10, "1.exe", "2.exe", "3.exe", "4.exe", "5.exe", "6.exe", "7.exe", "8.exe", "9.exe", "10.exe")
For i = 1 To aFilesArr(0)
sFile = sPath & "\" & aFilesArr(i)
If (i Mod 2) > 0 Then
Set oExec1 = WshShell.Exec(sFile)
While Not WshShell.AppActivate (oExec1.ProcessID)
WScript.Sleep 1000
WEnd
WshShell.SendKeys "~"
Else
WScript.Sleep 5000 'пауза
Set oExec2 = WshShell.Exec(sFile)
While Not WshShell.AppActivate (oExec2.ProcessID)
WScript.Sleep 1000
WEnd
WshShell.SendKeys "~"
While oExec1.Status = 0 And oExec2.Status = 0
' вот здесь после того как одна ехе отработала, а другая ещё работает, подрубаются две новых, и получается уже 3 одновременно работают, и так далее, в конце может получиться, что и 7-8 одновременно будут работать, что нежелательно.
WScript.Sleep 3000
WEnd
If i = aFilesArr(0) Then
'=====Звуковой сигнал
Set WMPlayer = CreateObject("WMPlayer.OCX")
WMPlayer.settings.autoStart = False
WMPlayer.settings.enableErrorDialogs = False
WMPlayer.URL = "C:\WINDOWS\Media\Windows Vista Shutdown.wav"
WMPlayer.controls.play()
While WMPlayer.playState <> 1
WScript.Sleep 1000
Wend
'========================================
sTmpDir = WshShell.ExpandEnvironmentStrings("%Temp%")
sMsgBoxFile = sTmpDir & "\~MsgBox.vbs"
sScriptData = "iAsk = MsgBox(""Выключить компьютер?"", 262144+36, ""Внимание!"")"
sScriptData = sScriptData & vbCRLF & "WScript.StdOut.WriteLine iAsk"
iReboot = ExecExternalScript(sMsgBoxFile, sScriptData, 60 * 1, 6)
If iReboot = 6 Then ShutDown_Comp()
WScript.Quit
End If
End If
Next
' вот здесь бы сообщение о разрыве , а потом уже и выключение
Function ShutDown_Comp()
sComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}\\" & sComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
objOperatingSystem.Win32Shutdown(1)
Next
End Function
Function ExecExternalScript(sScriptFile, sScriptContent, iTime, sDefaultRet)
FileCreate sScriptFile, sScriptContent
Set oExec = WshShell.Exec("Wscript.exe " & sScriptFile)
sStdOutRead = ""
iTimerInit = 0
If iTime Then iTimerInit = Timer
Do While oExec.Status <> 1
WScript.Sleep 100
If iTime And (Timer - iTimerInit) > iTime Then
oExec.Terminate
sStdOutRead = sDefaultRet
Exit Do
End If
Loop
oFSO.DeleteFile sScriptFile
If sStdOutRead = "" Then sStdOutRead = oExec.StdOut.Read(1)
ExecExternalScript = sStdOutRead
End Function
Function FileCreate(sFile, sData)
Set oTF = oFSO.CreateTextFile(sFile, True)
oTF.Write(sData)
oTF.Close
End Function