本帖最后由 huaisha1224 于 2011-9-26 10:27 编辑
我想查询到进程所对应的版本号(比如QQ这个进程 我查到的版本号就是)
我现在的方式是这样的
1、先通过ProcessExists获取进程ID、
2、然后再通过进程ID获取到进程的映像路径
3、最后使用FileGetVersion来获取程序的版本
但是在我完成代码时候发现有一些进程获取不到映像路径当然也获取不到进程的版本号
只有一部分进程的映像路径可以获取得到
我现在的代码如下:;通过进程获得程序路径、然后获取程序的版本号
Local $procName="qq.exe"
Local $ProcID=ProcessExists($procName)
Local $nVer
If ($ProcID) Then
MsgBox(0, "进程路径", "进程路径:" & _ProcessGetLocation($ProcID))
EndIf
$nVer = FileGetVersion(_ProcessGetLocation($ProcID),"FileVersion")
MsgBox(0,"范例","程序版本:" &$nVer)
Func _ProcessGetLocation($iPID)
Local $aProc = DllCall('kernel32.dll', 'hwnd', 'OpenProcess', 'int', BitOR(0x0400, 0x0010), 'int', 0, 'int', $iPID)
If $aProc[0] = 0 Then Return SetError(1, 0, '')
Local $vStruct = DllStructCreate('int[1024]')
DllCall('psapi.dll', 'int', 'EnumProcessModules', 'hwnd', $aProc[0], 'ptr', DllStructGetPtr($vStruct), 'int', DllStructGetSize($vStruct), 'int_ptr', 0)
Local $aReturn = DllCall('psapi.dll', 'int', 'GetModuleFileNameEx', 'hwnd', $aProc[0], 'int', DllStructGetData($vStruct, 1), 'str', '', 'int', 2048)
If StringLen($aReturn[3]) = 0 Then Return SetError(2, 0, '')
Return $aReturn[3]
EndFunc
我把论坛里面的帖子都翻转了都没有找到相关的内容
请高手指点指点
或者有其他办法能够通过进程来获取到相应的版本号的话也是可以的
求指点 |