起動中のIEを列挙する

UWSC公式掲示板に答えてみた。
起動中のIEのURLを列挙したいらしい。
GetActiveOleObjを使われていて、1枚目しか取れない、ということだったので、タイトル指定でいけるかと思ったけど、URLが欲しいくらいだから、タイトルは判らないものと勝手に想定してみた。




タブを考慮しない場合は、UWSCの作法にのっとって、全ウインドウからIEを探す。

numWin = GETALLWIN()
FOR i = 0 TO numWin - 1
  IFB STATUS(ALL_WIN_ID[i], ST_CLASS) = "IEFrame" THEN
    url = getstr(ALL_WIN_ID[i], 1)
    Print url
  ENDIF
NEXT

タブを考慮する必要がある場合は、IEは相変わらずShellのようなので、COM任せ

sh = CreateOleObj("Shell.Application")
explorers = sh.Windows()
For i = 0 To explorers.Count - 1
  COM_ERR_IGN
    url = explorers.item(i).document.url
    If !COM_ERR_FLG Then Print url
  COM_ERR_RET
Next


ついでに後者を、PowershellVBScriptにしてみた。
COMなので楽勝と思ったら、JScriptではなぜか失敗、、、。

$sh = New-Object -ComObject Shell.Application
$exs = $sh.Windows()
for($i = 0; $i -lt $exs.Count; $i++) {
  $exs.Item($i).Document.Url
}
	Set sh = CreateObject("Shell.Application")
	Set exs = sh.Windows()
	For i = 0 To exs.Count - 1
		On Error Resume Next
		WScript.Echo(exs.Item(i).Document.Url)
		On Error Goto 0
	Next
	Set exs = Nothing
	Set sh = Nothing

ループまでは期待通りなのに、Urlが取れない、、、。

	var sh = new ActiveXObject('Shell.Application');
	var exs = sh.Windows();
	for(var i = 0; i < exs.Count; i++) {
		WScript.Echo(exs.Item(i).Document.Url);
	}