搜遍了论坛这方面的帖子,发觉没什么案例接近事情。。。这几个问题好难解决。。。(水平太低了)
例子:;找到MIM进程PID
$list = ProcessList("tj.exe")
;得到PID号
$PID = $list[1][1];
;得到PID的句柄
$tjHandle = _Pid2Handle($PID)
For $i = 1 to $MIMHandle[0][0]
If StringInStr($tjHandle[$i][0], '会议') Then Send("!f")
Next
Func _Pid2Handle($PID)
;Afan提示:通过进程pid返回包含其可见窗口标题和句柄的二维数组
Local $Whall, $i, $pidHandle[1][2] = [[0]], $x = 1
$Whall = WinList()
For $i = 1 To $Whall[0][0]
If WinGetProcess($Whall[$i][1]) = $PID And BitAND(WinGetState($Whall[$i][1]), 2) Then
ReDim $pidHandle[$x + 1][2]
$pidHandle[0][0] += 1
$pidHandle[$x][1] = $Whall[$i][1]
$pidHandle[$x][0] = $Whall[$i][0]
$x += 1
EndIf
Next
Return $pidHandle
EndFunc ;==>_Pid2Handle
第一个问题:;找到MIM进程PID
$list = ProcessList("tj.exe")
;得到PID号
$PID = $list[1][1];
假如没有tj.exe进程的话,执行到$PID是会abort的,请问有何办法可以判断出$list是有东西,还是没东西的,来作出下一步的行为操作?(有东西的才往下执行 For...到最后)
第二个问题:If StringInStr($tjHandle[$i][0], '会议') Then ******(How Active?)
虽然tj.exe单个进程,但多窗口,我想WinWaitActive这个包含“会议"字眼的句柄窗口? 是否可以做到通过获得句柄来Active此窗口?
第三个问题:If StringInStr($tjHandle[$i][0], '会议') Then Send("!f")
实际上我只是想往这个窗口发送按键,但似乎发出的alt+f是没有作用的,于是我打算轮流向$tjHandle[0][0]到[x][x]发出
alt+f,看看谁才是“真”的窗口,针对这样的$tjHandle发送按键,应该如何写呢?(向指定的句柄发送热键?) |