◆ [VBScript] 指定プロセスのCPU使用率を監視し、アイドル状態になるまで待つ
こんばんワイン。どーもボキです。

Craving Explorerは、かなり使える動画ダウンロード&変換ツールなんだけど、
時間の掛かる変換機能は、変換完了時のイベントを指定できない。

たとえば、変換に数時間かかる動画が終わったら、電源OFFるってのが出来ない。
なので、指定プロセスがアイドル状態(=CravingExplorer変換完了)かを判定するスクリプトを考えた。

以下は、指定したプロセスのCPU利用率を監視するサンプル。
サンプルではFirefoxがアイドル状態になるのをひたすら待ち受ける。
If WaitForProcessIdle("firefox.exe") Then MsgBox "アイドル状態" Else MsgBox "ない"

' -------------------------------------------------------------------------------
' True : 指定プロセスがアイドル状態になった(or 終了した)
' False : 指定プロセスが存在しない
Function WaitForProcessIdle(ProcessName)
'http://www.tek-tips.com/viewthread.cfm?qid=395765

WaitForProcessIdle = False
' プロセスIDを取得する
For Each Process in GetObject("winmgmts:").ExecQuery("Select * from Win32_Process where Name = '" & ProcessName & "'")
pID = Process.Handle
Exit For
Next
If pID = 0 Then Exit Function ' プロセスが見つからない
On Error Resume Next

WScript.StdOut.Write ProcessName &"(" & pID &")"

cmd = "Select * from Win32_PerfRawData_PerfProc_Process where IDProcess = '" & pID & "'"
Set objService = GetObject("Winmgmts:{impersonationlevel=impersonate}!\Root\Cimv2")
For Each objInstance in objService.ExecQuery(cmd)
n1 = objInstance.PercentProcessorTime
d1 = objInstance.TimeStamp_Sys100NS
Exit For
Next
Do
If objInstance.Name = "" Then Exit Do ' プロセスが終了
n0 = n1
d0 = d1
WScript.Sleep(1000)
WScript.StdOut.Write "."
For Each objInstance in objService.ExecQuery(cmd)
n1 = objInstance.PercentProcessorTime
d1 = objInstance.TimeStamp_Sys100NS
Exit For
Next
cpuusage = Round((n1 - n0)/(d1 - d0)*100, 0)
Loop Until cpuusage = 0 ' CPU使用率が0になるまでループ
WScript.StdOut.Write vbCRLF

On Error GoTo 0
WaitForProcessIdle = True
End Function
けど今回やりたかったことに対しては、このスクリプトは使えない。(このままでは)

それは、変換処理はCraving Explorerでなく、「ffmpeg.exe」が行っているからだ。
また、動画ごとにffmpeg.exeプロセスを立ち上げているようだ。(=動画ごとにffmpeg.exeのプロセスIDが変わる)

なので、スクリプトを作るとしたらこんな感じかな。
 1.一定時間ごとにffmpeg.exeプロセスが起動しているか確認する
 2.ffmpeg.exeプロセスが存在しない状態が10sec続くようなら、変換完了 → 電源OFF
このほうがずっとシンプルで確実。


[PR]
by yozda | 2012-05-30 00:23 | プログラミング | Trackback(2) | Comments(0)
トラックバックURL : http://yozda.exblog.jp/tb/15444817
トラックバックする(会員専用) [ヘルプ]
Tracked from ( … > Z_ ̄∂ at 2012-06-16 10:10
タイトル : [VBScript] Craving Explorer ..
おはヨーグルト。ドーモボキです。 [VBScript] 指定プロセスのCPU使用率を監視し、アイドル状態になるまで待つ  ↑ このときに考えてた、Craving Explorerの動画変換完了時にPCをスタンバイにするスクリプトを考えた。  ・指定した名前のプロセスが存在するか調べる  ・PCをスタンバイにする の組み合わせ。超、カンタン&シンプル。Set objWS = CreateObject("WScript.Shell") Count = 0 ...... more
Tracked from venusgood.com at 2017-01-06 18:16
タイトル : venusgood.com
[VBScript] 指定プロセスのCPU使用率を監視し、アイドル状態になるまで待つ : ( … > Z_ ̄∂... more
<< [VBScript] デバッグ... [VBScript] 指定した... >>