在激活app之前等待进程结束

时间:2015-07-30 12:38:38

标签: shell vbscript

有点背景:

我正在尝试创建一个脚本,根据一天中的时间将特定用户签名到程序中。每次错误的人在不正确的时间登记时,都有可能使公司花费20,000美元的许可证违规费用。

我尝试了一些东西,最简单的是一个电子表格,它使用简单的if语句来确定登录凭据并在shell中打开程序。在预定的等待时间之后,它将输入凭证。由于系统的速度不同,这是有问题的。

我以为我会去VBScript。可能与VBA有多大不同我认为......好几天之后,我迷失了。

这是我的剧本:

select t3.user_name, t3.date, t2.checkin, t3.checkout, t1.day 
from 3rd_table  as t3
inner join 2nd_table as t2 on t2.date = t3.date and t2.user_name = t3.user_name
inner join 1st_table as t1 on t1.date = t3.date;

不可否认,我不知道这是多少,因为我将其从其他脚本中解脱出来。例如,我不确定WMI是什么以及它在此脚本中的作用。此脚本返回的错误消息是编译错误。它调出第60行第1个字符,即我的函数的开头。

对此有任何帮助将非常感激!

1 个答案:

答案 0 :(得分:1)

  1. 您的WaitForProcess()功能嵌套在QADHelper子内。 VBScript不允许嵌套子例程。
  2. 仅仅因为您的WaitForProcess()函数发现EXE正在运行并不意味着它的窗口显示并且它已准备好接受输入。您可能希望在超时循环中使用AppActivate以确保SendKeys命令到达目标窗口。
  3. 您正在创建一个名为WSHShell的shell对象,您将其用于Run,但您还需要将其用于AppActivate来电和所有SendKeys 1}}语句。您正在使用Shell,这是您的脚本未声明的。
  4. SendKeys需要一个字符串参数。像ENTERTAB这样的键需要括在字符串中的大括号中:

    WSHShell.SendKeys "{TAB}"
    WSHShell.SendKeys "{ENTER}"
    
  5. 您需要使用ElseIf代替Else IfElseIf被视为原始If的条款。 Else If创建了一个嵌套If,期望End If