我有这个nsis脚本,
...
nsExec::Exec "openFirstWindow.exe" ;HERE This exe will open a FIRST WINDOW to whatever url
Pop $exe_return_code
StrCmp $exe_return_code "0" exe_success
Goto exe_done
exe_success:
;HERE is the call to the SECOND WINDOW
UAC::Exec '' '"$PROGRAMFILES\Internet Explorer\iexplore.exe" "http://www.google.ca"' '' ''
exe_done:
...
问题是随机,我在前景中得到 FIRST 窗口,后面是 SECOND , 有时我会在 FIRST 前面的 SECOND 窗口。
我的猜测是,由于 FIRST 窗口需要随机时间打开和 如果 SECOND 窗口在 FIRST 之前完成打开,那么 FIRST 将获得焦点并位于顶部。
是否有人有解决方案确保 SECOND 窗口具有焦点?
谢谢!
答案 0 :(得分:2)
这不是一个简单的问题,因为打开网页是异步的:您不知道加载何时完成。一个优雅的解决方案是从浏览器获得第一页已加载的反馈,但由于您必须支持每个浏览器,因此需要做很多工作。顺便说一下,你强制使用IE,这不是一个好主意,你应该使用用户的默认浏览器
也许某些AutoIt脚本可以观看并等待浏览器窗口/标签打开。
或者只是在两次通话之间等待几秒钟。
<强> 修改 强>
答案 1 :(得分:1)
使用这个简单的循环将所需的窗口放在前面。 (我使用了Exec,但在UAC和nsExec上运行良好)
; This Window is opened as first
Exec '"$PROGRAMFILES\Internet Explorer\iexplore.exe" "www.google.sk"'
; This is opened later
Exec '"$PROGRAMFILES\Internet Explorer\iexplore.exe" "www.unsigned-softworks.sk/installer"'
CheckWindow:
Sleep 500 ; Wait some time (miliseconds)
; Find by Window class and by Window name
FindWindow $1 "IEFrame" "Google - Windows Internet Explorer"
; If window is not found (not loaded!) search again
IntCmp $1 0 CheckWindow Continue Continue
Continue:
# If found (opened & loaded), bring it to front
System::Call "User32::SetForegroundWindow(i) b ($1)"