binghc 发表于 2009-12-20 06:42:31

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

我有好几个qq,用的是2009版的qq,怎么区分这些窗口(从标题到窗口文本的都一摸一样),怎么控制这些窗体呢,唯一的区别就是,先后打开的顺序不一样,高手指教。。。。

fjxm 发表于 2009-12-20 07:05:31

http://www.autoitx.com/forum.php?mod=viewthread&tid=11079&from=favorites

afan 发表于 2009-12-20 11:01:15

可能只有通过托盘图标操作才不受QQ版本的影响。

ebhb 发表于 2009-12-20 11:16:27

在运行QQ的时候直接就获得了。
$aa=Run($QQPath)
$aa就是句柄了。

binghc 发表于 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才是句柄,到底该怎么获得句柄呢???

ebhb 发表于 2009-12-21 18:34:41

run 成功: 返回所运行程序的 PID(进程标识符).
这个pid是唯一的。可以用ProcessClose ($aa)来关闭QQ

298311657 发表于 2009-12-22 04:50:21

Dim $PID, $Msg
$list = ProcessList("qq.exe")
For $i = 1 To $list
        $PID &= $list[$i] & ','
Next
$PID = StringTrimRight($PID, 1)
$A_PID = StringSplit($PID, ",")
$var = WinList()
For $s = 1 To $A_PID
        For $i = 1 To $var
                If $var[$i] <> "" And IsVisible($var[$i]) Then
                        $win2pid = WinGetProcess($var[$i])
                        If $win2pid = $A_PID[$s] Then
                                $Msg &= '进程PID ' & $A_PID[$s] & ' 窗口句柄 ' & $var[$i] & @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]
查看完整版本: 怎样用句柄区分多个一模一样的窗口