execScript の利用

  目次





  ローカルファイルを実行



C:\TEMP\vbs.txt
  
REM *********************************************************
REM execScript のテスト
REM *********************************************************

Dim Shell,objFolder

Do
	if IsEmpty( Shell ) then
		Set Shell = CreateObject( "Shell.Application" )
		alert( "Shell.Application を作成しました" )
	end if

	Set objFolder = Shell.BrowseForFolder( 0, "フォルダ選択", 0, 0 )
	if not objFolder is nothing then
		alert( objFolder.Items().Item().Path )
		Set objFolder = nothing
	end if

Loop Until True
  

● コメントには REM を使用する
● こちら側で定義された変数もグローバル変数となるが、2度目の実行で二重定義にはならない
● 途中終了可能なように、Do 〜 Loop Until True を使用する

execVbs.htm ( 存在するサイトで ActiveX の実行が無条件許可されている必要があります )
  
<SCRIPT language=VBScript>

Dim Fs

'***********************************************************
' execScript のテスト
'***********************************************************
function ExecVbs()

	if IsEmpty( Fs ) then
		Set Fs = CreateObject( "Scripting.FileSystemObject" )
	end if

	Dim Fp,strVbs

	Set Fp = Fs.OpenTextFile( "C:\TEMP\vbs.txt", 1 )
	strVbs = Fp.ReadAll
	Call Fp.Close()

	Call window.execScript( strVbs, "VBScript" )

	alert( TypeName(Shell) & "|" & TypeName(objFolder) )

end function

</SCRIPT>

<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; CHARSET=Shift_JIS">
</HEAD>
<BODY>
<INPUT
	type=button
	value="実行"
	onClick='Call ExecVbs()'
>
</BODY>
</HTML>
  



  Web 上のファイルを実行

vbs.txt に仮想パスを割り当てて、Msxml2.XMLHTTP を使用してコードを取得します
( サーバーの場合は Msxml2.ServerXMLHTTP )

responseText の場合は Shift_JIS が文字化けするので、responseBody でバイト配列(バイナリ)として
取得し、簡単な変換アルゴリズムで変換します。但し、以下の例では Shift_JIS を前提としているので、それ以外
の キャラクタセットの場合は ADODB.Stream でShift_JIS に変換して から使います

  
<SCRIPT language=VBScript>

Dim Http

'***********************************************************
' execScript のテスト
'***********************************************************
function ExecVbs()

	if IsEmpty( Http ) then
		Set Http = CreateObject( "MSXML2.XMLHTTP" )
	end if

	Dim Fp,strVbs,strBin

	Call Http.Open("GET", "http://localhost/tools/vbs.txt", False )
	Http.Send

	strBin = Http.responseBody

	' バイナリ -> 内部コード
	For i = 1 To LenB( strBin )
		c1 = AscB(MidB(strBin, i, 1))
		if &H81 <= c1 and c1 <= &H9f or &He0 <= c1 and c1 <= &Hfc then
			i = i + 1
			c2 = AscB(MidB(strBin, i, 1))
			c1 = c1 * 16 * 16 + c2
		end if
		strVbs = strVbs & Chr(c1)
	Next

	Call window.execScript( strVbs, "VBScript" )

	alert( TypeName(Shell) & "|" & TypeName(objFolder) )

end function

</SCRIPT>

<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; CHARSET=Shift_JIS">
</HEAD>
<BODY>
<INPUT
	type=button
	value="実行"
	onClick='Call ExecVbs()'
>
</BODY>
</HTML>
  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加




SQLの窓  天気  IT用語辞典
Yahoo!ニュース  マルチ辞書
PHP マニュアル  Google URL短縮 


フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ