本帖最后由 afan 于 2010-3-11 00:01 编辑
回复 9# haorui658
不用客气~~
说明下两个可选参数:
$Delay : 这个是指延时n毫秒后再获取,因为某些软件启动时标题会改变,当然一般不会改变
$timeout : 这个是指超过n毫秒仍未获取到则直接返回,当然获取到了会立即返回,所以设大些没问题$pid = Run('Notepad.exe') ;例子1
MsgBox(0, @error, Pid2title($pid))
ProcessClose($pid)
$pid = Run(@ProgramFilesDir & '\Internet Explorer\IEXPLORE.EXE') ;例子2
MsgBox(0, @error, Pid2title($pid, 100))
ProcessClose($pid)
Func Pid2title($pid, $Delay = 10, $timeout = 10000)
;Afan提示:$pid即通过Run()返回的进程标识符,$Delay[可选]延时时间,$timeout[可选]超时时间。
Local $begin = TimerInit(), $Info, $Runout, $title
Do
If ProcessExists($pid) <> 0 Then ExitLoop
Until TimerDiff($begin) >= $timeout
Sleep($Delay)
If ProcessExists($pid) = 0 Then Return SetError(1, 0, 0)
Do
$Runout = Run('TASKLIST /V /FI "PID eq ' & $pid & '" /FO LIST', '', 0, 2)
If @error Then Return SetError(2, 0, 0)
Do
Sleep(1)
$Info &= StdoutRead($Runout)
Until @error
$title = StringRegExp($Info, '\n窗口标题\s+:\s*(.*)\r', 3)
If Not @error Then
If $title[0] <> '暂缺' Then ;
Return $title[0]
Else
Sleep(100)
$Info = ''
EndIf
EndIf
Until TimerDiff($begin) >= $timeout
Return SetError(3, 0, 0)
EndFunc ;==>Pid2title
|