找回密码
 加入
搜索
查看: 2272|回复: 6

怎样用句柄区分多个一模一样的窗口

  [复制链接]
发表于 2009-12-20 06:42:31 | 显示全部楼层 |阅读模式
我有好几个qq,用的是2009版的qq,怎么区分这些窗口(从标题到窗口文本的都一摸一样),怎么控制这些窗体呢,唯一的区别就是,先后打开的顺序不一样,高手指教。。。。
发表于 2009-12-20 07:05:31 | 显示全部楼层
发表于 2009-12-20 11:01:15 | 显示全部楼层
可能只有通过托盘图标操作才不受QQ版本的影响。
发表于 2009-12-20 11:16:27 | 显示全部楼层
在运行QQ的时候直接就获得了。
$aa=Run($QQPath)
$aa就是句柄了。
 楼主| 发表于 2009-12-21 15:42:12 | 显示全部楼层
回复 4# ebhb


$a=Run("C:\Program Files\Tencent\QQ\Bin\QQ.exe")
WinWait("QQ2009","")
$b=WinGetHandle("QQ2009","")
WinClose($b)
Run("notepad.exe")
WinWaitActive("无标题 - 记事本","")
Send($a)
Send("{enter}")
Send($b)

你那个不是句柄啊,“$aa=Run($QQPath)”这个不知道是什么?$b才是句柄,到底该怎么获得句柄呢???
发表于 2009-12-21 18:34:41 | 显示全部楼层
run 成功: 返回所运行程序的 PID(进程标识符).  
这个pid是唯一的。可以用ProcessClose ($aa)来关闭QQ
发表于 2009-12-22 04:50:21 | 显示全部楼层
Dim $PID, $Msg
$list = ProcessList("qq.exe")
For $i = 1 To $list[0][0]
        $PID &= $list[$i][1] & ','
Next
$PID = StringTrimRight($PID, 1)
$A_PID = StringSplit($PID, ",")
$var = WinList()
For $s = 1 To $A_PID[0]
        For $i = 1 To $var[0][0]
                If $var[$i][0] <> "" And IsVisible($var[$i][1]) Then
                        $win2pid = WinGetProcess($var[$i][1])
                        If $win2pid = $A_PID[$s] Then
                                $Msg &= '进程PID ' & $A_PID[$s] & ' 窗口句柄 ' & $var[$i][1] & @CRLF
                                ExitLoop
                        EndIf
                EndIf
        Next
Next
MsgBox(0, '通过进程PID得到窗口句柄', $Msg)

Func IsVisible($handle)
        If BitAND(WinGetState($handle), 2) Then
                Return 1
        Else
                Return 0
        EndIf
EndFunc   ;==>IsVisible
通过进程PID来获取窗口句柄

评分

参与人数 1金钱 +20 贡献 +5 收起 理由
afan + 20 + 5

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-22 15:39 , Processed in 0.086441 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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