sanfer8889 发表于 2010-7-21 17:04:10

获得进程PID号后,几个操作不懂如何写的问题,包括Active进程窗口,发送热键(内详)

搜遍了论坛这方面的帖子,发觉没什么案例接近事情。。。这几个问题好难解决。。。(水平太低了){:face (189):}

例子:;找到MIM进程PID
$list = ProcessList("tj.exe")

;得到PID号
$PID = $list;

;得到PID的句柄
$tjHandle = _Pid2Handle($PID)

For $i = 1 to $MIMHandle
   If StringInStr($tjHandle[$i], '会议') Then Send("!f")
Next

Func _Pid2Handle($PID)
      ;Afan提示:通过进程pid返回包含其可见窗口标题和句柄的二维数组
      Local $Whall, $i, $pidHandle = [], $x = 1
      $Whall = WinList()
      For $i = 1 To $Whall
                If WinGetProcess($Whall[$i]) = $PID And BitAND(WinGetState($Whall[$i]), 2) Then
                        ReDim $pidHandle[$x + 1]
                        $pidHandle += 1
                        $pidHandle[$x] = $Whall[$i]
                        $pidHandle[$x] = $Whall[$i]
                        $x += 1
                EndIf
      Next
      Return $pidHandle
EndFunc   ;==>_Pid2Handle第一个问题:;找到MIM进程PID
$list = ProcessList("tj.exe")
;得到PID号
$PID = $list;假如没有tj.exe进程的话,执行到$PID是会abort的,请问有何办法可以判断出$list是有东西,还是没东西的,来作出下一步的行为操作?(有东西的才往下执行 For...到最后)

第二个问题:If StringInStr($tjHandle[$i], '会议') Then ******(How Active?)虽然tj.exe单个进程,但多窗口,我想WinWaitActive这个包含“会议"字眼的句柄窗口?是否可以做到通过获得句柄来Active此窗口?

第三个问题:If StringInStr($tjHandle[$i], '会议') Then Send("!f")实际上我只是想往这个窗口发送按键,但似乎发出的alt+f是没有作用的,于是我打算轮流向$tjHandle到发出
alt+f,看看谁才是“真”的窗口,针对这样的$tjHandle发送按键,应该如何写呢?(向指定的句柄发送热键?)

autoit3CN 发表于 2010-7-21 19:28:34

很不错的问题!牵涉到进程、窗口管理、数组、循环判断。第一个问题比较简单,你可以在帮助文件的Processlist参数说明那看到返回值的定义,再用if判断语句就可以解决。

sanfer8889 发表于 2010-7-22 15:26:00

谢谢老大解答,第一个问题似乎解决了,做了个判断。。。
页: [1]
查看完整版本: 获得进程PID号后,几个操作不懂如何写的问题,包括Active进程窗口,发送热键(内详)