Цикл по открытым приложениям Windows - PullRequest
2 голосов
/ 02 декабря 2011

Мне нужна помощь в том, что делать с чем-то, что поначалу казалось очень простым требованием.

Мне нужно найти способ циклического обхода открытых приложений на ПК с Windows с целью:отображение окон, скажем, 30 секунд за один раз на большом экране, установленном на стене.Обычно это отчет MS Access и пара веб-страниц.

Сначала я думал, что я могу вручную открыть эти приложения на ПК, а затем запустить VBScript для их циклического просмотра.Однако с этим было две проблемы.

  1. Имитация нажатия клавиши Alt + Tab просто переключает два последних использованных приложения вместо циклического перебора всех их, и
  2. Я не вижу возможности, чтобы пользователь мог видетьчтобы выйти из сценария нажатием клавиши.

Кто-нибудь может подсказать, как мне этого добиться, используя ресурсы, уже доступные на компьютере с Windows (XP и выше)?

Ответы [ 3 ]

5 голосов
/ 03 декабря 2011

Оказалось, VBScript в WHS был путь. Это похоже на работу.

    '****************************************************************************************
' 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
3 голосов
/ 30 августа 2014

Для чего это стоит, вот «более чистое» решение (см. Мой комментарий к предлагаемому решению) на основе сценария Яна Бернса:

'****************************************************************************************
' 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
1 голос
/ 01 марта 2012

Уже поздно, и мне нужен был способ включить и выключить это отличное решение вручную. Поэтому проверено на 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.
'*****************************************************************************************

' /6478879/tsikl-po-otkrytym-prilozheniyam-windows

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...