怎样用句柄区分多个一模一样的窗口
我有好几个qq,用的是2009版的qq,怎么区分这些窗口(从标题到窗口文本的都一摸一样),怎么控制这些窗体呢,唯一的区别就是,先后打开的顺序不一样,高手指教。。。。 http://www.autoitx.com/forum.php?mod=viewthread&tid=11079&from=favorites 可能只有通过托盘图标操作才不受QQ版本的影响。 在运行QQ的时候直接就获得了。$aa=Run($QQPath)
$aa就是句柄了。 回复 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才是句柄,到底该怎么获得句柄呢??? run 成功: 返回所运行程序的 PID(进程标识符).
这个pid是唯一的。可以用ProcessClose ($aa)来关闭QQ 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]