Немного задней землю:В ожидании процесса до конца, прежде чем активировать App
Я пытаюсь создать сценарий, который будет подписывать конкретный пользователь в программу в зависимости от времени суток. Каждый раз, когда неправильный человек подписывается в неправильные часы, у него есть потенциал, чтобы стоить компании 20 000 долларов в случае расходов на нарушение лицензии.
Я пробовал несколько вещей, самым простым из которых была электронная таблица, в которой использовались простые операторы if для определения регистрационных данных и открытия программы в оболочке. После заданного времени ожидания он будет вводить учетные данные. Это было проблематично из-за различных скоростей систем.
Я думал, что поеду в VBScript. Насколько это было иначе, чем VBA, я думал ... Ну, через пару дней я потерял.
Вот мой сценарий:
Sub QADHelper()
'Logs the correct user into QAD depending on the time of day
HourNow = Time
Dim Shell, WMI, PID
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set WMI = GetObject("winmgmts:!\\root\cimv2")
'Note: Literal quotes are used because of the space between "program" and "files"
WSHShell.Run """C:\Program Files\QAD\QAD Enterprise Applications 2007.1\QAD.Applications.exe"""
PID = WaitforProcess("QAD.Applications.exe", 5)
If PID >0 Then
Shell.AppActivate PID
Else
WScript.Echo "Could not reach QAD"
WScript.Quit 1
End If
'This is where the QAD log in credentials are stored
If HourNow >= "06:15:00" Then
WSHShell.SendKeys "username1"
WSHShell.SendKeys "{TAB}"
WSHShell.SendKeys "password1"
WSHShell.SendKeys "{ENTER}"
ElseIf HourNow >= "14:15:01" Then
WSHShell.SendKeys "username2"
WSHShell.SendKeys "{TAB}"
WSHShell.SendKeys "password2"
WSHShell.SendKeys "{ENTER}"
ElseIf HourNow >= "22:15:01" Then
WSHShell.SendKeys "username3"
WSHShell.SendKeys "{TAB}"
WSHShell.SendKeys "password3"
WSHShell.SendKeys "{ENTER}"
Else
WScript.Echo "This isn't working properly"
WScript.Quit 1
End If
End Sub
Function WaitForProcess(imageName, tries)
Dim wql, process
wql = "SELECT ProcessId FROM Win32_Process WHERE Name = '" & imageName & "'"
WaitForProcess = 0
While tries > 0 And WaitForProcess = 0
For Each process In WMI.ExecQuery(wql)
WaitForProcess = process.ProcessId
Next
If WaitForProcess = 0 Then
WScript.Sleep 1000
tries = tries - 1
End If
Wend
End Function
Правда, я не знаю, что многое из этого я передразнивал его из других сценариев. Например, я не уверен, что такое WMI и какова его роль в этом скрипте. Сообщение об ошибке, которое этот скрипт возвращает, является ошибкой компиляции. Он вызывает строку 60 символ 1, начало моей функции.
Любая помощь с этим была бы чрезвычайно оценена!
Я забыл упомянуть, что это сценарий запуска. Причина, по которой в любой момент не отключена программа оболочки, заключается в том, что у меня есть пакетный файл, который закрывает все программы в определенное время и перезагружает компьютер. Процедура запуска перезапускает этот сценарий. – DtheHut