我想做一个程序向其它的某个应用程序SendkeysPrivate Sub Command3_Click()    Dim ReturnValue, I
    ReturnValue = Shell("C:\Program Files\Internet explorer\IEXPLORE.EXE", 1)       AppActivate ReturnValue    SendKeys "{F6}", TrueEnd Sub请问AppActivate ReturnValue这句为什么老是出错——“无效的过程或参数”报错后,如果我选择调试,然后继续按F5执行,程序也可以执行。否则非要我On Error Resume Next不可。而且只有shell IE的时候会出错,shell QQ啊,计算器啊之类的程序都不会出现错误。另外AppActivate有一个wait参数,ture,false我都用过了,MSDN上关于wait参数的解释非常拗口——
“wait 可选的。Boolean 值,说明在激活另一个应用程序之前调用的应用程序是否有焦点。如果为 False(缺省),那么,即使调用的应用程序没有焦点,也直接激活指定的应用程序。如果为 True,则调用的应用程序会等到有焦点后,才激活指定的应用程序。 ”哪位达人能给我解释一下上面这段话的意思。此外,Sendkeys也有个wait参数——
“Wait 可选的。指定等待方式的 [email protected] 值。如果为 False(缺省值),则控件在按键发送出去之后立刻返回到过程。如果为 True,则按键消息必须在控件返回到过程之前加以处理。 ”同样让人摸不着头脑。希望高人指点。嫌分少可以另外加。

解决方案 »

  1.   

    尤其是第二个wait,狂困惑。第一个wait现在明白了一点了。
      

  2.   

    Option ExplicitPrivate Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)Private Sub Command1_Click()
        Dim ReturnValue, I
        ReturnValue = Shell("C:\Program Files\Internet explorer\IEXPLORE.EXE", vbNormalFocus)
    Sleep 2000 '延时两秒钟
        AppActivate ReturnValue    SendKeys "{F6}", True
    End Subshell函数是异步执行的,也就是调用的程序没有启动完成,就会继续执行SHELL函数之后的语句,当程序没有启动完的时候,你用 AppActivate ReturnValue 激活,肯定会出错的.而你再按F5执行的时候,IE已经启动完成,当然可以继续执行了~~
      

  3.   

    加一个SLEPP延时函数,意思是延时两秒,等IE启动完之后,再用 AppActivate ReturnValue 激活,就不会出错了,根据机器执行的速度,可以调整延时的多少,以确保IE完全启动.
      

  4.   

    谢谢cuizm(射天狼) ,你的解释让我茅塞顿开。
    我也用过sleep的,但是我只延时了1秒,还是不行。现在按你讲的延时3秒以上就可以了。看来是我的机器太屎了。呵呵。另外QQ启动也很慢,不知为何不会出现这种情况。看来IE是够烂的
      

  5.   

    Sendkeys也有个wait参数——
    “Wait 可选的。指定等待方式的 [email protected] 值。如果为 False(缺省值),则控件在按键发送出去之后立刻返回到过程。如果为 True,则按键消息必须在控件返回到过程之前加以处理。 ”另外,请您帮我后面的这个问题也解决一下得了,分数全给你了
      

  6.   

    这个你解释的很清楚了,用TRUE的话,就是等SENDKEYS执行完之后才执行后面的程序,否则立即返回~~
      

  7.   

    如果为  True,则按键消息必须在控件返回到过程之前加以处理。我不理解啊,不过你说了之后有些明白了。我再做做实验吧。非常非常感谢你。再问最后一个问题——阁下的QQ是多少啊?可以留言给我。