少しおかしなトレース出力を行った不正なvbscriptがあり、今では何千ものメッセージボックスを閉じる必要があります。Enterキーを押したままにして、それらの多くを閉じることができますが、それでも数分かかります。再起動することはできますが、すべてのアプリを再度開く必要があります。すべてのメッセージボックスを自動的に閉じる簡単な方法はありますか?タスクマネージャーを調べてみましたが、ボックスを生成するプロセスが長い間終了しているようです。何か案は?
5 に答える
msgbox ウィンドウを孤立させる方法がわからない場合は、実行中のプロセス リストに cscript.exe または wscript.exe が残っているはずです。以下は、基になるプロセスを終了し、メッセージ ボックスを閉じる必要があります。
strComputer = "."
strProcessToKill = "wscript.exe"
SET objWMIService = GETOBJECT("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
SET colProcess = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = '" & strProcessToKill & "'")
FOR EACH objProcess in colProcess
objProcess.Terminate()
NEXT
明らかに、wscript.exe を変更します。使用している場合は cscript.exe に。
cscript.exe
の代わりに常に vbscript を開始しますwscript.exe
。cscript は、GUI ではなくコンソールに出力します。または、 Push The Freakin' Buttonなどのアプリケーションを使用して、ボタンのクリックを自動化することもできます。
明示的なMsgBox
呼び出しを使用している場合、cscript を使用しても役に立ちません。MsgBox
ソリューションとして cscript を使用するには、呼び出しに変更する必要がありWscript.Echo
ます。
すべてのウィンドウを閉じてすべてのプロセスを一度に停止するには、コマンド プロンプト ウィンドウを開いて次のように入力します。
TASKKILL /F /IM cmd.exe /T
また
TASKKILL /F /IM wscript.exe /T
これにより、すべての cmd.exe または wscript.exe プロセスがすぐに終了します...スクリプト内にある必要がある場合は、次のように呼び出すことができますWshShell.Run "TASKKILL /F /IM cmd.exe /T"
これははるかに簡単で効率的です...
これは差し迫った問題の解決にはなりませんが、デフォルトのスクリプト ホストを Cscript に変更することをお勧めします。これにより、将来この問題を防ぐことができます。参照:この technet 記事。
Public Class Form1
Private m_Title As String
'Windows API
Private Declare Function PostMessage Lib "user32" _
Alias "PostMessageA" (ByVal hWnd As Int32, _
ByVal wMsg As Int32, _
ByVal wParam As Int32, _
ByVal lParam As Int32) As Int32
Declare Function SendMessage Lib "USER32" _
Alias "SendMessageA" (ByVal hWnd As Int32, _
ByVal Msg As Int32, _
ByVal wParam As Int32, _
ByVal lParam As Int32) As Int32
Private Declare Function FindWindow Lib "user32" _
Alias "FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Int32
Private Const WM_CLOSE As Int32 = &H10
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Button1.Click
m_Title = "Auto Close Msg"
Me.Timer1.Interval = 2000 'timer1 placed on form
Me.Timer1.Start()
MsgBox("Auto close in 2 seconds", MsgBoxStyle.OkOnly, m_Title)
End Sub
Private Sub CloseMSGBOX()
'Use Windows API to find and close the message box
'
'http://msdn.microsoft.com/en-us/library/…
'#32770 The class for a dialog box.
'http://msdn.microsoft.com/en-us/library/…
'
'http://msdn.microsoft.com/en-us/library/…
'
Dim hWnd, retval As Int32
Dim WinTitle As String
WinTitle = m_Title '<- Title of Window
hWnd = FindWindow("#32770", WinTitle) 'Get the msgBox handle
retval = PostMessage(hWnd, WM_CLOSE, 0, 0) ' Close the msgBox
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Timer1.Tick
CloseMSGBOX()
End Sub
End Class
ここでこのコードを見つけました