VBA检查指定应用程序是否已经打开

20 篇文章 2 订阅
13 篇文章 0 订阅

VBA中提供了CreateObjectGetObject两种方法获得对象实例,二者的区别在于GetObject用于获取已经打开的应用程序对象,但是如果该应用程序并没有打开,那么将产生运行时错误,代码中需要加入额外的错误处理代码。

在任务管理器中可以轻松的查看当前已经打开的应用程序,如下图所示。

在这里插入图片描述

使用VBA也可以通过进程名称查找应用程序实例,示例代码如下。

Function blnCheckProcess(strProcess As String) As Boolean
    Dim objWMIService As Object
    Dim strSql As String
    Dim objProcessList As Object
    Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    strSql = Replace("select * from Win32_Process where Name='x' ", "x", strProcess)
    Set objProcessList = objWMIService.ExecQuery(strSql)
    blnCheckProcess = (objProcessList.Count > 0)
    Set objWMIService = Nothing
    Set objProcessList = Nothing
End Function
Sub Demo()
    Dim strProcess As String
    Dim strMsg As String
    strProcess = "winword.exe"
    If blnCheckProcess(strProcess) Then
        strMsg = strProcess & " 已经打开"
        ' 其他处理代码
    Else
        strMsg = strProcess & " 尚未打开"
    End If
    MsgBox strMsg
End Sub

【代码解析】
第5行代码调用GetObject过去WMI对象。
第6行代码创建用于查询Windows进程的sql语句,其中使用Replace替换语句中的进程名称。
第7行调用ExecQuery运行查询语句。
第8行代码将objProcessList.Count > 0设置为函数返回值,即如果objProcessList不为空,返回值为True,否则返回值为False。
第9~10行代码清空对象变量占用的系统资源。
第12~23行代码为演示代码过程。
第15行代码指定应用程序进程名称,不区分大小写,但是名称不一定和大家想象的相同,例如Office中的Word,其进程名称是winword.exe(参见插图1),于Excel相比,前面多了win
第16行代码调用blnCheckProcess查询进程。
第22行代码显示提示信息,如下图所示。

在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值