プログラミング

JScriptで、InputBoxとMsgBoxを使う。

2010年7月19日

一つ前の記事で、「VBScriptのInputBoxは便利」と書いたが、改めてJScriptにはこれ相当の機能が無いことを思い出した。MsgBox相当は、WScript.Echo()である程度の代用が効くが、InputBoxに似た機能は無い。しかし、以前書いたように、ScriptControlを使えばVBScriptの関数をJScriptから呼び出すことができる。

以前書いたコードはInputBoxに特化したもので、しかも汎用性が無かった。汎用性を持たせたのが、次のスクリプト。

var VbsFunction=function(func){
	return function(){
		var args=Array();
		args[0]=func;
		for (var i=0;i<arguments.length;i++) args[i+1]=arguments[i];
		return VbsFunction.run.apply(null,args);
	};
}
VbsFunction.run=function(){
	var script="VbsFunction.sc.run('func"+(arguments.length-1)+"'";
	for (var i=0;i<arguments.length;i++) script+=",arguments["+i+"]";
	return eval(script+");");
}
VbsFunction.sc=WScript.CreateObject("MSScriptControl.ScriptControl");
VbsFunction.sc.language="vbscript";
for (var i=0;i<10;i++) {
	var script=" function func"+i+"(p0";
	for (var j=1;j<=i;j++) script+=",p"+j;
	script+=")\r\n  func"+i+'=eval(p0+"(';
	for (var j=1;j<=i;j++) {
		if (1<j) script+=",";
		script+="p"+j;
	}
	VbsFunction.sc.addcode(script+")\")\r\n end function\r\n");
}

var InputBox=VbsFunction("InputBox");
var MsgBox=VbsFunction("MsgBox");
(10/07/20 改定)
この20行ほどのコードで定義されたVbsFunction()を使えば、VBScriptのすべての関数を、JScriptから利用することができる。利用方法は、最後の2行を参照。InputBoxとMsgBoxの2つが使えるように、記述してある。

コメント

zukki- (2012年6月9日 19:00:25)


Warning: comments::cb1_tag_body(): Argument #1 ($m) must be passed by reference, value given in /home/u109394186/domains/rad51.net/public_html/jeans/jeans/libs/comments.php on line 51

Warning: comments::cb1_tag_body(): Argument #1 ($m) must be passed by reference, value given in /home/u109394186/domains/rad51.net/public_html/jeans/jeans/libs/comments.php on line 51

Warning: comments::cb1_tag_body(): Argument #1 ($m) must be passed by reference, value given in /home/u109394186/domains/rad51.net/public_html/jeans/jeans/libs/comments.php on line 51

Warning: comments::cb1_tag_body(): Argument #1 ($m) must be passed by reference, value given in /home/u109394186/domains/rad51.net/public_html/jeans/jeans/libs/comments.php on line 51
参考になりました。
var VbsFunction = function(){
  var mss = new ActiveXObject(`MSScriptControl.ScriptControl`);
  mss.Language = `VBScript`;
  str = arguments[0] + `(`;
  for(var i=1; i

コメント送信