Как открыть второе окно Internet Explorer в фоновом режиме с помощью NSIS - PullRequest
0 голосов
/ 20 мая 2011

это простой вопрос, но не могу найти простой ответ ...
Я пишу сценарий в NSIS, и мне нужно открыть два окна в Internet Explorer

Поэтому я использую ...
UAC :: Exec '' '"$ PROGRAMFILES \ Internet Explorer \ iexplore.exe" "$ url_1' '' ''
затем ...
UAC :: Exec '' '"$ PROGRAMFILES \ Internet Explorer \ iexplore.exe" "$ url_2' '' ''

Но я бы хотел, чтобы $ url_2 открывался позади / на фоне того, где $ url_1
Я схожу с ума там ... Спасибо за любую помощь!

пс. Я не вынужден использовать UAC :: Exec, пока он запускает новое окно IE.

Ответы [ 2 ]

1 голос
/ 23 мая 2011

Ответ довольно прост: просто измените порядок открытия окон:

UAC::Exec '' '"$PROGRAMFILES\Internet Explorer\iexplore.exe" "$url_2' '' ''
then...
UAC::Exec '' '"$PROGRAMFILES\Internet Explorer\iexplore.exe" "$url_1' '' '' 

Таким образом, $ url_2 будет отставать от $ url_1, потому что он открывается позже ...

Редактировать

Если вы хотите иметь какое-то точное окно спереди, вы должны знать его имя (IE устанавливает имя на окно после того, как оно полностью загружено).

Используйте этот простой цикл, чтобы вывести необходимое окно впереди. (Я использовал Exec, но отлично работает с UAC и nsExec)

; This Window is opened as first
Exec '"$PROGRAMFILES\Internet Explorer\iexplore.exe" "www.google.sk"' # $url_1
; This is opened later
Exec '"$PROGRAMFILES\Internet Explorer\iexplore.exe" "www.unsigned-softworks.sk/installer"'  # $url_2

CheckWindow:
  Sleep 500 ; Wait some time (miliseconds)

  ; Find by Window class and by Window name 
  FindWindow $1 "IEFrame" "Google - Windows Internet Explorer" 
  # This name must be known in compile time!!!
  # Get this name by running $url_1 in IE

  ; If window is not found (not loaded!) search again 
  IntCmp $1 0 CheckWindow Continue Continue

Continue:
  # If found (opened & loaded), bring $url_1 to front
  System::Call "User32::SetForegroundWindow(i) b ($1)"
1 голос
/ 21 мая 2011

Лучший вариант для вас - написать собственный плагин на c ++ и использовать комбинацию CreateProcess () и SetForgroundWindow () .

...