5

過去に、以下のスクリプトを使用して、「リモート デスクトップ」というタイトルのアクティブ ウィンドウがアクティブかどうかを検出しました。アクティブでない場合、スクリプトは自動的に起動するか、再びアクティブにします。

質問: ウィンドウがアクティブかどうかを検出して自動的に閉じる方法はありますか? 私たちのオフィスの Windows 7 マシンで、chrome キオスク モードでキオスクをセットアップしています。メイン ページでは、選択した Google フォームがポップアップ ウィンドウで起動されます。フォーム確認ページのタイトルは「Thank You!」です。タイトルバーに。スクリプトがこのウィンドウを自動検出して閉じる方法はありますか? ユーザーは応答が送信されたことを (1 ~ 2 秒間) 確認できますが、ウィンドウを閉じないと、次のユーザーがキオスクを使用するときにまだ開いていないため、これは便利です。

別のオプションは、フォームで Google スクリプトを使用して送信ボタンをプログラムしてウィンドウを閉じる方法がある場合です。それが可能かどうかはわかりません。

Option Explicit
'On Error Resume Next

Dim objShell

Set objShell = CreateObject("WScript.Shell")

Do 
If (objShell.AppActivate("Window Title Here") = False) Then
objShell.Run "mstsc.exe " & chr(34) & "c:\scripts\Remote Desktop.rdp" & chr(34)
WScript.Sleep 5000
Else
WScript.Sleep 3000
End If
Loop

閉じる必要があるウィンドウがアクティブで、次のスクリプトを実行すると、ウィンドウが閉じます。必要なものを実現するには、ここで上部と下部のコードをつなぎ合わせる必要があるようですが、どうすればよいかわかりません。薄暗いシェル

Set oShell = CreateObject("WScript.Shell") 
If oShell.AppActivate("Untitled - Notepad") Then
   WScript.Sleep 500
   oShell.SendKeys "%{F4}"
End If

起動時に実行され、特定のタイトルのウィンドウが開くのを待ってから、検出されたら閉じるスクリプトを見つけようとしています。検出されたウィンドウが開いたままになる時間を制御できればさらに良いのですが、ウィンドウを閉じるだけで十分です。

良い解決策を見つけたと思います。この投稿を見つけて、回答を修正しました。誰もこれに問題があると思いますか?

' Will loop forever checking for the message every half a second  
' When it finds the message it will close the window 

Set wshShell = CreateObject("WScript.Shell") 

Do 
    ret = wshShell.AppActivate("Untitled - Notepad") 
    If ret = True Then 
        wshShell.SendKeys "%{F4}" 'ALT F4
    End If 
    WScript.Sleep 500 
Loop 
4

1 に答える 1

8
Set wshShell = CreateObject("WScript.Shell") 

Do 
ret = wshShell.AppActivate("Untitled - Notepad") 
If ret = True Then 
    wshShell.SendKeys "%{F4}" 'ALT F4
End If 
WScript.Sleep 500 
Loop

私が目にする唯一の問題は、Alt+F4がウィンドウ自体をシャットダウンするまで、ウィンドウを順番に閉じてしまうことです。このスクリプトはあなたが付けた名前しか検出しませんが、ちょっと緊張します。

スクリプトを試したところ問題なく動作しましたが、特定のウィンドウでエスケープ キーを使用するのはどうでしょうか。

私が気に入らないもう1つのことは、これが常に実行され、リソースを消費していることです。ループの速度を落としたので、ほとんどの場合、少なくともバックグラウンドで一時停止します..

于 2014-05-04T23:59:03.843 に答える