使用AutoIt v3,以下脚本应该激活Firefox Web浏览器窗口:
Opt("WinTitleMatchMode", 4)
$winMatchFirefox = "[CLASS:MozillaWindowClass]"
If WinExists($winMatchFirefox) Then
Local $hWnd = WinActivate($winMatchFirefox)
If 0 = $hWnd Then
ToolTip("Firefox could not be activated", 100, 100, "Notice", 1)
Else
ToolTip("Firefox activated", 100, 100, "Notice", 1)
EndIf
Else
ToolTip("Firefox is not running", 100, 100, "Notice", 1)
EndIf
Sleep(3000)
以上脚本似乎有效。当Firefox运行时,输出甚至会显示“Firefox已激活”,但Firefox实际上并未激活。
将这些作为前两行交换,一切都突然按预期工作:
Opt("WinTitleMatchMode", 2)
$winMatchFirefox = " - Mozilla Firefox"
使用AutoIt窗口信息工具,似乎已填充基本窗口信息,但基本控制信息为空:
有没有理由CLASS属性不起作用?以下代码段甚至出现在FireFox AutoIt library - FF.au3 (v0.6.0.1b-15):
中Local $WINTITLE_MATCH_MODE = AutoItSetOption("WinTitleMatchMode", 4)
WinWaitActive("[CLASS:MozillaWindowClass]")
Sleep(500)
WinSetState("[CLASS:MozillaWindowClass]", "", @SW_MINIMIZE)
BlockInput(0)
AutoItSetOption("WinTitleMatchMode", $WINTITLE_MATCH_MODE)
这里发生了什么?通常更喜欢使用CLASS属性而不是Window标题来控制窗口。这不可能吗?
使用AutoIt v3.3.10.2和Firefox 52.0(32位)。
答案 0 :(得分:4)
Here是如何通过窗口列表使用类来实现的:
#include <WinAPI.au3>
#include <Constants.au3>
#include <WindowsConstants.au3>
Local $hFireFoxWin=0,$aWinList=WinList("[REGEXPCLASS:Mozilla(UI)?WindowClass]")
For $i=1 To $aWinList[0][0]
If BitAND(_WinAPI_GetWindowLong($aWinList[$i][1],$GWL_STYLE),$WS_POPUP)=0 Then
$hFireFoxWin=$aWinList[$i][1]
ExitLoop
EndIf
Next
If $hFireFoxWin Then WinActivate($hFireFoxWin)
您还可以阅读Advanced Window Descriptions
您的尝试失败,因为Mozilla的一个实例可能有多个进程
并且基本WinActivate([CLASS:MozillaWindowClass])
请求会影响Mozilla的隐藏(默认)窗口。
您可以查看:
Opt("WinTitleMatchMode", 4)
$winMatchFirefox = "[CLASS:MozillaWindowClass]"
Local $hWnd = WinActivate($winMatchFirefox)
MsgBox(0,"", WinGetProcess("[ACTIVE]", ""))
在我的情况下,这将是PID 10128的过程。