IEBoot

InternetExplorerオブジェクトを生成します。

iexplorer.exeのプロセスが残っているときにCREATEOLEOBJ関数でInternet Explorerを起動するとエラーが出ることがあるので、それを回避するための関数です。

構文
  1. InternetExplorer = IEBoot( [InPrivate] )
引数
InPrivate
InPrivateブラウズ・モードを有効にするときはTRUEを指定(デフォルトはFALSE)
戻値
InternetExplorerオブジェクト

プログラム

////////////////////////////////////////////////// // 【引数】 // InPrivate : InPrivateブラウズ・モードを有効にするときはTRUEを指定(デフォルトはFALSE) // 【戻値】 // InternetExplorerオブジェクト ////////////////////////////////////////////////// FUNCTION IEBoot(InPrivate = FALSE) DIM IE SELECT InPrivate CASE TRUE DOSCMD("start iexplore -private") GETID("InPrivate - Internet Explorer - [InPrivate]", "IEFrame", -1) IE = GETACTIVEOLEOBJ("InternetExplorer.Application","InPrivate - Internet Explorer - [InPrivate]") CASE FALSE TRY IE = CREATEOLEOBJ("InternetExplorer.Application") IE.Visible = TRUE EXCEPT EXEC("C:\Program Files\Internet Explorer\iexplore.exe") GETID("Internet Explorer", "IEFrame", -1) TRY IE = GETACTIVEOLEOBJ("InternetExplorer.Application") EXCEPT IE = getIEObj(-1) ENDTRY ENDTRY SELEND RESULT = IE FEND ////////////////////////////////////////////////// // 【引数】 // 文字列 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 IE
    IE
    InternetExplorerオブジェクトを代入する。
  2. 3-21行目
    SELECT InPrivate CASE TRUE DOSCMD("start iexplore -private") GETID("InPrivate - Internet Explorer - [InPrivate]", "IEFrame", -1) IE = GETACTIVEOLEOBJ("InternetExplorer.Application","InPrivate - Internet Explorer - [InPrivate]") CASE FALSE TRY IE = CREATEOLEOBJ("InternetExplorer.Application") IE.Visible = TRUE EXCEPT EXEC("C:\Program Files\Internet Explorer\iexplore.exe") GETID("Internet Explorer", "IEFrame", -1) TRY IE = GETACTIVEOLEOBJ("InternetExplorer.Application") EXCEPT IE = getIEObj(-1) ENDTRY ENDTRY SELEND
    TRUE(InPrivateがTRUEならば)
    InPrivateブラウズ・モードでInternet Explorerを開く。GETIDでウィンドウが開かれるのを待つ。GETACTIVEOLEOBJで起動したInternetExplorerオブジェクトを取得する。
    FALSE(InPrivateがFALSEならば)
    InternetExplorerオブジェクトを生成・表示。
    IE.Quitしてiexplorer.exeプロセスが残っているとCREATEOLEOBJはエラーになるので、EXECで起動する。GETIDでウィンドウが開かれるのを待つ。
    既に起動中のInternetExplorerオブジェクトを取得する。
    Internet Exploperの保護モードが有効になっているとエラーになるので、getIEObjで最後に起動したInternetExplorerオブジェクトを取得する。
  3. 22行目
    RESULT = IE
    InternetExplorerオブジェクトを戻値として返す。

プログラム実行例

xmlのバージョンを取得する

DIM IE = IEBoot() IE.Navigate("http://uwsc.s1007.xrea.com/sitemap.xml") BusyWait(IE) PRINT IE.document.xmlVersion ////////////////////////////////////////////////// // 【引数】 // IE : IEオブジェクト // 【戻値】 // ////////////////////////////////////////////////// PROCEDURE BusyWait(Var IE) SLEEP(0.500) DIM t = GETTIME() TRY REPEAT DIM tm = GETTIME() - t FUKIDASI("BusyWait:" + tm) SLEEP(0.010) IF tm >= 60 THEN BREAK UNTIL !IE.Busy AND IE.readyState = 4 EXCEPT IE = getIEObj(-1) PRINT IE.document.URL + " のIEオブジェクトを取得しました。" BusyWait(IE) ENDTRY FUKIDASI() FEND ////////////////////////////////////////////////// // 【引数】 // 文字列 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 ////////////////////////////////////////////////// // 【引数】 // InPrivate : InPrivateブラウズ・モードを有効にするときはTRUEを指定(デフォルトはFALSE) // 【戻値】 // InternetExplorerオブジェクト ////////////////////////////////////////////////// FUNCTION IEBoot(InPrivate = FALSE) DIM IE SELECT InPrivate CASE TRUE DOSCMD("start iexplore -private") GETID("InPrivate - Internet Explorer - [InPrivate]", "IEFrame", -1) IE = GETACTIVEOLEOBJ("InternetExplorer.Application","InPrivate - Internet Explorer - [InPrivate]") CASE FALSE TRY IE = CREATEOLEOBJ("InternetExplorer.Application") IE.Visible = TRUE EXCEPT EXEC("C:\Program Files\Internet Explorer\iexplore.exe") GETID("Internet Explorer", "IEFrame", -1) TRY IE = GETACTIVEOLEOBJ("InternetExplorer.Application") EXCEPT IE = getIEObj(-1) ENDTRY ENDTRY SELEND RESULT = IE FEND
結果
1.0