2016-08-19 2 views
0

doループを使用してキープレスをシミュレートするVB Scriptコードを作成しました。このプログラムは、指定された時間間隔後にキーボードからのキーストロークイベントをシミュレートします。スクリプトにメッセージボックスを追加して、作業が終わるたびにメッセージボックスをオフにする必要があります。現在、システムをログオフするまで、バックグラウンドで無期限に実行されます。Vbscriptでループを開始および終了するためにmsgboxを追加する方法

このループは、誰かが手動でMsgBoxの[はい/いいえ]ボタンを使用して終了するまでバックグラウンドで実行する必要があります。ここで

はコードで、私が書いた:

Set Wshell=CreateObject("Wscript.shell") 
Do 
Wshell.SendKeys "{SCROLLLOCK}" 

WScript.sleep 10000 
Loop 

を私はまた、select文を使用してみましたが、動作するようには思えません。

答えて

1

次のボタンが押される前に終了することができます。 スクリプトをオンデマンドで終了し、他のスクリプトをバックグラウンドで実行させるには、別のソリューションが必要です。または、最初のスクリプトを終了する2番目のスクリプト。

Set Wshell=CreateObject("Wscript.shell") 
Do 
    Wshell.SendKeys "{SCROLLLOCK}" 
    continue = MsgBox ("Do you want to press the ScrollLock again?", vbYesNo, "Question") 
    Select Case continue 
    Case vbNo 
    Exit Do 
    End Select 
    WScript.sleep 10000 
Loop 

がこの記事から撮影:How to stop a vb script running in windows

Option Explicit 
Dim WshShell 
Set WshShell = WScript.CreateObject("WScript.Shell") 
WshShell.Run "taskkill /f /im Cscript.exe", , True 
WshShell.Run "taskkill /f /im wscript.exe", , True 

スクリプトの苦労を殺すために2番目のスクリプトがあります。私はあなたがスクリプトを止めるとどう思いますかわからないのですか? GUIがない場合は、あなたが望む時間にそれを行うことはできません。

continue = MsgBox ("Do you want to press the ScrollLock again?", vbYesNo, "Question") 
Select Case continue 
Case vbNo 
Dim WshShell 
    Set WshShell = WScript.CreateObject("WScript.Shell") 
    WshShell.Run "taskkill /f /im Cscript.exe", , True 
    WshShell.Run "taskkill /f /im wscript.exe", , True 
End Select 

を、画面の隅に、このポップアップメッセージボックスを引くので、あなたはもうそれをたくない場合は、単にノー押すと、あなたは良いしている:ソリューションを組み合わせることが、あなたはこのような何かを行うことができます。 ^^

+0

手動で停止するまでスクリプトを実行する必要がありました。時間間隔の後に表示されるMsgBoxは、スクリプトが書き込まれた目的を削除します。 – Ansh

+0

いくつかの文章を追加しました – prizm1

1

は、スクリプトを停止するための質問をするためにそのような何かを試すことができます。

Option Explicit 
Dim Title,Ws 
Title = "Ask a question to stop the script !" 
Set Ws=CreateObject("Wscript.shell") 
Do 
    Ws.SendKeys "{SCROLLLOCK}" 
    WScript.sleep 10000 
    Call Ask_Question() 
Loop 

Sub Ask_Question() 
    Dim Answer 
    Answer=MsgBox("Did you want to stop this script ?"_ 
    & vbcr & "(Yes/No) ?",vbQuestion+vbYesNo,Title) 
     If Answer=vbYes Then 
      Wscript.Quit(0) 
     Else 
      Exit Sub  
     End If  
End Sub 

編集12時53

@ 19/08/2016ただ、一般的に例:

あなたはどのプログラムを監視したのかわからないので、Notepad.exeと計画しています。 このスクリプトは、progr am Notepad.exeが実行中であるかどうか そうでない場合は、スクリプトを停止するかどうかを尋ねます。

Option Explicit 
Dim ProcessPath,WshShell 
ProcessPath = "%Windir%\System32\Notepad.exe" 
Set WshShell = CreateObject("WScript.Shell") 
If AppPrevInstance() Then 
    MsgBox "There is an existing proceeding !" & VbCrLF &_ 
    CommandLineLike(WScript.ScriptName),VbExclamation,"There is an existing proceeding !"  
    WScript.Quit 
Else 
    Do 
     Call Main() 
     Pause(10) ' Pause 10 seconds 
     If CheckProcess(DblQuote(ProcessPath)) = False Then 
      Call Ask_Question() 
     End If 
    Loop 
End If 
'************************************************************************** 
Function CheckProcess(ProcessPath) 
    Dim strComputer,objWMIService,colProcesses,Tab,ProcessName 
    strComputer = "." 
    Tab = Split(ProcessPath,"\") 
    ProcessName = Tab(UBound(Tab)) 
    ProcessName = Replace(ProcessName,Chr(34),"") 
    Set objWMIService = GetObject("winmgmts:" _ 
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
    Set colProcesses = objWMIService.ExecQuery _ 
    ("Select * from Win32_Process Where Name = '"& ProcessName & "'") 
    If colProcesses.Count = 0 Then 
     CheckProcess = False 
    Else 
     CheckProcess = True 
    End if 
End Function 
'************************************************************************** 
Function DblQuote(Str) 
    DblQuote = Chr(34) & Str & Chr(34) 
End Function 
'************************************************************************** 
Sub Pause(Secs)  
    Wscript.Sleep(Secs * 1000)  
End Sub 
'************************************************************************** 
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  
'*************************************************************************** 
Function CommandLineLike(ProcessPath) 
    ProcessPath = Replace(ProcessPath, "\", "\\") 
    CommandLineLike = "'%" & ProcessPath & "%'" 
End Function 
'**************************************************************************** 
Sub Main() 
    WshShell.SendKeys "{SCROLLLOCK}" 
End Sub 
'**************************************************************************** 
Sub Ask_Question() 
    Dim Answer,Title 
    Title = "Ask a question to stop the script !" 
    Answer=MsgBox("Did you want to stop this script ?"_ 
    & vbcr & "(Yes/No) ?",vbQuestion+vbYesNo,Title) 
     If Answer=vbYes Then 
      Wscript.Quit(0) 
     Else 
      Exit Sub  
     End If  
End Sub 
'**************************************************************************** 
+0

返信ありがとうございますが、ループを続行するかどうかを尋ねることなくループを実行し続ける必要があります。これがスクリプトの唯一の目的です。 スクリプトを手動で停止できるmsgbox(または他の方法)が必要です。 – Ansh

+0

@Anshこの場合、スクリプトを停止する条件は何かを記述する必要がありますか?私は正確に何がうまくいった後にスクリプトをいつ止めたいのですか? – Hackoo

+0

私は実際にバックグラウンドでシステム上で別のプログラムを実行しています(オートメーションスクリプト)。このスクリプトは、他のプログラムがバックグラウンドで実行されている間だけ画面をオンにします。私は自動化テストが完了した後、このスクリプトを手動で停止したいと思っています。あなたがそれを止めることができるどのような方法でも十分です。 – Ansh

関連する問題