ファイルを読み直す・開きなおす

2019年4月30日 (火) 10:37時点におけるSukemaru (トーク | 投稿記録)による版 (ソースコード)

概要

標準ツールバーの「読み直し」アイコン(ファイル メニューの「読み直し」コマンド)のポップアップメニューを再現します。


エンコード指定の選択肢のほかに以下の機能を追加してあります。

  • Mery の 書き換え禁止 フラグ ON/OFF の変更
  • 読み取り専用属性 ON/OFF の変更(ファイルを開きなおす)
  • ファイルを 閉じて開きなおす
  • 編集モードの設定」パネルを開く
  • 編集モード」を変更するサブメニュー
  • ファイルの「プロパティ」を開く (2019/04/08 追加)
  • さいごに閉じたファイル」を開く (2019/04/28 追加)
  • 自動保存フォルダバックアップフォルダを開く (2019/04/29 追加)


ポップアップメニューのスクリーンショット (2019/04/06)

※「さいごに閉じたファイル」と「自動保存/バックアップ フォルダ」は「読みなおし サブメニュー」内に表示されます。  


仕様上の制限

  • ファイルを「開きなおす」場合は、タブの並び順のさいごの位置に開きます。
    また、開きなおしたファイルは、拡張子ごとの既定の「編集モード」になります。
  • 「無題」ドキュメントでは読み直しやエンコード指定ができないので、「編集モード サブメニュー」だけを表示します。
  • 「編集モード サブメニュー」は、「編集モードの設定」でカスタマイズした並び順にはなりません
    (※マクロから「編集モードの設定」にあるアイテムを取得する方法がないので、追加/削除されたものに対応するには、マクロのソースコードの書き換えが必要です。 → ZIP の ソースコードで 180行目 ~ 210行目 付近)。
  • アクセラレータの重複でトグル移動してしまうときは、Enter キーで確定するか、ソースコード内でアクセラレータ( & 記号の位置や (&X) のアルファベット部分)を変更してください。
  • document → editor.ActiveDocument にしたので、ツールバーやメニューから実行する場合は、アウトプットバーにフォーカスがあるときでも動作するはず(ショートカットキーでの実行は無理かも)。
  • エディタの設定で タブが無効 または タブの「閉じるボタン」を表示していない 場合は、閉じたときに Mery (のウインドウ)が終了してしまい、開きなおしができません。
  • 「さいごに閉じたファイル」メニューを表示できるのは、Mery 本体のオプション設定 >> 履歴 >> 「カーソル位置とブックマークを保存する」が有効で、本マクロの設定項目「読みなおし サブメニュー」が有効の場合のみです。
  • 「自動保存/バックアップフォルダ」の設定を Mery.ini から読みとるため、Mery の「オプション」設定の「自動保存」でフォルダパスが指定されていてフォルダの実在確認ができるなら、「自動保存/バックアップ」の有効/無効によらずポップアップメニュー内にコマンドを表示します。


ダウンロード

ファイル:ファイルを読み直す・開きなおす.zip」(アイコン入り)

 2019/03/29:	 初版
 2019/04/06:	「編集モードサブメニュー」を追加。
 2019/04/07:	 Quit() メソッドを削除。
 2019/04/08:	「プロパティ」を追加。動作コードの記述を簡略化。
 2019/04/28:	「さいごに閉じたファイル」を追加。ソースコードが約100行 UP…。
 2019/04/29:	「自動保存フォルダ/バックアップフォルダを開く」を追加。
		「さいごに閉じたファイル」を修正。


ソースコード

#title = "ファイルを読み直す・開きなおす..."
#tooltip = "エンコード指定/読み取り専用属性/編集モードの変更"
// #icon = "reload.ico"
// #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",262

/**
 * ---------------------------------------------------------
 * ファイルを読み直す・開きなおす
 * sukemaru (2019/03/29 - 2019/04/29)
 * ---------------------------------------------------------
 */

// ---------- ▼ 設定項目 ▼ ---------- //

// ■「読みなおし サブメニュー」を表示する
var reloadMenuEnable = true;

    // ■「さいごに閉じたファイル」の件数
    var numLatestClosed = 5;

// ■「編集モード サブメニュー」を表示する
var viewModeMenuEnable = true;

// ■諸外国語用(UTF-** とシフトJIS 以外)の文字コードを表示する
var variousLanguageEnable = true;

// ---------- ▲ 設定項目 ▲ ---------- //


var d = editor.ActiveDocument;
var path = d.FullName;

if ( ! path && ! viewModeMenuEnable ) {
  Status = " 「無題」ドキュメントは読み直しできません。";
}
else {
  var WshShell = new ActiveXObject( "WScript.Shell" );
  var Fso = new ActiveXObject( "Scripting.FileSystemObject" );

  // メニューに付けるチェックマークとグレーアウト設定
  if ( path ) {
    var f = Fso.GetFile( path );

    // 読み取り専用属性
    var attributeReadOnly = ( f.Attributes & 1 ? true : false )
    var aCheckFlags = attributeReadOnly ? meMenuChecked : 0;
    var aGrayFlags1 = attributeReadOnly ? meMenuGrayed : 0;
    var aGrayFlags2 = attributeReadOnly ? 0 : meMenuGrayed;

    // 書き換え禁止フラグ
    var rCheckFlags = d.ReadOnly ? meMenuChecked : 0;
    var rGrayFlags1 = d.ReadOnly ? meMenuGrayed : 0;
    var rGrayFlags2 = d.ReadOnly ? 0 : meMenuGrayed;

    // エンコード
    var dEnc = d.Encoding;
    var utf8 = ( dEnc == meEncodingUTF8
              || dEnc == meEncodingUTF8BOM
              || dEnc == meEncodingUTF8NoBOM )
      ? meMenuChecked : 0;
    var utf16le = ( dEnc == meEncodingUTF16LE
                 || dEnc == meEncodingUTF16LEBOM
                 || dEnc == meEncodingUTF16LENoBOM )
      ? meMenuChecked : 0;
    var utf16be = ( dEnc == meEncodingUTF16BE
                 || dEnc == meEncodingUTF16BEBOM
                 || dEnc == meEncodingUTF16BENoBOM )
      ? meMenuChecked : 0;
    var EncCheck = function( arg1 ) {
      return d.Encoding == arg1 ? meMenuChecked : 0;
    };
  }

  // 編集モード
  if ( viewModeMenuEnable ) {
    var dMode = d.Mode;
    var ModeCheck = function( arg1 ) {
      return dMode == arg1 ? meMenuChecked : 0;
    };
  }

  // さいごに閉じたファイル
  if ( numLatestClosed > 0 ) {
    var latestClosedFile = LatestClosedFile( numLatestClosed );
    latestClosedFile = numLatestClosed == 1
                     ? [ latestClosedFile ] : latestClosedFile;
  }

  // 自動保存フォルダとバックアップフォルダ
  var iniItem = [ "AutoSaveEnabled", "AutoSaveToFolder", "AutoSaveFolder", 
                  "BackupSaveToFolder", "BackupFolder" ];
  var iniValue = GetIniOption( iniItem );
  var autoSaveFolder = iniValue[2];
  var backupFolder = iniValue[4];
  var autoSaveGrayFlags = Fso.FolderExists( autoSaveFolder )
                        ? 0 : meMenuGrayed;
  var backupGrayFlags = Fso.FolderExists( backupFolder )
                      ? 0 : meMenuGrayed;
  var autoSaveBackup = ( autoSaveGrayFlags == 0 || backupGrayFlags == 0 )
                     ? true : false;

  // ポップアップメニュー項目
  var m = CreatePopupMenu();
  var sm1 = CreatePopupMenu();
  var sm2 = CreatePopupMenu();

  // 「無題」ドキュメントでは読み直しメニューを表示しない
  if ( path ) {
    m.Add( "", 0, meMenuSeparator );
    m.Add( "書き換え禁止 ON/OFF (&Y)", 2, rCheckFlags + aGrayFlags1 );
    m.Add( "読み取り専用属性 ON/OFF (&W)", 5, aCheckFlags );
    m.Add( "閉じて開きなおす (&O)", 1 );
    m.Add( "プロパティ (&R)", 8 );

    if ( reloadMenuEnable ) {
      m.Add( "", 0, meMenuSeparator );
      m.AddPopup( "読みなおし サブメニュー (&L)", sm1 );
      {
        sm1.Add( "  書き換え禁止にする (&Y)", 3, rGrayFlags1 || aGrayFlags1 );
        sm1.Add( "  書き換え禁止を解除 (&W)", 4, rGrayFlags2 + aGrayFlags1 );
        sm1.Add( "", 0, meMenuSeparator );
        sm1.Add( "  読み取り専用属性にして開きなおす (&R)", 6, aGrayFlags1 );
        sm1.Add( "  読み取り専用属性を解除して開きなおす (&O)", 7, aGrayFlags2 );
        sm1.Add( "", 0, meMenuSeparator );
        // 「さいごに閉じたファイル」
        if ( numLatestClosed ) {
          LatestClosedFileMenu( sm1, 300 );
        }
        if ( autoSaveBackup ) {
          sm1.Add( "", 0, meMenuSeparator );
          sm1.Add( "自動保存フォルダを開く (&A)", 250, autoSaveGrayFlags );
          sm1.Add( "バックアップフォルダを開く (&B)", 251, backupGrayFlags );
        }
        sm1.Add( "", 0, meMenuSeparator );
        sm1.Add( "「読み直し」マクロの JS ファイルを開く (&J)", 9 );
        sm1.Add( "", 0, meMenuSeparator );
        sm1.Add( "キャンセル & ", 0 );	// Esc キーまたは Space キーでキャンセル可
      }
    }
  }

  if ( viewModeMenuEnable ) {
    m.Add( "", 0, meMenuSeparator );
    m.AddPopup( "編集モード サブメニュー (&M)", sm2 );
    {
      sm2.Add( "現在の編集モードのプロパティ (&P)...", 100 );
      sm2.Add( "", 0, meMenuSeparator );

      /* 以下、追加/削除したものがあれば任意で変更すること。並べ替え可 */
      // ▼ デフォルトの編集モード ▼
      sm2.Add( "&Bat", 101, ModeCheck( "Bat" ) );
      sm2.Add( "C&#", 102, ModeCheck( "C#" ) );
      sm2.Add( "C&++", 103, ModeCheck( "C++" ) );
      sm2.Add( "ColdFusion", 104, ModeCheck( "ColdFusion" ) );
      sm2.Add( "&CSS", 105, ModeCheck( "CSS" ) );
      sm2.Add( "&Delphi", 106, ModeCheck( "Delphi" ) );
      sm2.Add( "HSP", 107, ModeCheck( "HSP" ) );
      sm2.Add( "&HTML", 108, ModeCheck( "HTML" ) );
      sm2.Add( "&INI", 109, ModeCheck( "INI" ) );
      sm2.Add( "J&ava", 110, ModeCheck( "Java" ) );
      sm2.Add( "&JavaScript", 111, ModeCheck( "JavaScript" ) );
      sm2.Add( "JSP", 112, ModeCheck( "JSP" ) );
      sm2.Add( "Per&l", 113, ModeCheck( "Perl" ) );
      sm2.Add( "P&erlScript", 114, ModeCheck( "PerlScript" ) );
      sm2.Add( "&PHP", 115, ModeCheck( "PHP" ) );
      sm2.Add( "P&owerShell", 116, ModeCheck( "PowerShell" ) );
      sm2.Add( "P&ython", 117, ModeCheck( "Python" ) );
      sm2.Add( "RHT&ML", 118, ModeCheck( "RHTML" ) );
      sm2.Add( "&Ruby", 119, ModeCheck( "Ruby" ) );
      sm2.Add( "S&QL", 120, ModeCheck( "SQL" ) );
      sm2.Add( "TeX", 121, ModeCheck( "TeX" ) );
      sm2.Add( "&Text", 122, ModeCheck( "Text" ) );
      sm2.Add( "&UWSC", 123, ModeCheck( "UWSC" ) );
      sm2.Add( "VB&Script", 124, ModeCheck( "VBScript" ) );
      sm2.Add( "&VisualBasic", 124, ModeCheck( "VisualBasic" ) );
      sm2.Add( "&Widows Script", 125, ModeCheck( "Widows Script" ) );
      sm2.Add( "x86 Assembler", 126, ModeCheck( "x86 Assembler" ) );
      sm2.Add( "&XML", 127, ModeCheck( "XML" ) );
      // ▲ デフォルトの編集モード ▲
      sm2.Add( "", 0, meMenuSeparator );

      /* ▼ ココに追加の編集モードを列挙する ▼ */
      // 編集モード名は正確に、アクセラレータの「&」または「(&A)」以外は付加しないこと
//       sm2.Add( "Hoge (&G)", 128 );
//       sm2.Add( "Fuga (&F)", 129 );
//       sm2.Add( "Piyo", 130 );
//
//       sm2.Add( "&Mery_Macro_JS", 131, ModeCheck( "Mery_Macro_JS" ) );
//       sm2.Add( "Mery MS&Y", 132, ModeCheck( "Mery MSY" ) );
//       sm2.Add( "&JaneStyle (正規表現用)", 134, ModeCheck( "JaneStyle (正規表現用)" ) );
      /* ▲ ココに追加の編集モードを列挙する ▲ */

      sm2.Add( "", 0, meMenuSeparator );
      sm2.Add( "編集モードの設定 (&C)...", 200 );
      sm2.Add( "", 0, meMenuSeparator );
      sm2.Add( "キャンセル & ", 0 );	// Esc キーまたは Space キーでキャンセル可
    }
  }

  // 「無題」ドキュメントではエンコードメニューを表示しない
  if ( document.FullName ) {
    // 2068 からの ID は ExecuteCommandByID() の定数
    m.Add( "", 0, meMenuSeparator );
    m.Add( "", 0, meMenuSeparator );
    m.Add( "自動選択 (&A)", 2068 );
    m.Add( "", 0, meMenuSeparator );
    m.Add( "UTF-1&6LE", 2069, utf16le );
    m.Add( "UTF-16&BE", 2070, utf16be );
    m.Add( "UTF-&8", 2071, utf8 );
    m.Add( "UTF-&7", 2072, EncCheck( meEncodingUTF7 ) );
    m.Add( "", 0, meMenuSeparator );
    m.Add( "日本語 (シフト JI&S)", 2083, EncCheck( meEncodingShiftJIS ) );

    if ( variousLanguageEnable ) {
      m.Add( "日本語 (&JIS)", 2082, EncCheck( meEncodingJIS ) );
      m.Add( "日本語 (&EUC)", 2081, EncCheck( meEncodingEUC ) );
      m.Add( "", 0, meMenuSeparator );
      m.Add( "西ヨーロッパ言語", 2088, EncCheck( meEncodingWesternEuropean ) );
      m.Add( "中央ヨーロッパ言語", 2075, EncCheck( meEncodingCentralEuropean ) );
      m.Add( "キリル言語", 2078, EncCheck( meEncodingCyrillic ) );
      m.Add( "バルト言語", 2074, EncCheck( meEncodingBaltic ) );
      m.Add( "ギリシャ語", 2079, EncCheck( meEncodingGreek ) );
      m.Add( "ヘブライ語", 2080, EncCheck( meEncodingHebrew ) );
      m.Add( "トルコ語", 2086, EncCheck( meEncodingTurkish ) );
      m.Add( "アラビア語", 2073, EncCheck( meEncodingArabic ) );
      m.Add( "タイ語", 2085, EncCheck( meEncodingThai ) );
      m.Add( "ベトナム語", 2087, EncCheck( meEncodingVietnamese ) );
      m.Add( "簡体中国語 (GB2312)", 2076, EncCheck( meEncodingChineseSimplified ) );
      m.Add( "繁体中国語 (Big5)", 2077, EncCheck( meEncodingChineseTraditional ) );
      m.Add( "韓国語", 2084, EncCheck( meEncodingKorean ) );
    }
  }

  if ( ! path && reloadMenuEnable ) {
    // 「さいごに閉じたファイル」
    if ( numLatestClosed ) {
      LatestClosedFileMenu( m, 300 );
    }
    m.Add( "", 0, meMenuSeparator );
    m.Add( "「読み直し」マクロの JS ファイルを開く (&J)", 9 );
  }
  m.Add( "", 0, meMenuSeparator );
  m.Add( "キャンセル & ", 0 );	// Esc キーまたは Space キーでキャンセル可

  Status = " 「読みなおし」 マクロ  [ "
         + ( ( new Date() - start ) /1000 ).toFixed( 3 ).replace( /\./, ". " ) +" 秒 ]";

  // ポップアップメニューを表示
  var r = m.Track( mePosMouse = 1 );

  /**
   * 動作コードを変更 (2019/04/08)
   * ポップアップメニューを表示するまでの準備段階で
   * 変数の準備や属性のチェックは済ませてあるので
   * 各コマンドを簡略化した。
   */
  switch ( r ) {
    case 0:
      break;

    case 1:	// ファイルを閉じて開きなおす
      d.Close();
      ReopenFile( path );
      break;

    case 2:	// 書き換え禁止フラグ ON/OFF を変更する
    case 3:	// 書き換え禁止にする
    case 4:	// 書き換え禁止を解除
      d.ReadOnly = ! d.ReadOnly;
      break;

    case 5:	// 読み取り専用属性 ON/OFF を変更して開き直す
    case 6:	// 読み取り専用属性に変更して開き直す
    case 7:	// 読み取り専用属性を解除して開き直す
      // d.Save();	// コメントアウトすると未保存で閉じる前に確認ダイアログ
      d.Close();
      f.Attributes = ! f.Attributes;
      ReopenFile( path );
      break;

    case 8:	// ファイルのプロパティを開く
      var fileName = editor.ActiveDocument.Name;
      var shell = new ActiveXObject( "Shell.Application" );
      shell.NameSpace( path.slice( 0, - fileName.length ) )
           .ParseName( fileName )
           .InvokeVerb( "プロパティ(&R)" );
      break;

    case 9:	// このマクロの JS ファイルを開く
      OpenJumpJS();
      break;

    case 100:	// 現在の編集モードのプロパティ...
      WshShell.SendKeys( "%P" );
      editor.ExecuteCommandByID( MEID_VIEW_MODE_CUSTOMIZE = 2144 );
      break;

    case 200:	// 編集モードの設定...
      editor.ExecuteCommandByID( MEID_VIEW_MODE_CUSTOMIZE = 2144 );
      break;

    case 250:	// 自動保存フォルダ
    case 251:	// バックアップフォルダ
      var folder = ( r == 250 ) ? autoSaveFolder : backupFolder;
      WshShell.Run( "\"" + folder + "\"" );
      break;

    default:
      if ( r >= 300 && r < 400 ) {	// さいごに閉じたファイル
        ReopenFile( latestClosedFile[ r - 300 ] );
        break;
      }
      else if ( r > 2000 ) {	// エンコード指定で読みなおす
        editor.ExecuteCommandByID( r );
      }
      else {	// 編集モードを変更
        var label = m.GetText( r ).replace( /[ ]*\(&.\)[ ]*|&/g , "" );
        d.Mode = label;
      }
      break;
  }
}


/**
 * 関数 ReopenFile ( strPath )
 * 「開きなおす」
 */
function ReopenFile ( strPath ) {
  if ( editor.ActiveDocument.FullName || editor.ActiveDocument.Text ) {
    editor.NewFile();
  }
  editor.OpenFile( strPath );
}

/**
 * 関数 OpenJumpJS()
 * このマクロを開いて設定項目の行にジャンプする
 */
function OpenJumpJS() {
  var eCount = editors.Count;
  var isOpen = false,  ee ,  dd;
  OuterLoop:
  for ( var j = 0; j < eCount; j ++ ) {
    var dCount = editors.Item( j ).documents.Count;
    for ( var i = 0; i < dCount; i ++ ) {
      if ( editors.Item( j ).documents.Item( i ).FullName == ScriptFullName ) {
        isOpen = true;
        ee = j;
        dd = i;
        break OuterLoop;
      }
    }
  }
  if ( isOpen ) {
    editors.Item( ee ).documents.Item( dd ).Activate();
  }
  else {
    editor.NewFile();
    ee = ( editors.Count == 1 ) ? 0 : eCount;
    editors.Item( ee ).OpenFile( ScriptFullName, 2071 );
  }
  var js = editors.Item( ee ).ActiveDocument;
  var settingPos = js.Text.indexOf( "▼ 設定項目 ▼" );
  js.selection.SetActivePos( settingPos );
  js.selection.StartOfLine( false, mePosLogical );
  var yy = js.selection.GetActivePointY( mePosLogical );
  ScrollY = yy;
  // 狙った行にスクロールしない場合は、強引にやる
  // var WshShell = new ActiveXObject( "WScript.Shell" );
  // WshShell.Run( '"' + editor.FullName + '" /l ' + yy
  //            + ' "' + ScriptFullName + '"' );
}

/**
 * 関数 LatestClosedFile( num )
 * Mery.his を読み込んで「さいごに閉じたファイル」のフルパスを返す
 * 
 * 引数: 「さいごに閉じたファイル」の件数を指定
 *      1 を指定した場合または省略した場合は、1件のフルパスを文字列で返す
 *      2 以上の数値を指定した場合は、配列で返す
 *       
 * ※ Mery の「オプション」設定で「カーソル位置とブックマークを保存する」
 *   が無効(Mery.his がない)なら "" を返す
 */
function LatestClosedFile( num ) {
  var num = num ? num : 1;
  var closedFile = "";
  var closedFileArray = [];
  // var Fso = new ActiveXObject( "Scripting.FileSystemObject" );
  var meryhis = editor.FullName.replace( /\.exe$/i , ".his" );
  if ( ! Fso.FileExists( meryhis ) ) {
    // var WshShell = new ActiveXObject( "WScript.Shell" );
    meryhis = WshShell.ExpandEnvironmentStrings( "%APPDATA%" )
            + "\\Mery\\Mery.his";
  }
  if ( ! Fso.FileExists( meryhis ) ) {
    return closedFile;
  }
  var Adodb = new ActiveXObject( "ADODB.Stream" );
  var adTypeText = 2,  adReadAll = -1;
  Adodb.Type = adTypeText;
  Adodb.Charset = "UTF-8";
  Adodb.Open();
  Adodb.LoadFromFile( meryhis );
  var hisText = Adodb.ReadText( adReadAll ).replace( /\r\n?/g, "\n" );
  Adodb.Close();
  var hisArray = hisText.match( /^\[.+\]$/gm );
  if ( ! hisArray ) {
    return closedFile;
  }
  hisArray.reverse();
  var hCount = hisArray.length;
  var eCount = Editors.Count;
  var dCount, cCount, file, hit;
  outerLoop:
  for ( var i = 0; i < hCount; i ++ ) {
    closedFile = hisArray[i].replace( /^\[|\]$/g, "" );
    for ( var ee = 0; ee < eCount; ee ++ ) {
      dCount = Editors.Item( ee ).Documents.Count;
      for ( var dd = 0, hit = 0; dd < dCount; dd ++ ) {
        file = Editors.Item( ee ).Documents.Item( dd ).FullName;
        if ( closedFile == file ) {
          hit ++;
        }
      }
      cCount = closedFileArray.length;
      if ( ! hit && cCount < num && Fso.FileExists( closedFile ) ) {
        closedFileArray.push( closedFile );
      }
      if ( cCount == num ) {
        break outerLoop;
      }
    }
  }
  return num == 1 ? ( closedFileArray[0] || "" ) : closedFileArray;
}

/**
 * 関数 LatestClosedFileMenu( objMenu, num )
 * 「さいごに閉じたファイル」のメニューを返す
 * 
 * 第1引数: ポップアップメニューオブジェクト
 * 第2引数: ポップアップメニュー ID の開始値
 */
function LatestClosedFileMenu( objMenu, num ) {
  if ( latestClosedFile.length ) {
    objMenu.Add( "", 0, meMenuSeparator );
    objMenu.Add( "▼ さいごに閉じたファイル ▼", 0, meMenuGrayed );
    for ( var i = 0; i < latestClosedFile.length; i ++ ) {
      objMenu.Add( "&" + ( i + 1 ) + ":  "
                 + latestClosedFile[i].replace( /(?:.+\\)*([^\\]+\\)([^\\]+)$/, "$1 $2" )
                 , i + num );
    }
  }
}

/**
 * 組み込み関数 GetIniOption( array )
 * 引数で指定した INI オプション項目の値を返す
 */
function GetIniOption( array ) {
  // var Fso = new ActiveXObject( "Scripting.FileSystemObject" );
  var iniPath = editor.FullName.replace( /\.exe$/i , ".ini" );
  if ( ! Fso.FileExists( iniPath ) ) {
    // var WshShell = new ActiveXObject( "WScript.Shell" );
    iniPath = WshShell.ExpandEnvironmentStrings( "%APPDATA%\\Mery\\Mery.ini" );
  }
  var Adodb = new ActiveXObject( "ADODB.Stream" );
  var adTypeText = 2,  adReadAll = -1;
  Adodb.Type = adTypeText,  Adodb.Charset = "UTF-8";
  Adodb.Open();
  Adodb.LoadFromFile( iniPath );
  var iniText = Adodb.ReadText( adReadAll ).replace( /\r\n?/g, "\n" );
  Adodb.Close();
  for ( var i = 0, len = array.length, dist = []; i < len; i ++ ) {
    var value = iniText.match( new RegExp( "^" + array[i] + "=.*$" , "igm" ) )[0]
                       .replace( /^[^=]+=(.*)$/ , "$1" );
    if ( value.match( /^[\-0-9]+$/ ) ) {
      value = Number( value );
    }
    dist.push( value );
  }
  return dist;
}
スポンサーリンク