找回密码
 加入
搜索
查看: 2883|回复: 9

[网络通信] 通过进程名获取进程路径[已解决]

[复制链接]
发表于 2020-7-16 14:16:16 | 显示全部楼层 |阅读模式
本帖最后由 依旧漂泊 于 2020-7-19 01:13 编辑

https://www.autoitx.com/forum.ph ... 8%B3%CC%C2%B7%BE%B6
这里引用afan版主给出的代码,但是这里有一个问题,在64位系统编译成64位版本可以正常获取32位与64位进程的路径,
但是编译成32位版本,只能获取32位进程的路径,64位进程的路径获取不到。
因为我必须编译成32位版本。所以能不能编译成32位版本获取32位与64位进程的路径
解决方法:请参照afan版主,以我的功力写不出来,我还是直接编译成64位版本.
$PID = ProcessExists("explorer.exe")
MsgBox(0, "", _WinAPI_GetModuleFileNameEx($PID))


Func _WinAPI_CloseHandle($hObject)
        Local $aResult = DllCall("kernel32.dll", "bool", "CloseHandle", "handle", $hObject)
        If @error Then Return SetError(@error, @extended, False)
        Return $aResult[0]
EndFunc   ;==>_WinAPI_CloseHandle
Func _WinAPI_GetCurrentProcessID()
        Local $aResult = DllCall("kernel32.dll", "dword", "GetCurrentProcessId")
        If @error Then Return SetError(@error, @extended, 0)
        Return $aResult[0]
EndFunc   ;==>_WinAPI_GetCurrentProcessID
Func _WinAPI_GetModuleFileNameEx($PID = 0)
        If Not $PID Then
                $PID = _WinAPI_GetCurrentProcessID()
                If Not $PID Then
                        Return SetError(1, 0, 0)
                EndIf
        EndIf
        Local $hProcess = DllCall('kernel32.dll', 'ptr', 'OpenProcess', 'dword', 0x00000410, 'int', 0, 'dword', $PID)
        If (@error) Or (Not $hProcess[0]) Then
                Return SetError(1, 0, '')
        EndIf
        Local $tPath = DllStructCreate('wchar[1024]')
        Local $Ret = DllCall('psapi.dll', 'int', 'GetModuleFileNameExW', 'ptr', $hProcess[0], 'ptr', 0, 'ptr', DllStructGetPtr($tPath), 'int', 1024)
        If (@error) Or (Not $Ret[0]) Then
                $Ret = 0
        EndIf
        _WinAPI_CloseHandle($hProcess[0])
        If Not IsArray($Ret) Then
                Return SetError(1, 0, '')
        EndIf
        Return DllStructGetData($tPath, 1)
EndFunc   ;==>_WinAPI_GetModuleFileNameEx





发表于 2020-7-19 09:38:10 | 显示全部楼层

论坛的 BUG:
winmgmts:\  应为 winmgmts:\\
发表于 2020-7-17 13:54:26 | 显示全部楼层
依旧漂泊 发表于 2020-7-16 20:30
向上兼容?是什么意思?
编译一份64位的FileInstall进32位,相对比较麻烦。我的意思是编译成32位版本可 ...

32位程序获取64位程序进程信息,相当于向上兼容了
GetModuleFileNameEx 是不支持的,除非你打个64的包试试~

或者调用其他兼容的 api,比如 QueryFullProcessImageName 或者 GetProcessImageFileName 等

评分

参与人数 1金钱 +99 收起 理由
haijie1223 + 99 涨知识了,原来还有这样一个api

查看全部评分

发表于 2020-7-17 08:36:56 | 显示全部楼层
这个应该可以
Dim $name="ctfmon.exe"
__wmi_Win32_Process()
Func __wmi_Win32_Process()
        Local $wbemFlagReturnImmediately = 0x10
        Local $wbemFlagForwardOnly = 0x20
        Local $colItems = ""
        Local $strComputer = "localhost"
        Local $Output=""
        Local $objWMIService = ObjGet("winmgmts:\" & $strComputer & "\root\CIMV2")
        $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Process where Name='"&$name&"'", "WQL", _
                                          $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
        If IsObj($colItems) then
           For $objItem In $colItems
              $Output &= "ExecutablePath: " & $objItem.ExecutablePath & @CRLF
              $Output &= "Name: " & $objItem.Name & @CRLF
         Next
         Msgbox(0,"WMI 输出",$Output )
        Else
           Msgbox(0,"WMI 输出","没有在类 " & "Win32_Process" & "中找到WMI对象" )
        Endif
EndFunc
发表于 2020-7-16 15:59:26 | 显示全部楼层
试一试,首行加上:
#PRE_Compile_Both=y
看看行不行
 楼主| 发表于 2020-7-16 16:30:26 | 显示全部楼层
floor6ggg 发表于 2020-7-16 15:59
试一试,首行加上:

看看行不行


现在,这么说吧,64位系统用X64版本能正常获取 explorer.exe 进程的路径,
用X86版本获取不到 explorer.exe 进程的路径

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2020-7-16 19:38:16 | 显示全部楼层
你这是想向上兼容?。。。
编译一份64位的FileInstall进32位~
 楼主| 发表于 2020-7-16 20:30:39 | 显示全部楼层
本帖最后由 依旧漂泊 于 2020-7-16 20:32 编辑
afan 发表于 2020-7-16 19:38
你这是想向上兼容?。。。
编译一份64位的FileInstall进32位~

向上兼容?是什么意思?
编译一份64位的FileInstall进32位,相对比较麻烦。我的意思是编译成32位版本可以获取32位进程路径,无法获取64位进程路径的问题
反之编译成64位版本可以获取32位与64位进程路。

 楼主| 发表于 2020-7-18 03:41:09 | 显示全部楼层
afan 发表于 2020-7-17 13:54
32位程序获取64位程序进程信息,相当于向上兼容了
GetModuleFileNameEx 是不支持的,除非你打个64的包试 ...

谢谢,请问下这两个函数在哪里查,帮忙文档没有看到。
发表于 2020-7-18 10:25:04 | 显示全部楼层
帮助文档没有,可以查阅以下,调用方式都是大同小异
https://docs.microsoft.com/zh-cn ... llprocessimagenamea
https://docs.microsoft.com/zh-cn ... ocessimagefilenamea
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-20 17:45 , Processed in 0.082588 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表