Windowsデフォルトの機能だけで、ファイルの読み書きを行いたい場合にはhtaやwshを使う必要があります。一般的に知られているのはFileSystemObjectというActiveXObjectを生成して、そのオブジェクトを通してファイルの読み書きを行うのですが、これが自由度が少なく、Shift_JISでしか扱ってくれません。 ADODB.Streamなら他のエンコーディングも扱える いろいろググって見るとADODB.Streamというのが使えるらしい。じゃあ簡単だと思いやっつけで書いてみたら書き出せた。 と思っていたらBOMに悩まされる なんかエディタの挙動が違うなぁと思っていたら、なんかUTF-8(BOM)とか書いてあります。何じゃこれってことで調べてみるとUTF-8の場合、ファイルの最初に3バイトにByte Order Markというものがついていて、それが悪さをしているらしい。
アプリっぽくなる 以前HTAコネタで起動時に位置とサイズを設定するTIPS(てほどでもないが)を紹介したが、それにちょっとひねりを加えて、自動的に位置とサイズを記憶、次回自動時にそれを再現するサンプルを書いてみる。なんとなく、デスクトップアプリっぽいしょ? なお、サンプルでは、矩形情報の読み込み・保存にjson.orgのJSONライブラリを利用しているが、単純なシリアライズ・デシリアライズなので自前でメソッドを用意できるなら特にjson.jsは必要ない。 処理のタイミング まず、前のエントリでも書いたが、ウィンドウの位置とサイズを設定するタイミングは、HTA:APPLICATIONタグの出現前にしないと気になるちらつきが発生する。なので、json.jsをロード(または同等の機能の定義・ロード)してからhta:applicationが出現するまでに 保存したウィンドウ矩形情報のロード ロード
HTAに足りないものより WSHはドラッグアンドドロップしたファイルを引数として取り出せるんです。(WScript.Arguments)それなのにHTAでできないのは寂しいなと、それだけ。 とりあえず、そういうレジストリを登録しておけば、ドラッグアンドドロップできるようになります。 REGEDIT4 [HKEY_CLASSES_ROOT\htafile\ShellEx\DropHandler] @="{60254CA5-953B-11CF-8C96-00AA00B8708C}" こんなやつ。 で、ファイルとかをドラッグアンドドロップしてやると、バックアップをとって終了するという、テキトーなスクリプトだとこんな感じに: Option Explicit Dim oRegEx, fso Set fso = CreateObject("Scripting.FileSystemObject") Se
WSHスクリプトからHTAを操作する。を大いに参考。 でもURLの方法だとIE7でIEがShellから切り離された(?不確実)ので、Vistaとかで実行できない。また、VBScriptはよく分からんのでよく使うJSCRIPTで再実装。 ↓適当なファイル名(sample.js)で保存して実行してみて。メッセージが出れば成功。 function createHtaWindow(){ var jscommand = "javascript:"; jscommand += "new ActiveXObject('InternetExplorer.Application');"; jscommand += "new ActiveXObject('Shell.Application').Windows().item(0).PutProperty('HtaWindowObject',window);";
先生:今日は 最後の クラブ活動だ 前回はウィンドウなしの アプリケーションを作った 今回はウインドウ付きの アプリケーションを作るぞ 麗:そんなことが できるんですか? 先生:ああ 『HTA』を使えば バッチリできる それで 『HTA』なんだが HTMLファイルの拡張子を 『.hta』にすれば完成だ .html ↓ .hta 3人:… 3人:はっ? 遊:いくらなんでも それは手抜き過ぎじゃ! 先生:ダブルクリック してみろ (ウィンドウ表示) 遊:あれ? ブラウザではなく ウインドウが 立ち上がった! 先生:どうだ 物すごく楽だろう? 遊:おみそれ しました 先生:前回の『cmnFunc.js』を 改造すれば ファイル操作も行える 改造箇所は 2ヶ所だ // 1ヶ所目 this.createObject = function(name) { try { return WScript.Cr
Runメソッドの書式 http://www.happy2-island.com/vbs/cafe02/capter00110.shtml Run メソッド http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/script56/html/wsmthrun.asp run("アプリケーション名")だと新たなウィンドウを開いてもセキュリティーの警告は出なくなった。 問題はパラメータを開いたウィンドウに渡せるかどうか、また、戻り値を受け取ることができるかどうか。 散々検討してみて調べもしたが知識不足もありうまい方法はみつからなかった。 最後の手段は外部ファイルにパラメータを書き出して、受け取るときはこのファイルからのやりとりをする、 というようなことを考えたのだが、どうもしっくりこない。 そんなおり新たな代替案が
FileSystemObject。よく使うんだけど、メソッド名とかがいつも思い出せなくなるので、ここにまとめて書いておく。 FileSystemObjectって何? Windowsでファイルシステムを簡単に扱えるようにするためのコンポーネント。最近のWindowsなら最初から標準で入ってる。 VB6やVBA、あとJScript/VBScript(WSHやASP)でよく使う。JScript/VBScriptでファイルシステムを扱いたい場合、通常はこれを使うしかないと思う。VB6は標準でファイルシステムを扱う関数とかがあるけど、使いにくいので(Openとか使いにくいよね?)FileSystemObjectを使った方がいい。VC++は知らない。.NETには標準で便利なクラスがあるのでFileSystemObjectは使わない。 インスタンス化 まずはインスタンス化しないと使えるようにならない。
2008-06-03 開発リソース/Unix/Unix Command-Line Kung Fuまとめ RecentDeleted 2008-05-11 開発リソース/PowerShell/SQLServer2005のスキーマをSMOでスクリプト化する 2008-05-10 NerdTV翻訳/10-Dan Bricklin 2008-05-02 開発リソース/Windows/Lhaplusのコマンドライン引数 2008-04-19 開発リソース/.Net/ASP.Net DataGridにユーザーコントロールを配置してデータバインドする手法 開発リソース/ASP/スクリプトが動作しているサーバのマシン名を取得する 2008-01-30 開発リソース/Unix/システムコールのエラーコードの意味 2007-12-14 開発リソース/perl/Base64文字列をファイルにデコードする 200
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く