Private Sub Form_Load()
Dim a
a = Shell("calc.exe", 1)
AppActivate a
End Sub
这段代码我在xp下运行没问题,但是在windows7下就提示“无效的过程调用或参数”,怎么回事呢?

解决方案 »

  1.   

    这是AppActivate的详细用法,楼主参考一下:
    AppActivate 语句
          激活一应用程序窗口。语法AppActivate title[, wait]AppActivate 语句的语法具有以下几个命名参数:部分 描述 
    title 必需的。字符串表达式,所要激活的应用程序窗口的标题。可以使用 Shell 函数返回的任务识别码来替换 title,以激活应用程序。 
    wait 可选的。Boolean 值,说明在激活另一个应用程序之前调用的应用程序是否有焦点。如果为 False(缺省),那么,即使调用的应用程序没有焦点,也直接激活指定的应用程序。如果为 True,则调用的应用程序会等到有焦点后,才激活指定的应用程序。 
    说明AppActivate 语句将焦点移动到命名的应用程序或窗口,但并不影响焦点是否最大化或最小化。当用户采取行动改变焦点或将窗口关闭时,就会将焦点从活动的应用程序窗口移动出去。可用 Shell 函数启动一个应用程序并设置窗口样式。在决定激活哪个应用程序时,请将 title 与每一个运行中的应用程序的标题字符串进行比较。如果没有完全匹配,就激活任何这样的应用程序,其标题字符串以 title 开头。如果以 title 命名的应用程序有很多实例,则激活任何一个实例。
      

  2.   

    AppActivate 后面带的参数是 "窗口标题"'让指定的窗口标题获得焦点
    Option Explicit
    Private Sub Command1_Click()
       Call Shell("calc.exe", vbNormalFocus)
       AppActivate "计算器" '让计算器获得焦点
    End Sub
      

  3.   

    一样不行的,我把calc.exe换成notepad.exe倒是可以的,真不知道什么原因
      

  4.   

    是否你的 a 没定义型态 ?
    试看这个, Win7我以前用过,代码中也用到了 AppActivate都很正常
    Option Explicit
    Dim ProcID&
    Private Sub Command1_Click()
       ProcID = Shell("calc.exe", vbNormalFocus)  '打开计算器
    End SubPrivate Sub Command2_Click()
       AppActivate ProcID  '让此进程ID获得焦点
    End Sub
      

  5.   


    定义长整变量值得一试。dim a as long