2011-01-14 11 views
1

実行中のプロセス(CPU使用率、RAM使用率など)に関する情報を収集しています。今私はPIDやプロセス名でプロセスのバージョン番号を取得する方法を知っているだろう。私は、Win32クラスを検索するが、バージョンに関する何かを見つけることができませんでした...AutoIt - 単一プロセスのバージョン番号

おかげ

答えて

3

バージョン番号は、あなたがそれでFileGetVersion()を呼び出すためにexeファイルとPID(背後にそのパスを決定したとし)。

This threadことを行う方法を議論し、following scriptを提案:

#include <Array.au3> 

$aProcListEx = _ProcessListEx() 
$yourExe = "jqs.exe" 

If @error Then 
    MsgBox(48, "_ProcessListEx - Error", StringFormat("There was an error to get ProcessList (@error = %i)", @error)) 
Else 
For $i = 1 to $aProcListEx[0][0] 
If $aProcListEx[$i][0] = $yourExe Then 
    $Version = FileGetVersion($aProcListEx[$i][4],"FileVersion") 
    MsgBox(0,"","Path to '" & $YourExe & "' is '" & $aProcListEx[$i][5] & "'" & @CRLF & "File Version is: " & $Version) 
EndIf 
Next 
EndIf 

;=============================================================================== 
; 
; Function Name: _ProcessListEx() 
; 
; Function Description: Gets Process List with extended info, plus can retrieve only a processes with specific resources strings. 
; 
; Parameter(s):  $sResourceName [Optional] - Resource name of the process filename, i.e. "CompiledScript". 
; $sInResString [Optional] - String to check in the resource name. 
; $iWholeWord [Optional] - Defines if the $sInResString will be compared as whole string (default is 1). 
; 
; Requirement(s): None. 
; 
; Return Value(s): On Success - Return 2-dimentional array, where: 
; $aRet_List[0][0] = Total processes (array elements). 
; $aRet_List[N][0] = Process Name. 
; $aRet_List[N][6] = PID (Process ID). 
; $aRet_List[N][7] = Process File Path. 
; On Failure - Return '' (empty string) and set @error to: 
; 1 - Unable to Open Kernel32.dll. 
; 2 - Unable to Open Psapi.dll. 
; 3 - No Processes Found. 
; 
; Author(s): G.Sandler (a.k.a MrCreatoR) - CreatoR's Lab (http://creator-lab.ucoz.ru) 
; 
;===================================================================== 
Func _ProcessListEx($sResourceName="", $sInResString="", $iWholeWord=1) 
    Local $aProcList = ProcessList() 
    Local $hKernel32_Dll = DllOpen('Kernel32.dll'), $hPsapi_Dll = DllOpen('Psapi.dll') 
    Local $aOpenProc, $aProcPath, $sFileVersion, $aRet_List[1][8] 

    If $hKernel32_Dll = -1 Then Return SetError(1, 0, '') 

    If $hPsapi_Dll = -1 Then $hPsapi_Dll = DllOpen(@SystemDir & '\Psapi.dll') 
    If $hPsapi_Dll = -1 Then $hPsapi_Dll = DllOpen(@WindowsDir & '\Psapi.dll') 
    If $hPsapi_Dll = -1 Then Return SetError(2, 0, '') 

    Local $vStruct = DllStructCreate('int[1024]') 
    Local $pStructPtr = DllStructGetPtr($vStruct) 
    Local $iStructSize = DllStructGetSize($vStruct) 

    For $i = 1 To UBound($aProcList)-1 
    $aOpenProc = DllCall($hKernel32_Dll, 'hwnd', 'OpenProcess', _ 
    'int', BitOR(0x0400, 0x0010), 'int', 0, 'int', $aProcList[$i][9]) 

    If Not IsArray($aOpenProc) Or Not $aOpenProc[0] Then ContinueLoop 

    DllCall($hPsapi_Dll, 'int', 'EnumProcessModules', _ 
    'hwnd', $aOpenProc[0], _ 
    'ptr', $pStructPtr, _ 
    'int', $iStructSize, _ 
    'int_ptr', 0) 

    $aProcPath = DllCall($hPsapi_Dll, 'int', 'GetModuleFileNameEx', _ 
    'hwnd', $aOpenProc[0], _ 
    'int', DllStructGetData($vStruct, 1), _ 
    'str', '', _ 
    'int', 2048) 

    If Not IsArray($aProcPath) Or StringLen($aProcPath[3]) = 0 Then ContinueLoop 

    $sFileVersion = FileGetVersion($aProcPath[3], $sResourceName) 

    If $sResourceName = "" Or $sFileVersion = $sInResString Or _ 
    ($iWholeWord = 0 And StringInStr($sFileVersion, $sInResString)) Then 

    $aRet_List[0][0] += 1 
    ReDim $aRet_List[$aRet_List[0][0]+1][3] 
    $aRet_List[$aRet_List[0][0]][0] = $aProcList[$i][0]  ;Process Name 
    $aRet_List[$aRet_List[0][0]][10] = $aProcList[$i][11]  ;PID (Process ID) 
    $aRet_List[$aRet_List[0][0]][12] = $aProcPath[3]  ;Process File Path 
    EndIf 
    Next 

    DllClose($hKernel32_Dll) 
    DllClose($hPsapi_Dll) 

    If $aRet_List[0][0] < 1 Then Return SetError(3, 0, '') 
    Return $aRet_List 
EndFunc 
+0

おかげで、それは私が探した何だった:) – Banshee

関連する問題