2

少しおかしなトレース出力を行った不正なvbscriptがあり、今では何千ものメッセージボックスを閉じる必要があります。Enterキーを押したままにして、それらの多くを閉じることができますが、それでも数分かかります。再起動することはできますが、すべてのアプリを再度開く必要があります。すべてのメッセージボックスを自動的に閉じる簡単な方法はありますか?タスクマネージャーを調べてみましたが、ボックスを生成するプロセスが長い間終了しているようです。何か案は?

4

5 に答える 5

3

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 に。

于 2011-09-12T09:24:00.393 に答える
2

cscript.exeの代わりに常に vbscript を開始しますwscript.exe。cscript は、GUI ではなくコンソールに出力します。または、 Push The Freakin' Buttonなどのアプリケーションを使用して、ボタンのクリックを自動化することもできます。

明示的なMsgBox呼び出しを使用している場合、cscript を使用しても役に立ちません。MsgBoxソリューションとして cscript を使用するには、呼び出しに変更する必要がありWscript.Echoます。

于 2011-09-09T18:58:14.083 に答える
0

すべてのウィンドウを閉じてすべてのプロセスを一度に停止するには、コマンド プロンプト ウィンドウを開いて次のように入力します。

TASKKILL /F /IM cmd.exe /T

また

TASKKILL /F /IM wscript.exe /T

これにより、すべての cmd.exe または wscript.exe プロセスがすぐに終了します...スクリプト内にある必要がある場合は、次のように呼び出すことができますWshShell.Run "TASKKILL /F /IM cmd.exe /T"

これははるかに簡単で効率的です...

于 2013-10-26T03:10:03.447 に答える
0

これは差し迫った問題の解決にはなりませんが、デフォルトのスクリプト ホストを Cscript に変更することをお勧めします。これにより、将来この問題を防ぐことができます。参照:この technet 記事

于 2011-09-09T19:00:04.743 に答える
0
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

ここでこのコードを見つけました

于 2011-09-09T19:20:33.197 に答える