タブブラウザ Sleipnir オンラインデータベース
A5-B9-A5-AF-A5-EA-A5-D7-A5-C8-A4-CE-B3-AB-C8-AF-20-Tips.html

  [ トップ | ヘルプ ]

スクリプトの開発 Tips †

Sleipnirスクリプト を開発する上での Tips です。
役に立つ関数や技法を集めています。
まだまだ未完成なので、どんどん項目を追加してください。


↓Sleipnirスクリプト開発に関する質問や情報交換はこちら
Sleipnir Script BBS



文字列を Shift_JIS や UTF-8 でエンコードする。 †

↓JScript のみですがこちらで関数のライブラリが公開されています。
ヌルコムアーカイブス・デジタル制作室

Webからファイルをダウンロードする †

[JScript]

[VBScript]

sSource = "http://www.roy.hi-ho.ne.jp/mutaguchi/image/wshlabs.png" 'ダウンロード元
sDest = "test.png" 'コピー先 
Const adTypeBinary = 1
Const adSaveCreateNotExist = 1
Const adSaveCreateOverWrite = 2
Set oHTTP = WScript.CreateObject("Microsoft.XMLHTTP")
oHTTP.Open "GET", sSource, False
oHTTP.Send
Set Stream = WScript.CreateObject("Adodb.Stream")
Stream.Type = adTypeBinary
Stream.Open
Stream.Write oHTTP.responseBody
Stream.Savetofile sDest, adSaveCreateOverWrite

Webからテキストファイルを取得し、文字列に代入する †

[JScript]

[VBScript]

Dim s
s = GetInternetTextFile("http://www.yahoo.co.jp","UTF-8")
Msgbox s
'===== インターネットファイル取得処理 =====
Private Function GetInternetTextFile(URL, sCode)
    Dim ado
    Set ado = CreateObject("ADODB.Stream")
    Call ado.open
    ado.Type = 1	'=== adTypeBinary
    Call ado.Write(GetHTMLSource(URL))
    ado.Position = 0
    ado.Type = 2	'=== adTypeText
    ado.Charset = sCode
    GetInternetTextFile = ado.ReadText
    Call ado.Close
    Set ado = Nothing
   End Function
'===== HTMLソース取得処理 =====
Private Function GetHTMLSource(URL)
    Dim xHTTP
    Set xHTTP = CreateObject("MSXML2.ServerXMLHTTP")
    Call xHTTP.open("GET", URL, False)
    Call xHTTP.send
    GetHTMLSource = xHTTP.responseBody
    Set xHTTP = Nothing
End Function

クリップボードの文字列を読み込む †

InternetExplorerオブジェクトを使います。 (ただし、インターネットゾーンのセキュリティ設定によっては動作しません)

[JScript]

[VBScript]

Set Ie = WScript.CreateObject("InternetExplorer.Application")
Ie.Navigate "about:blank"
Do While Ie.Busy
	Wscript.Sleep 10
Loop
'クリップボードの文字列を取得。
sClipBoard = Ie.Document.parentWindow.clipboardData.getData("text")  
Ie.Quit
MsgBox sClipBoard

クリップボードに文字列を書き込む †

InternetExplorerオブジェクトを使います。 (ただし、インターネットゾーンのセキュリティ設定によっては動作しません)

[JScript]

[VBScript]

Set Ie = WScript.CreateObject("InternetExplorer.Application")
Ie.Navigate "about:blank"
Do While Ie.Busy
	Wscript.Sleep 10
Loop
'クリップボードに「あいうえお」という文字列を書き込む。
Ie.Document.parentWindow.clipboardData.setData "text","あいうえお"
'以下のようにすると、クリップボードの中身を消去できます。
'Ie.Document.parentWindow.clipboardData.clearData "text"
Ie.Quit

ウィンドウのブラウザエンジンを判別する。 †

[JScript]

pnir = new ActiveXObject("Sleipnir.API");
id = pnir.GetDocumentID(pnir.ActiveIndex);
document = pnir.GetDocumentObject(id);

if (typeof(document.URL) == 'unknown'){
	//true なら Gecko。
}
else {
	//false なら IEエンジン。
}

[VBScript]

JScript で VBScript の InputBox() 関数を使う。 †

Windows Script Control を使用するので、
Windous 98/ME/NT では別途インストールする必要があります。
(Windows2000/XPではデフォルトで入っているので即使用可)

[JScript]

//pnir = new ActiveXObject("Sleipnir.API");

/***** JScript で VBScript の InputBox() 関数を使う関数 *****/
function InputBox(){
	var scVB, VBarg, farglen, fvartype, reword, i;
	farglen = Math.min(arguments.length, 7);
	try {
		scVB = new ActiveXObject("ScriptControl");
	}
	catch(e) {
		reword = pnir.InputBox(arguments[0], ((farglen > 2) ? arguments[2] : ''));
		return((pnir.Result == 1) ? reword : undefined);
	}
	VBarg = '';
	for (i = 0; i < farglen; i++){
		fvartype = typeof(arguments[i]);
		if (i > 0){VBarg += ', ';}
		if (fvartype == 'number' || fvartype == 'object' && arguments[i] instanceof Number){
			VBarg += arguments[i].toString();
		}
		else if (fvartype != 'undefined'){
			VBarg += '\"' + arguments[i].toString().replace(/[\"]/g, '\"\"') + '\"';
		}
		else if (i < 3 || i == 5){
			VBarg += '\"\"';
		}
	}
	VBarg = VBarg.replace(/[\r\n]+/g, '\" \& $&\"').replace(/[\r]/g, 'Chr\(13\) \& ').replace(/[\n]/g, 'Chr\(10\) \& ');
	scVB.Language = 'VBScript';
	return(scVB.Eval('InputBox\(' + VBarg + '\)'));
}

【説明】
「"」は「""」に変換して渡しています。「\r」や「\n」も VBScript の文法に合わせて変換します。
なので、VBScript を意識することなく JScript の関数として使用することができます。
InputBox 関数の詳細な仕様については以下のページを参照してください。

VBScript InputBox 関数(MSDN)

ただし、上記MSDNページの資料には 『[キャンセル] をクリックすると、InputBox 関数は長さ 0 の文字列 ("") を返します。』と書かれていますが、
実際は「キャンセル」が押された時は undefined を返します。
「キャンセル」が押されたか判別するには

var strWord = InputBox('文字を入力してね', 'ダイアログのタイトル', 'デフォルトの文字列');
if (typeof(strWord) != 'undefined'){
	//「OK」が押された時の処理を記述する。
}
else {
	//「キャンセル」が押された時の処理を記述する。
}

とすると良いでしょう。

また、Windows Script Controlがインストールされていない環境では Sleipnir.API の InputBox() メソッドが代わりに呼び出されるようになっており、VBScript の InputBox() 関数と同様に
「キャンセル」が押された時は undefined を返すようになっています。
このソースでは Sleipnir.API を pnir という変数で定義(8・9行目の2箇所)してあるので、この部分は各自書き換えて使ってください。

UserAction スクリプトを wscript.exe で実行する &dagger;

sleipnir.CreateObject("WScript.Shell").Run で自らを wscript.exe で実行すれば
Sleep() を含めた WScript オブジェクトが全て使える。
ただしこの場合、UserAction スクリプト本来の処理速度より遅くなるので注意。

if (typeof(sleipnir) == 'object'){
	sleipnir.CreateObject("WScript.Shell").Run('\"' + sleipnir.ScriptFullName + '\"');
} else {
	//TODO コードをここに記述してください。
}

Last-modified: 2020-12-09 (水) 10:43:14 (2d)