LoginSignup
8
9

More than 3 years have passed since last update.

IEでActiveXを実行

Last updated at Posted at 2015-04-02

事前設定

スクリプトを実行しても安全だとマークされていないActiveXコントロールの初期化とスクリプトの実行

有効にする

if (navigator.appName == "Microsoft Internet Explorer") {
    //
}

WScript.Shell

レジストリ

<script>
var wScriptShell = new ActiveXObject("WScript.Shell");
var key = "HKCU\\Software\\Test\\data1"
try {
    // レジストリを取得する
    document.write(wScriptShell.RegRead(key));

    // 書き込み
    // 32bit符号なし整数値
    wScriptShell.RegWrite(key, 1, "REG_DWORD");
    // 改行を含まない 固定長の文字列
    wScriptShell.RegWrite(key, "にほんごとか", "REG_SZ");

    // レジストリを削除する
    wScriptShell.RegDelete(key);

} catch(e) {
    // 出力例) 
    //  Error: レジストリ キー "HKCU\\Software\\Test\\" のルートが無効です。
    //  Error: レジストリ キー "HKCU\\Software\\Test\\data1" を開いて読み取ることができません。
    alert(e);
}
</script>

data1.png
data2.png

メモ帳

index.html
<script>
var wScriptShell = new ActiveXObject("WScript.Shell");
var wshSysEnv = wScriptShell.Exec("notepad.exe");
</script>

ページにアクセスするとActiveXによりメモ帳が開かれる。

ローカルのIPアドレスを取得 (ipconfig) DOS窓表示

参考: JavaScriptでのIPアドレスを取得 - JavaScript~PG CENTER(プログラムセンター)~

<script>
var wScriptShell = new ActiveXObject("WScript.Shell");
// ローカルIPアドレスを取得
var wshSysEnv = wScriptShell.Exec("ipconfig.exe");
// 標準出力からIPを抽出
while ( !wshSysEnv.StdOut.AtEndOfStream ) {
    strLine = wshSysEnv.StdOut.ReadLine();
    // WinXP
    iIP = strLine.indexOf("IP Address");
    // 取得失敗は-1になる
    if ( iIP < 0 ) {
        // Win10
        iIP = strLine.indexOf("IPv4 アドレス");
    }
    // 取得成功の時
    if ( iIP >= 0 ) {
        iColon = strLine.indexOf( ":" );
        strAddress = strLine.substr( iColon + 2 );
        strAddress = strAddress.substr( 0, strAddress.length - 1 );
        // 結果
        alert(strAddress);
    }
}
</script>

DOS窓 非表示

<script>
var wsh = new ActiveXObject("WScript.Shell");
var tmpfile = '%temp%\\tmp.txt';
var command = "cmd /c ipconfig.exe > " + tmpfile;
// 0: 非表示
wsh.Run(command,0);
</script>

キー入力

<script>
var wScriptShell = new ActiveXObject("WScript.Shell");
// control と Esc同時押し
wScriptShell.SendKeys("^{ESC}")

フォルダ表示

var wsh = new ActiveXObject("WScript.shell");
var fileProtocolHandler = "rundll32.exe url.dll,FileProtocolHandler ";
var path = "C:\\";
wsh.run(fileProtocolHandler + path);

カレントディレクトリを指定

var wsh = new ActiveXObject("WScript.Shell");
wsh.CurrentDirectory = "C:\\aaa\\bbb"
wsh.Run("sample.vbs");

Scripting.FileSystemObject

ファイル操作

書き込み
var fso = new ActiveXObject("Scripting.FileSystemObject");
if (!fso.FolderExists("C:\\src")) {
    var fol = fso.CreateFolder("C:\\src");
}

var fil = fso.CreateTextFile("c:\\src\\output.txt");
fil.WriteLine("てすと");
fil.close();

document.write("C:\\src\\output.txt にファイルが作成されました。");
読み込み
var fso = new ActiveXObject("Scripting.FileSystemObject");

var filename = "c:\\src\\output.txt";

// 存在確認
if (! fso.FileExists(filename)) {
    return false;
}

var objFile = fso.GetFile(filename);

// ファイルサイズ
if (1000 < objFile.Size) {
    return false;
}
// 読み込み
var txt = fso.OpenTextFile(filename, 1, false, 0);
// 内容の取得
var content = txt.ReadAll();
txt.Close();

document.write(content);

%temp%のPATH

var fso = new ActiveXObject("Scripting.FileSystemObject");
// %temp%のフルパスを取得
var objFolder = fso.getSpecialFolder(2);
alert(objFolder.Path);

vbsのソースを記述し実行

// プログラムを生成
var fso = new ActiveXObject("Scripting.FileSystemObject");
var objFolder = fso.getSpecialFolder(2); // %temp%のフルパスを取得
var fil = fso.CreateTextFile(objFolder.Path + "\\a.vbs");
var src = 'WScript.sleep(1000) \n msgbox "あああ" ';
fil.WriteLine(src);
fil.close();

// プログラムを実行
var wsh = new ActiveXObject("WScript.Shell");
wsh.Run(objFolder.Path + "\\a.vbs");

WScript.Network

<script>
var objNetWork = new ActiveXObject("WScript.Network");
document.write("コンピュータ名" + objNetWork.ComputerName);
document.write("ユーザ名" + objNetWork.UserName);
</script>

GetObjectについて

GetObjectはIE9から利用できなくなった。


Excel.Application

Excel起動

var oXL = new ActiveXObject("Excel.Application");
oXL.Visible = true;

その他、ActiveXから外れるが雑記

IEのjavascriptで window.external

クライアント証明書が入っているか確認

8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9