getIEObj

引数に指定した「タイトル」または「URL」を含むInternetExplorerオブジェクトを返します。

数値nを指定した場合、n番目に開いたInternetExplorerオブジェクトを取得します。負の数で後ろからn番目のものを取得します。0でInternet Explorerのタブの数を取得します。

IELINK関数などで新しいで開かれたタブのInternetExplorerオブジェクトを取得したいときに使います。

構文
  1. InternetExplorer = getIEObj( 文字列 or 数値, [完全一致フラグ] )
引数
文字列 or 数値
取得したいIEオブジェクトのタイトル・URLもしくは数値を指定
完全一致フラグ
TRUE
文字列が完全一致したものを取得
FALSE
文字列の一部を含むものを取得
戻値
Internet Explorerオブジェクト

プログラム

//////////////////////////////////////////////////
// 【引数】
//   文字列 or 数値 : 取得したいIEオブジェクトのタイトル・URLもしくは数値を指定 
//   完全一致フラグ : (TRUE : 文字列が完全一致したものを取得、FALSE : 文字列の一部を含むものを取得) 
// 【戻値】
//   Internet Explorerオブジェクト 
//////////////////////////////////////////////////
FUNCTION getIEObj(str, flg = FALSE)
	DIM Shell = CREATEOLEOBJ("Shell.Application")
	SELECT CHKNUM(str)
		CASE TRUE
			DIM cnt = 0
			SELECT TRUE
				CASE str > 0
					FOR n = 0 TO Shell.Windows.Count - 1
						TRY
							IFB Shell.Windows.Item(n).Name = "Internet Explorer" THEN
								cnt = cnt + 1
								IFB str = cnt THEN
									RESULT = Shell.Windows.Item(n)
									EXIT
								ENDIF
							ENDIF
						EXCEPT
						ENDTRY
					NEXT
				CASE str < 0
					FOR n = Shell.Windows.Count - 1 TO 0 STEP -1
						TRY
							IFB Shell.Windows.Item(n).Name = "Internet Explorer" THEN
								cnt = cnt + 1
								IFB ABS(str) = cnt THEN
									RESULT = Shell.Windows.Item(n)
									EXIT
								ENDIF
							ENDIF
						EXCEPT
						ENDTRY
					NEXT
				CASE str = 0
					FOR n = 0 TO Shell.Windows.Count - 1
						TRY
							IF Shell.Windows.Item(n).Name = "Internet Explorer" THEN cnt = cnt + 1
						EXCEPT
						ENDTRY
					NEXT
					RESULT = cnt
					EXIT
			SELEND
		CASE FALSE
			DIM t = GETTIME()
			REPEAT
				FOR n = 0 TO Shell.Windows.Count - 1
					TRY
						DIM targetObj = Shell.Windows.Item(n)
						IFB targetObj.Name = "Internet Explorer" THEN
							SELECT flg
								CASE TRUE
									IFB targetObj.document.title = str OR targetObj.LocationURL = str THEN
										RESULT = Shell.Windows.Item(n)
										EXIT
									ENDIF
								CASE FALSE
									IFB POS(str, targetObj.document.title) OR POS(str, targetObj.LocationURL) THEN
										RESULT = Shell.Windows.Item(n)
										EXIT
									ENDIF
							SELEND
						ENDIF
					EXCEPT
					ENDTRY
				NEXT
			UNTIL GETTIME() - t >= 5
	SELEND
	RESULT = ERR_VALUE
FEND

解説

  1. 2行目
    	DIM Shell = CREATEOLEOBJ("Shell.Application")
    
    Shellオブジェクトを生成。
  2. 3行目
    	SELECT CHKNUM(str)
    
    変数strが文字列かどうか。文字列ならば5-42行目。文字列でなければ44-66行目。
  3. 8-19行目
    					FOR n = 0 TO Shell.Windows.Count - 1
    						TRY
    							IFB Shell.Windows.Item(n).Name = "Internet Explorer" THEN
    								cnt = cnt + 1
    								IFB str = cnt THEN
    									RESULT = Shell.Windows.Item(n)
    									EXIT
    								ENDIF
    							ENDIF
    						EXCEPT
    						ENDTRY
    					NEXT
    
    InternetExplorerとエクスプローラの数(Shell.Windows.Count)だけループ。n番目が「Internet Explorer」ならば、変数cntを+1する。変数strが変数cntと等しければ、n番目のIEオブジェクトを戻値として返す。
  4. 21-32行目
    					FOR n = Shell.Windows.Count - 1 TO 0 STEP -1
    						TRY
    							IFB Shell.Windows.Item(n).Name = "Internet Explorer" THEN
    								cnt = cnt + 1
    								IFB ABS(str) = cnt THEN
    									RESULT = Shell.Windows.Item(n)
    									EXIT
    								ENDIF
    							ENDIF
    						EXCEPT
    						ENDTRY
    					NEXT
    
    基本的には8-19行目と同じ。InternetExplorerオブジェクトを後ろからカウントする。後ろからn番目を取得するときは負の数を指定するので順番はABSで絶対値を取る。
  5. 34-41行目
    					FOR n = 0 TO Shell.Windows.Count - 1
    						TRY
    							IF Shell.Windows.Item(n).Name = "Internet Explorer" THEN cnt = cnt + 1
    						EXCEPT
    						ENDTRY
    					NEXT
    					RESULT = cnt
    					EXIT
    
    InternetExplorerオブジェクトの数を返す。
  6. 44-66行目
    			DIM t = GETTIME()
    			REPEAT
    				FOR n = 0 TO Shell.Windows.Count - 1
    					TRY
    						DIM targetObj = Shell.Windows.Item(n)
    						IFB targetObj.Name = "Internet Explorer" THEN
    							SELECT flg
    								CASE TRUE
    									IFB targetObj.document.title = str OR targetObj.LocationURL = str THEN
    										RESULT = Shell.Windows.Item(n)
    										EXIT
    									ENDIF
    								CASE FALSE
    									IFB POS(str, targetObj.document.title) OR POS(str, targetObj.LocationURL) THEN
    										RESULT = Shell.Windows.Item(n)
    										EXIT
    									ENDIF
    							SELEND
    						ENDIF
    					EXCEPT
    					ENDTRY
    				NEXT
    			UNTIL GETTIME() - t >= 5
    
    n番目のInternetExplorerオブジェクトのタイトルかURLが変数strと一部(57-60行目)もしくは全部(52-55行目)が一致したらそれを返す。5秒以内に取得できなければループを抜ける。
  7. 68行目
    	RESULT = ERR_VALUE
    
    エラー値を返す。

getIEObjの使い方

  • 2番目に開いたIEオブエジェクト
    getIEObj(2)
  • 最後に開いた(後ろから1番目の)IEオブエジェクト
    getIEObj(-1)
  • タイトルもしくはURLに「example.com」を含むIEオブエジェクト
    getIEObj("example.com")
  • タイトルもしくはURLが「UWSC」に完全一致するIEオブエジェクト
    getIEObj("UWSC", TRUE)
  • Internet Explorerの個数
    getIEOBj(0)
  • 一番最後の「google」を含むタブ
    FOR n = getIEObj(0) TO 1 STEP -1
    	DIM cnt = 0
    	DIM IE = getIEObj(n)
    	PRINT IE.document.URL
    	IFB POS("google", IE.document.URL) <> 0 THEN
    		cnt = cnt + 1
    	ENDIF
    	IF cnt = 1 THEN BREAK
    NEXT