找回密码
 加入
搜索
查看: 2717|回复: 2

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

[复制链接]
发表于 2010-7-21 17:04:10 | 显示全部楼层 |阅读模式
搜遍了论坛这方面的帖子,发觉没什么案例接近事情。。。这几个问题好难解决。。。(水平太低了)

例子:
;找到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发送按键,应该如何写呢?(向指定的句柄发送热键?)
发表于 2010-7-21 19:28:34 | 显示全部楼层
很不错的问题!牵涉到进程、窗口管理、数组、循环判断。第一个问题比较简单,你可以在帮助文件的Processlist参数说明那看到返回值的定义,再用if判断语句就可以解决。
 楼主| 发表于 2010-7-22 15:26:00 | 显示全部楼层
谢谢老大解答,第一个问题似乎解决了,做了个判断。。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-15 14:55 , Processed in 0.077928 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表