2015-06-10 4 views
1

У меня есть окно сообщения, которое повторяется, когда вы нажимаете ok - это единственный вариант, кстати.
Мой код:VBS- Могу ли я выйти из окна сообщений VBS, которое повторяется без перехода к диспетчеру задач или cmd?

'Very Annoying script' 
Set objShell = CreateObject("Wscript.Shell") 

intMessage = Msgbox("Click ok to say yes",16, "Is this messagebox annoying?") 

If intMessage = vbOK Then 
    RETRY 
Else 
Wscript.Quit 
End If 
SUB RETRY 
'Very Annoying script' 
Set objShell = CreateObject("Wscript.Shell") 

intMessage = Msgbox("Click ok to say yes",16, "Is this messagebox annoying?") 

If intMessage = vbOK Then 
    RETRY 
Else 
Wscript.Quit 
End If 
End sub 

Могу ли я закончить следующий сценарий, не прекращая процесс меченого Micorosft Windows, основанный Script Host? Это включает в себя не работает УМК линии (не будет работать)

taskkill /im wscript.exe 

ИЛИ

собирается менеджером задач.

+0

Это действительно раздражает, чтобы перейти в диспетчер задач и удалить каждый процесс. – RookieTEC9

+0

Кроме того, я не понимаю вас полностью. Что вы подразумеваете под «почему скажите нам, что вы хотите в реальности, как пользователь» – RookieTEC9

+0

извините, почему НЕ говорят нам, что вы хотите в реальном, как пользователь –

ответ

1

Если вы используете эту команду taskkill /IM wscript.exe /F; Вы убиваете все запущенные vbscript, но Если у вас много запущенного скрипта в цикле с разными дорожками, вы можете использовать этот vbscript, чтобы выбрать, какой из них нужно убить или нет. Итак, цель этого скрипта - выбрать и сфокусировать к процессу, который вы хотите убить, и вы также можете сохранить его в файле журнала. Просто дать попробовать;)

Option Explicit 
Dim Titre,Copyright,fso,ws,NomFichierLog,temp,PathNomFichierLog,OutPut,Count,strComputer 
If AppPrevInstance() Then 
    MsgBox "Il y a une instance déjà en cours" & VbCrLF & CommandLineLike(WScript.ScriptName),VbExclamation,"Il y a une instance déjà en cours"  
    WScript.Quit 
Else 
Copyright = "[© Hackoo © 2015 ]" 
Set fso = CreateObject("Scripting.FileSystemObject") 
Set ws = CreateObject("Wscript.Shell") 
NomFichierLog="Killed Process.txt" 
temp = ws.ExpandEnvironmentStrings("%temp%") 
PathNomFichierLog = temp & "\" & NomFichierLog 
Set OutPut = fso.CreateTextFile(temp & "\" & NomFichierLog,1) 
strComputer = "." 
    Call Find("wscript.exe") 
    Call Explorer(PathNomFichierLog) 
End If 
'*************************************************************************************************** 
Function Explorer(File) 
    Dim ws 
    Set ws = CreateObject("wscript.shell") 
    ws.run "Explorer "& File & "\",1,True 
end Function 
'*************************************************************************************************** 
Sub Find(MyProcess) 
    Dim colItems,objItem,Processus,Question 
    Titre = " Processus "& DblQuote(MyProcess) &" en cours d'exécution " 
    Set colItems = GetObject("winmgmts:").ExecQuery("Select * from Win32_Process " _ 
    & "Where Name like '%"& MyProcess &"%' AND NOT commandline like " & CommandLineLike(WScript.ScriptFullName) & "",,48) 
    Count = 0 
    For Each objItem in colItems 
     Count= Count + 1 
     'Processus = Mid(objItem.CommandLine,InStr(objItem.CommandLine,""" """) + 2) 'Extraction du chemin du script en ligne de commande 
     Processus = objItem.CommandLine 'Replace(Processus,chr(34),"") 
     Question = MsgBox ("Voulez-vous arrêter ce script : " & DblQuote(Processus) & " ?" ,VBYesNO+VbQuestion,Titre+Copyright) 
     If Question = VbYes then 
      objItem.Terminate(0)'Tuer ce processus 
      OutPut.WriteLine Processus 
     else 
      Count= Count - 1 'décrementer le compteur de -1 
     End if 
    Next 
OutPut.WriteLine String(100,"*") 
OutPut.WriteLine count & Titre & "ont été arrêtés" 
OutPut.WriteLine String(100,"*") & VbCrLF 
End Sub 
'************************************************************************** 
Function DblQuote(Str) 
    DblQuote = Chr(34) & Str & Chr(34) 
End Function 
'************************************************************************** 
Function AppPrevInstance() 
    With GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") 
     With .ExecQuery("SELECT * FROM Win32_Process WHERE CommandLine LIKE " & CommandLineLike(WScript.ScriptFullName) & _ 
      " AND CommandLine LIKE '%WScript%' OR CommandLine LIKE '%cscript%'") 
      AppPrevInstance = (.Count > 1) 
     End With 
    End With 
End Function 
'************************************************************************** 
Sub Pause(Minutes)  
    Wscript.Sleep(Minutes*1000*60)  
End Sub 
'************************************************************************** 
Function StripProcPath(ProcessPath) 
    Dim arrStr : arrStr = Split(ProcessPath, "\") 
    StripProcPath = arrStr(UBound(arrStr)) 
End Function 
'************************************************************************** 
Function CommandLineLike(ProcessPath) 
    ProcessPath = Replace(ProcessPath, "\", "\\") 
    CommandLineLike = "'%" & ProcessPath & "%'" 
End Function 
'************************************************************************** 
+0

Это действительно здорово. Спасибо. Вы знаете интернет-источник, где я могу узнать больше vbs? – RookieTEC9

2

Единственный способ сделать конец сценария является использование

taskkill /f /im wscript.exe 


Другое то, что это будет просто повторно запустить сценарий (тот же эффект, когда вы просто нажмите кнопку ОК)

Спасибо Цзян YD для ответа