循环打开Windows应用程序

我需要一些帮助,在一开始看起来像一个非常简单的要求。

我必须find一种在Windows PC上通过打开的应用程序进行循环的方法,其目的是在安装在墙上的大屏幕上一次显示30秒的窗口。 通常会有一个MS Access报告和一些网页。

我最初的想法是,我可以在PC上手动打开这些应用程序,然后运行一个VBScript来遍历它们。 但是,这有两个问题。

  1. 模拟Alt + Tab按键只是切换两个最近使用的应用程序,而不是循环遍历它们
  2. 我无法看到用户能够使用按键逃离脚本。

任何人都可以build议如何使用Windows(XP向上)机器上已有的资源来实现这一点?

Solutions Collecting From Web of "循环打开Windows应用程序"

原来WHS中的VBScript就是要走的路。 这似乎工作。

  '**************************************************************************************** ' Script Name: ApplicationCycler.vbs ' Author: Ian Burns ' Date: 2 Dec 2011 ' Description: VBScript for Windows Scripting Host. Cycles through any applications ' visible in the Task Bar giving them focus for a set period. ' Usage: Save file to Desktop and double click to run. If it isn't already running, ' it will start. If it is already running, it will stop. '***************************************************************************************** Option Explicit Dim wshShell Dim wshSystemEnv Dim strComputer Dim objWMIService Dim colProcessList Dim objProcess Dim intSleep ' Loop lasts 5 seconds intSleep = 5000 Set wshShell = CreateObject("WScript.Shell") ' Volatile environment variables are not saved when user logs off Set wshSystemEnv = wshShell.Environment("VOLATILE") ' Check to see if the script is already running If len(wshSystemEnv("AlreadyRunning")) = 0 Then ' It isn't, so we set an environment variable as a flag to say the script IS running wshSystemEnv("AlreadyRunning") = "True" ' Now we go into a loop, cycling through all the apps on the task bar Do ' Simulate the Alt+Esc keypress wshShell.SendKeys "%+{Esc}" Wscript.Sleep intSleep Loop Else ' It IS already running so kill any or all instances of it strComputer = "." Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colProcessList = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = 'WScript.exe'") For Each objProcess in colProcessList objProcess.Terminate() Next ' Delete the environment variable wshSystemEnv.Remove("AlreadyRunning") ' Tidy up Set wshSystemEnv = Nothing Set wshShell = Nothing Set objWMIService = Nothing Set colProcessList = Nothing End If 

现在已经很晚了,我确实需要一种方法来手动打开和关闭这个优秀的解决方案。 因此,在xp Pro sp3上测试过:

 '**************************************************************************************** ' Script Name: Turn ON Loop thru open apps.vbs ' Author: Ian Burns ' Date: 2 Dec 2011 ' Description: VBScript for Windows Scripting Host. Cycles through any applications ' visible in the Task Bar giving them focus for a set period. ' Usage: Save file to Desktop and double click to run. If it isn't already running, ' it will start. If it is already running, it will stop. '***************************************************************************************** ' http://stackoverflow.com/questions/8356046/cycle-through-open-windows-applications Option Explicit Dim wshShell Dim wshSystemEnv Dim strComputer Dim objWMIService Dim colProcessList Dim objProcess Dim intSleep ' Do Loop lasts 5 seconds intSleep = 5000 Set wshShell = CreateObject("WScript.Shell") ' Volatile environment variables are not saved when user logs off Set wshSystemEnv = wshShell.Environment("VOLATILE") If len(wshSystemEnv("AlreadyRunning")) = 0 Then ' It isn't, so we set an environment variable as a flag to say the script IS running wshSystemEnv("AlreadyRunning") = "True" ' Now we go into a loop, cycling through all the apps on the task bar do ' Simulate the Alt+Esc keypress wshShell.SendKeys "%+{Esc}" Wscript.Sleep intSleep loop ' Tidy up Set wshSystemEnv = Nothing Set wshShell = Nothing Set objWMIService = Nothing Set colProcessList = Nothing End If and: '**************************************************************************************** ' Script Name: Turn OFF Loop thru open apps.vbs ' Author: Dave ' Date: 1 Mar 2012 ' Description: Turns off the above. ' '***************************************************************************************** Option Explicit Dim wshShell Dim wshSystemEnv Dim strComputer Dim objWMIService Dim colProcessList Dim objProcess Dim intSleep Set wshShell = CreateObject("WScript.Shell") ' Volatile environment variables are not saved when user logs off Set wshSystemEnv = wshShell.Environment("VOLATILE") ' It IS already running so kill any or all instances of the above strComputer = "." Set objWMIService = GetObject("winmgmts:" & _ "{impersonationLevel=impersonate}!\\" & _ strComputer & "\root\cimv2") Set colProcessList = objWMIService.ExecQuery _ ("Select * from Win32_Process Where Name = 'WScript.exe'") For Each objProcess in colProcessList objProcess.Terminate() Next ' Delete the environment variable wshSystemEnv.Remove("AlreadyRunning") ' Tidy up Set wshSystemEnv = Nothing Set wshShell = Nothing Set objWMIService = Nothing Set colProcessList = Nothing 

基于伊恩·伯恩斯(Ian Burns)的脚本,这里提供了一个“更清洁”的解决方案(查看我对这个解决方案的评论):

 '**************************************************************************************** ' Script Name: ApplicationCycler.vbs ' Author: Ian Burns ' Date: 2 Dec 2011 ' Edited By: Makaveli84 ' Edit Date: 30 Aug 2014 ' Description: VBScript for Windows Scripting Host. Cycles through any applications ' visible in the Task Bar giving them focus for a set period. ' Usage: Save file to Desktop and double click to run. If it isn't already running, ' it will start. If it is already running, it will stop. '***************************************************************************************** Option Explicit Dim wshShell Dim wshSystemEnv Dim intCycle Dim intSleep Dim intTimer ' Cycle every 5 seconds / Check on/off status every 250 milliseconds intCycle = 5000: intSleep = 250: intTimer = intCycle Set wshShell = CreateObject("WScript.Shell") ' Volatile environment variables are not saved when user logs off Set wshSystemEnv = wshShell.Environment("VOLATILE") ' Check to see if the script is already running If len(wshSystemEnv("AlreadyRunning")) = 0 Then ' It isn't, so we set an environment variable as a flag to say the script IS running wshSystemEnv("AlreadyRunning") = "True" ' Now we go into a loop, cycling through all the apps on the task bar Do While len(wshSystemEnv("AlreadyRunning")) > 0 ' Simulate the Alt+Esc keypress If intTimer >= intCycle Then wshShell.SendKeys "%+{Esc}" intTimer = 0 End If intTimer = intTimer + intSleep Wscript.Sleep intSleep Loop Else ' Delete the environment variable wshSystemEnv.Remove("AlreadyRunning") End If ' Tidy up Set wshSystemEnv = Nothing Set wshShell = Nothing