首页 > 编程语言 >检查指定应用程序是否正在运行的 VBA 宏

检查指定应用程序是否正在运行的 VBA 宏

时间:2024-06-12 14:32:24浏览次数:18  
标签:Function VBA Private 指定 Long Print 应用程序 Debug hSnapshot

' Declare the necessary Windows API functions
Private Declare PtrSafe Function CreateToolhelp32Snapshot Lib "kernel32" ( _
    ByVal dwFlags As Long, _
    ByVal th32ProcessID As Long) As Long

Private Declare PtrSafe Function Process32First Lib "kernel32" ( _
    ByVal hSnapshot As Long, _
    ByRef lppe As PROCESSENTRY32) As Long

Private Declare PtrSafe Function Process32Next Lib "kernel32" ( _
    ByVal hSnapshot As Long, _
    ByRef lppe As PROCESSENTRY32) As Long

Private Declare PtrSafe Function CloseHandle Lib "kernel32" ( _
    ByVal hObject As Long) As Long

Private Const TH32CS_SNAPPROCESS As Long = 2
Private Const MAX_PATH As Long = 260

Private Type PROCESSENTRY32
    dwSize As Long
    cntUsage As Long
    th32ProcessID As Long
    th32DefaultHeapID As Long
    th32ModuleID As Long
    cntThreads As Long
    th32ParentProcessID As Long
    pcPriClassBase As Long
    dwFlags As Long
    szExeFile As String * MAX_PATH
End Type

' Function to check if APP is running
Function IsAPPRunning(exefilename As String) As Boolean
    Dim hSnapshot As Long
    Dim pe32 As PROCESSENTRY32
    
    ' Take a snapshot of all processes in the system
    On Error GoTo ErrorHandler
    hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
    
    If hSnapshot <> -1 Then
        Debug.Print "Snapshot taken successfully."
        
        ' Set the size of the PROCESSENTRY32 structure
        pe32.dwSize = LenB(pe32)
        
        ' Get the first process information
        If Process32First(hSnapshot, pe32) <> 0 Then
            Debug.Print "First process retrieved successfully."
            Do
                ' Extract the executable file name from the PROCESSENTRY32 structure
                If InStr(1, pe32.szExeFile, exefilename, vbTextCompare) > 0 Then
                    IsAPPRunning = True
                    Debug.Print exefilename + " found."
                    CloseHandle hSnapshot
                    Exit Function
                End If
            Loop While Process32Next(hSnapshot, pe32) <> 0
        Else
            Debug.Print "Failed to retrieve the first process."
        End If
        
        ' Close the handle to the snapshot
        CloseHandle (hSnapshot)
    Else
        Debug.Print "Failed to take snapshot."
    End If
    
    IsAPPRunning = False
    Debug.Print exefilename + " not found."
    Exit Function
    
ErrorHandler:
    Debug.Print "Error: " & Err.Description
    IsAPPRunning = False
End Function

  代码中的 IsAPPRunning 函数使用了之前提到过的 Windows API 函数,它会遍历系统中的所有进程并检查每个进程的可执行文件名是否与指定的应用程序文件名匹配。如果找到了匹配的进程,则返回 True,否则返回 False

请注意,在运行代码之前,你需要确保已经添加了对 "kernel32" 库的引用。你可以通过以下步骤来完成:

  1. 打开 Visual Basic 编辑器(在 Excel 中按下 Alt+F11)。
  2. 在 "工具" 菜单中选择 "引用"。
  3. 在 "引用" 对话框中找到并选中 "Microsoft Windows Common Controls 6.0"。
  4. 单击 "确定" 按钮保存更改。

标签:Function,VBA,Private,指定,Long,Print,应用程序,Debug,hSnapshot
From: https://www.cnblogs.com/wangchaoguo-li/p/18243896

相关文章

  • 在两个 Ionic 应用程序之间发送和接收广播接收器
    我有三个Ionic5应用。如果我打开第一个应用程序,而另外两个应用程序中的任何一个正在后台运行,那么我需要发送一些数据,但前提是第二个应用程序必须在后台运行。我目前正在尝试使用CordovaBroadcaster插件(https://github.com/bsorrentino/cordova-broadcaster......
  • 如果使用逻辑应用程序删除了源文件,则从目的地删除文件
    我正在将文件夹和文件从Sharepoint复制到AzureBlob。我正在使用以下工作流程<创建blob操作将复制所有文件夹和文件。问题是当从Sharepoint(源)中删除少量文件时,azureblob中也应删除这些文件。在当前情况下,使用创建操作无法做到这一点。应该采取什么方法?......
  • 请编写一个函数void fun(char a[],char b[],int n),其功能是:删除以各字符串中指定下标
    请编写一个函数voidfun(chara[],charb[],intn),其功能是:删除以各字符串中指定下标的字符。其中,a指向原字符串,删除后的字符串存放在b所指的数组中,n中存放指定的下标。#include<stdio.h>voidfun(chara[],charb[],intn){inti,j=0;for(i=0;a[i]......
  • C#实现应用程序多屏显示(附完整源码)
    C#实现应用程序多屏显示下面是一个简单的C#示例程序,演示如何在多个屏幕上显示窗口。这个示例将创建两个窗体,并将它们分别显示在两个不同的屏幕上。如果你的系统上有多个屏幕,这个程序将会有效。确保你在一个WindowsForms应用程序中使用以下代码。首先,创建一个新的W......
  • wimlib API 提供了一系列用于处理 Windows 映像文件(.wim 文件)的函数和数据结构,使开发
    wimlibAPI提供了一系列用于处理Windows映像文件(.wim文件)的函数和数据结构,使开发人员能够在其应用程序中集成对WIM文件的创建、修改和提取功能。以下是一些常见的wimlibAPI:WIM文件的创建和初始化:wimlib_create_new_wim():创建一个新的WIM文件。wimlib_open_wim():......
  • AWS无服务器 应用程序开发—第一章 目录
    越来越多的用户正在考虑采用无服务器架构进行云原生应用程序开发。通过引入无服务器架构,您将摆脱以前需要的服务器、操作系统和中间件的管理,并且能够显着降低成本。基于我们在应用程序开发和AWS构建方面的丰富知识,提供广泛的服务,开始介绍架构选择、设计、开发和维护。作......
  • 构建LangChain应用程序的示例代码:27、FLARE:前瞻性主动检索增强生成技术实现与应用的示
    FLARE:前瞻性主动检索增强生成这个示例是前瞻性主动检索增强生成(FLARE)的实现。请查看原始仓库。基本思想是:开始回答问题如果开始生成模型不确定的标记,查找相关文档使用这些文档继续生成重复直到完成在查找相关文档的方式上有很多有趣的细节。基本上,模型不确定的标记会......
  • 使用使用rundll32 调用指定dll的方法
    使用使用rundll32调用指定dll的方法//顾名思义,"执行32位的DLL文件"。它的作用是执行DLL文件中的内部函数,这样在进程当中,只会有Rundll32.exe,而不会有DLL后门的进程,这样,就实现了进程上的隐藏。介绍一下Rundll32.exe这个文件,功能就是以命令行的方式调用动态链接程序库。系统中......
  • petalinux 交叉编译指定内核驱动
    需要编译u-dma-buf驱动。ThisrepositorycontainsaMakefie.MakefilehasthefollowingParameters:ParameterNameDescriptionDefaultValueARCHArchitectureName$(shelluname-m|sed-es/arm.*/arm/-es/aarch64.*/arm64/)KERNEL_SRCKernelSourc......
  • 手机照片怎么恢复?10个照片恢复应用程序
      如今,安卓智能手机为您提供了一系列出色的摄像头。其中一些有四个摄像头,而另一些有两个。现在,智能手机摄像头的强大功能足以与单反相机竞争,这促使我们拍摄越来越多的照片。捕捉图片可能是一项简单的任务,但管理图片却不是。10个照片恢复应用程序在这篇文章中,我们将分享一......