Vba QueryFullProcessImageName不工作,返回0

Vba QueryFullProcessImageName不工作,返回0,vba,vb6,Vba,Vb6,QueryFullProcessImageName始终返回0,无法检索进程路径,代码如下,需要您的帮助,谢谢 如果使用该函数,您将能够获得有关它返回0的原因的更多信息。代码中有几个问题 首先,sChar从未初始化 此外,要传递的第一个参数是“In”参数,因此应该通过val传递。这可能是无效句柄错误6的原因 此线程提供了一些有用的信息,说明在调用QueryFullProcessImageName:时如何恢复长度 最后,根据“具有进程查询信息访问权限的句柄将自动被授予进程查询有限的信息”,因此删除

QueryFullProcessImageName始终返回0,无法检索进程路径,代码如下,需要您的帮助,谢谢


如果使用该函数,您将能够获得有关它返回0的原因的更多信息。

代码中有几个问题

首先,sChar从未初始化

此外,要传递的第一个参数是“In”参数,因此应该通过val传递。这可能是无效句柄错误6的原因

此线程提供了一些有用的信息,说明在调用QueryFullProcessImageName:时如何恢复长度

最后,根据“具有进程查询信息访问权限的句柄将自动被授予进程查询有限的信息”,因此删除不需要的访问权限

有了这些信息,请尝试以下内容(未经测试):


代码无法在我的win7(64位)32位excel中检索路径信息,我没有办法继续,我希望它能在我的excel vba中工作,谢谢你的帮助。hProcess=OpenProcess(PROCESS\u QUERY\u INFORMATION或PROCESS\u VM\u READ,0,lProcessID),也不是workGetProcessImageFileName(hProcess,sBuf,MAX\u path),也不工作,返回0,请您的helpRet=GetProcessImageFileName(HPProcess,sBuf,MAX_PATH)LastError=GetLastError()LastError返回0。你能帮我吗?嗨,Err.LastdLerror是6岁,你知道怎么更正这个代码吗?谢谢,在VB6中,您必须使用Err.LastDllError,而不是GetLastError函数。错误6表示“句柄无效”--请参阅。

Public Declare Function QueryFullProcessImageName Lib "Kernel32.dll" Alias "QueryFullProcessImageNameA" (hProcess As Long, ByVal dwFlags As Long, ByVal lpExeName As String, lpdwSize As Long) As Long

Private Function GetProcessImageName(ByVal lProcessID As Long) As String
Dim hProcess As Long
Dim sBuf As String
Dim sChar As Long

hProcess = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION Or PROCESS_QUERY_INFORMATION, 0, lProcessID)
If hProcess Then
sBuf = String$(MAX_PATH, Chr$(0))
QueryFullProcessImageName hProcess, 0, sBuf, MAX_PATH
sBuf = Left$(sBuf, sChar)
 End If
GetProcessImageName = sBuf
CloseHandle hProcess
End Function
Public Declare Function QueryFullProcessImageName Lib "Kernel32.dll" Alias "QueryFullProcessImageNameA" _
    (ByVal hProcess As Long, ByVal dwFlags As Long, ByVal lpExeName As String, ByRef lpdwSize As Long) As Long

Private Function GetProcessImageName(ByVal lProcessID As Long) As String
    Dim hProcess As Long
    Dim sBuf As String
    Dim sChar As Long

    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, 0, lProcessID)
    If hProcess Then
        sBuf = String$(MAX_PATH, Chr$(0))
        sChar = MAX_PATH
        QueryFullProcessImageName hProcess, 0, sBuf, sChar
        sBuf = Left$(sBuf, sChar)
    End If
    GetProcessImageName = sBuf
    CloseHandle hProcess
End Function