「hmJS」でActiveXObject

  • 概要

    ここでは、hmJSでActiveXOject関連の使い方について触れています。

  • WScript.Echo(...) などの古い記述

    WScript.Echo(...)などは、JScript本体というよりも、WSHとして特別に追加されている関数ですので、
    hmJSでは直接に対応してはいません。
    しかし、「WScript.Echo」については、古いソースの記述で非常に頻出していたため、
    そのままの記述で利用したい、といったこともあるかもしれません。

    そういった場合には、自身でそのような定義をすればよいことでしょう。

    #JS = loaddll( hidemarudir + @"\hmJS.dll" );
    
    // WScript.Echo系を定義しておいて…
    #_ = dllfuncw( #JS, "DoString", R"JS(
      WScript = {
        'Echo' : function(obj)
        {
          hm.Macro.Var('$__tmp_string', obj.toString()); // 伝達
          hm.Macro.Eval( function() { /*
            message($__tmp_string);
          */ } );
          hm.Macro.Var('$__tmp_string', ""); // 消滅
        }
      };
    )JS"
    );
    
    
    // 使う…
    #_ = dllfuncw( #JS, "DoString", R"JS(
      WScript.Echo("あいう");
    )JS"
    );
    
    freedll( #JS );
    
  • ActiveXObject

    本来 JScriptのWSHやActiveXObjectなどの記述は、するべきではありません。
    (WSH自体が10年前から準廃止予定で、マイクロソフトは順次フェイドアウトさせています)

    しかし、既存のコードを可能な限り流用したい、
    といった要望は現実として存在します。

    先のWScript.Echoの実装とあわせて、以下のように、従来の.jsによるActiveXObjectの記述と同じ記述がそのまま利用可能です。

    
    #JS = loaddll( hidemarudir + @"\hmJS.dll" );
    
    #_ = dllfuncw( #JS, "DoString", R"JS(
    
    //  ボタンの種類
    var BTN_OK                 = 0;    // [OK]ボタン
    var BTN_OK_CANCL           = 1;    // [OK][キャンセル]ボタン
    var BTN_STOP_RETRI_DISRGRD = 2;    // [中止][再試行][無視]ボタン
    var BTN_YES_NO_CANCL       = 3;    // [はい][いいえ][キャンセル]ボタン
    var BTN_YES_NO             = 4;    // [はい][いいえ]ボタン
    var BTN_RETRI_CANCL        = 5;    // [再試行][キャンセル]ボタン
    
    //  アイコンの種類
    var ICON_STOP              = 16;   // [Stop]アイコン
    var ICON_QUESTN            = 32;   // [?]アイコン
    var ICON_EXCLA             = 48;   // [!]アイコン
    var ICON_I                 = 64;   // [i]アイコン
    
    //  押されたボタンごとの戻り値
    var BTNR_OK                =  1;   // [OK]ボタン押下時
    var BTNR_CANCL             =  2;   // [キャンセル]ボタン押下時
    var BTNR_STOP              =  3;   // [中止]ボタン押下時
    var BTNR_RETRI             =  4;   // [再試行]ボタン押下時
    var BTNR_DISRGRD           =  5;   // [無視]ボタン押下時
    var BTNR_YES               =  6;   // [はい]ボタン押下時
    var BTNR_NO                =  7;   // [いいえ]ボタン押下時
    var BTNR_NOT               = -1;   // どのボタンも押さなかったとき
    
    
    //  Windowsシェルへのアクセスを提供するオブジェクト
    var sh = new ActiveXObject( "WScript.Shell" );
    
    //  ポップアップウインドウを表示(10秒後に自動終了)
    var rtn = sh.Popup( "ボタンを押してください!", 10, "確認", (BTN_YES_NO_CANCL + ICON_QUESTN) );
    
    //  オブジェクトを解放
    sh = null;
    
    //  戻り値をデバッグ表示
    hm.debuginfo(rtn);
    
    )JS"
    );
    
    freedll( #JS );