のループではないウィンドウを閉じます。私たちがストレステストをしていて、これらのメッセージを無効にすることはできないので、今は多くの問題を引き起こしています。だから、誰かが絶えずプロセスに注目しなければなりません。私は、AppActivate
とSendKeys
の機能を使用して、ポップアップメッセージをチェックして自動的に閉じるVBScriptを考え出しました。:AppActivateのは、私はそれがエラーが発生した場合、それがポップアップしますメッセージウィンドウと一時停止をユーザーが閉じる押されるまで、多くの場合、積極的に監視されずに実行する必要のあるアプリケーションを持っていますが、
問題は、私は、これは、ユーザーが簡単に始めることができるように/ GUI内で動作ボタンをクリックするだけで実行されているからコードを停止する必要があります。したがって、私は現在、VBScriptを単一のボタンでHTAアプリケーションにラップしていますが、何らかの理由でメッセージの最初のインスタンスを閉じることはありません(複数を同時にロードすることができます)。ボタン付き
Sub Testing
Set objShell = CreateObject("WScript.Shell")
counter = 1
Do While counter < 50
ret = objShell.AppActivate("Test Failure")
counter = counter + 1
If ret = True Then
objShell.SendKeys "~"
End If
Loop
End Sub
次のように:
私はそれだけで絶えず、バックグラウンドで実行「テストの失敗」ウィンドウが選択されている場合にのみ存在/SendKeys
を実行してできるようにする必要があり
<input type="button" value="Run Script" name="run_button" onClick="Testing"><p>
を2番目のボタンを押すとループを停止します。
私は明らかに間違って何かを取得しています(VBScriptのは、それをしない、上から下へ実行しますか?)と私は本当に前に、これらの機能をいじったことがありません、すべてが正しくセットアップされているようです。
@Ansgar Wiechersには、問題の根本的な原因を解決したように正しい答えが付けられました。私が結んだ最後のコードは2つの部分に分かれていました。アプリケーション:
<!doctype html>
<head>
<hta:application
id="AutoCloseFailures"
applicationname="AutoCloseFailures"
icon=""
singleinstance="yes"
border="thick"
borderstyle="complex"
scroll="no"
maximizebutton="no"
version="0.1" />
<title>Auto-Close Failure Messages</title>
<meta http-equiv="x-ua-compatible" content="ie=8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<script language="VBScript">
' Set Global Variables for Subroutines
script = "#FOLDERPATH#\AutoCloseDEFXErrorsTimer.vbs"
Set sh = CreateObject("WScript.Shell")
Set cmdTest = Nothing
strVar = "testing2"
Sub StartLoop
' Initiate VB Loop to Target Failure Windows & Close Them
If cmdTest Is Nothing Then
Set cmdTest = sh.Exec("wscript.exe """ & script & """")
strVar = "testing"
End If
document.all.start.style.background="#777d84"
document.all.start.style.color="#bfc4c9"
End Sub
Sub StopLoop
' Terminate VB Loop Process & Reset Application
strScriptToKill = "AutoCloseDEFXErrorsTimer.vbs"
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colProcess = objWMIService.ExecQuery (_
"Select * from Win32_Process " & _
"WHERE (Name = 'cscript.exe' OR Name = 'wscript.exe') " & _
"AND Commandline LIKE '%"& strScriptToKill &"%'" _
)
For Each objProcess in colProcess
objProcess.Terminate()
Next
Set cmdTest = Nothing
document.all.start.style.background="#587286"
document.all.start.style.color="#ffffff"
End Sub
Sub Window_onLoad
' Force Window Size
window.resizeTo 400,190
window.moveTo 1530, 0
End Sub
</script>
<style>
body {
margin: 0;
padding: 0;
font-family: "Segoe UI", Geneva, sans-serif;
background: #dae3f2;
}
h1 {
font-size: 15pt;
text-align: center;
margin-bottom: 0;
color: #273754;
}
button {
padding:16px 32px;
font-family:helvetica;
font-size:16px;
font-weight:100;
color:#fff;
background: #587286;
border:0;
}
button:hover {
background: #3B5C76;
}
.container {
width: 100%;
text-align: center;
}
</style>
<BODY>
<h1>Auto-Close Failure Messages</h1>
<br>
<div class="container">
<button id="start" onclick="StartLoop">Start</button>
<span> </span>
<button id="stop" onclick="StopLoop">Stop</button>
</div>
<br>
</BODY>
</HTML>
とサポートのVBScriptファイル:
Set sh = CreateObject("WScript.Shell")
While True
active = sh.AppActivate("#WINDOW TITLE#")
If active Then
sh.SendKeys "~"
End If
WScript.Sleep 100
Wend
ありがとうございました!私はそれがおそらく事実であると考えていましたが、ウィンドウの2つのインスタンスを開き、より大きなカウント値を持つことでテストしましたが、それでもまだ動作していませんでした。 私はあなたの提案を試してみました。私の唯一の問題は、スクリプトを「停止」するときに、「Invalid Window handle」と表示し、この行を指すエラーメッセージ「cmd.Terminate」が表示されることです。助言がありますか?私はそれを試してみると、遊び続けて更新されます。 – GnorthernGnome
@GnorthernGnome外部スクリプトを終了した後に 'cmd'を' Nothing'に設定する必要があります。更新された回答をご覧ください。それでも問題が解決しない場合は、質問を編集して修正コードを表示してください。 –
遅延のためのお詫び、突然プロジェクトがしばらくの間退屈になった。それが価値あるものであれば、 'cmd'を 'Nothing'に設定しても機能しませんでしたが、解決策を見つけることができました。私は元の投稿を興味のある人の最終的なコードで更新しました。ご協力いただきありがとうございます。 – GnorthernGnome