2016-09-27 5 views
0

タスクマネージャに表示されるウィンドウプロセスを監視するVBAコード。タスクマネージャに表示されるウィンドウプロセスを監視するVBAコード

私はアプリケーションのRAM使用量とCPU使用率を取得し、それらの値をExcelに追加しようとしています。

私は以下のようにWMIクラスを使用しようとしましたが、howerverプロセスIDを取得しています。RAM使用量とCPU使用量を取得できません。 誰もがこれで私を助けることができますか?

Sub test2() 
    Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2") 
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Process where caption='excel.exe'", , 48) 
    For Each objItem In colItems 
     Sheet1.Range("d2").Value = objItem.ProcessId 
    Next 

    Set colItems = objWMIService.ExecQuery(_"SELECT * FROM Win32_PerfFormattedData_PerfProc_Process where IDProcess=" & Sheet1.Range("d2").Value, , 48) 

    For Each objItem In colItems 
     Sheet1.Range("A1").Value = "PercentProcessorTime: " & objItem.PercentProcessorTime 
    Next 

End Sub 
+1

ちょうど私の意見が、それは、[パフォーマンスモニタ]からこのデータを収集するための方法が容易ではないでしょう(https://technet.microsoft.com /en-us/library/cc749249(v=ws.11).aspx)? – Filburt

答えて

0

あなたはWMIルートを行くことを選択した場合は、Win32_ProcessクラスのWorkingSetSizeプロパティの後に次のようになります。

WorkingSetSizeデータの種類:uint64型のアクセスの種類:読み取り専用修飾子: のDisplayName ( "ワーキングセットサイズ")、単位( "バイト") バイトのメモリの量。ページベースのメモリ管理を使用するシステムの場合は です。システムに (作業セットサイズ未満)のメモリがない場合、スラッシングが発生します。 ワーキングセットのサイズが不明な場合は、NULLまたは0(ゼロ)を使用します。 ワーキングセットデータが提供されている場合、プロセスの変更メモリ要件を理解するために、 の情報を監視することができます。

そしてWin32_PerfFormattedData_PerfProc_ProcessクラスのPercentProcessorTime

PercentProcessorTimeデータの種類:uint64型アクセスの種類:読み取り専用 修飾子:CookingType( "PERF_100NSEC_TIMER")、カウンター ( "PercentProcessorTime")、PerfTimeStamp ( "TimeStamp_Sys100NS")、 PerfTimeFreq( "Frequency_Sys100NS")プロセッサが プロセッサがアイドルでないスレッドを実行している時間のパーセンテージ。このプロパティは、プロセッサのアクティビティの主なインジケータとして となっています。 プロセッサが各サンプル間隔でアイドルプロセス のスレッドを実行するのに費やす時間を測定し、その値を100%から0,引きます。 (各プロセッサには、実行可能な他のスレッドがない場合には、サイクル を消費するアイドルスレッドがあります)。これは、有効な作業に費やしたサンプル間隔のうち、 の割合で見ることができます。この プロパティは、 サンプル間隔の間に観察されたビジー時間の平均割合を表示します。 サービスが非アクティブだった時間を監視し、その値を100%から減算することによって計算されます。

しかし、SWbemRefresherオブジェクト(https://msdn.microsoft.com/en-us/library/aa393838(v=vs.85).aspx)を見ることもできます。

あなたがで作業するためのスケルトンVBAコード:

Dim srvEx As SWbemServicesEx 
Dim xlProcSet As SWbemObjectSet 
Dim xlPerfSet As SWbemObjectSet 
Dim objEx As SWbemObjectEx 

Set srvEx = GetObject("winmgmts:\\.\root\CIMV2") 
Set xlProcSet = srvEx.ExecQuery("SELECT * FROM Win32_Process WHERE name = 'EXCEL.EXE'") 
Set xlPerfSet = srvEx.ExecQuery("SELECT * FROM Win32_PerfFormattedData_PerfProc_Process WHERE name = 'EXCEL'") 

For Each objEx In xlProcSet 
    Debug.Print objEx.Name & " RAM: " & objEx.WorkingSetSize/1024 & "kb" 
Next 

For Each objEx In xlPerfSet 
    Debug.Print objEx.Name & " CPU: " & objEx.PercentProcessorTime & "%" 
Next 
+0

ありがとうございます。 WorkingSetSizeプロパティを使用してメモリ使用量を取得しましたが、CPU使用量のプロパティをまだ見つけていました。あなたのコードは私を助けてくれました。 – Khushish