如何在vba中用GetCurrentProcessId获取当前的进程PID?

当我们在excel vba中运行代码时,当前的进程就是excel.exe。

当我们在word中打字时,当前的进程就是word.exe。

api函数GetCurrentProcessId可以快速地获取当前的进程标识(PID),直到进程结束以前,PID都将唯一识别一个进程。

GetCurrentProcessId函数的语法如下:

DWORD WINAPI GetCurrentProcessId(void);

它是不带参数的,它的返回值为当前进程的PID。

以下代码是在excel vba中用GetCurrentProcessId函数获取excel进程的pid,并与根据excel窗户的句柄获得的进程pid进行对比验证是否一致:

Public Declare Function GetCurrentProcessId Lib "kernel32" () As Long
Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwprocessid As Long) As Long
Sub QQ1722187970()
    Dim pid As Long
    '获取当前进程的pid
    pid = GetCurrentProcessId
    Debug.Print pid
    Dim lHwnd As Long
    '获取当前excel程序的窗口句柄
    lHwnd = Excel.Application.hwnd
    'PID为进程ID
    Dim lPID As Long
    'SID为线程ID
    Dim lSID As Long
    '根据窗户句柄获取进程pid
    lSID = GetWindowThreadProcessId(lHwnd, lPID)
    '验证是否一致
    MsgBox pid = lPID
End Sub

根据对比,返回True。

 

       

发表评论