![]() |
||
[ トップ
| ヘルプ
] |
スクリプトの開発 Tips †Sleipnirスクリプト を開発する上での Tips です。
文字列を 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 を使用するので、 [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 + '\)')); } 【説明】 ただし、上記MSDNページの資料には 『[キャンセル] をクリックすると、InputBox 関数は長さ 0 の文字列 ("") を返します。』と書かれていますが、 var strWord = InputBox('文字を入力してね', 'ダイアログのタイトル', 'デフォルトの文字列'); if (typeof(strWord) != 'undefined'){ //「OK」が押された時の処理を記述する。 } else { //「キャンセル」が押された時の処理を記述する。 } とすると良いでしょう。 また、Windows Script Controlがインストールされていない環境では Sleipnir.API の InputBox() メソッドが代わりに呼び出されるようになっており、VBScript の InputBox() 関数と同様に UserAction スクリプトを wscript.exe で実行する †sleipnir.CreateObject("WScript.Shell").Run で自らを wscript.exe で実行すれば if (typeof(sleipnir) == 'object'){ sleipnir.CreateObject("WScript.Shell").Run('\"' + sleipnir.ScriptFullName + '\"'); } else { //TODO コードをここに記述してください。 } |