WSH初心者のどらっちと申します。
あるフォルダ(C:¥work)にある5日以前に作ったファイルを、別の
フォルダ(C:¥back)へ毎週金曜日の午後7時にバックアップ(コピー)
するようなスクリプトはどのようになりますか?
サンプルということでぜひ教えていただきたいんですが。
宜しくお願いします。
先日はどうもありがとうございました。はじめてきてみて情報量が多くてびっくりしました。
さて、あのランチャーの続きなんですが、ボタンに絵を貼り付けることができるんでしょうか。教えてください。
URLの所に間違えて書いてしまいました。
掲示板を汚してすみませんでした。
はじめまして、質問させていただきます。
ブラウザの文章や画像などを自動的に印刷してくれることを作りたいのですが、
ブラウザでファイルを開くことまでは出来たのですが、印刷までは出来ませんでした。
印刷方法があればご教授いただけませんでしょうか?
むたぐちさん、お返事ありがとうございます。
>ちょっと質問の意味がつかみかねるのですが…。
>VBScriptというのは、VBAのおもに言語としての基本機能のみを引き継いだ、
>機能限定版なのです。
>VBScriptのヘルプの「機能に関する情報」を見ると、どの機能が削除されているかが
>わかると思います。
>で、VBScriptは、WSHやHTMLから利用し、VBAはWordやExcelのマクロとして利用されています。
すいません・・・あさはかでした・・。基本的な知識が欠けていました。
>ただ、WSHやHTMLからもWordやExcelのCOMコンポーネント(ActiveX)を通して、それらの機能を
>扱うことはできます。(CreateObject関数などで)
>しかし、セキュリティ上の問題から、通常の設定では、HTMLからはWordやExcelの機能を
>使用することはできません。
あれから自分でもいろいろ調査してみたのですが、むたぐちさんのおっしゃるとおり、ActiveXを使えば
できない事もないようです。が、一般的にActiveXの評判があまり芳しくなく、今回作成しようとしたもの
を実際使うと思われるユーザに聞いたところ、ActiveXは×といわれました。
ちょっとVBAを利用するのはやめて、別の方法にしようと思います。
お忙しい中ありがとうございました。
むたぐちさん、お返事ありがとうございます。
>ちょっと質問の意味がつかみかねるのですが…。
>VBScriptというのは、VBAのおもに言語としての基本機能のみを引き継いだ、
>機能限定版なのです。
>VBScriptのヘルプの「機能に関する情報」を見ると、どの機能が削除されているかが
>わかると思います。
>で、VBScriptは、WSHやHTMLから利用し、VBAはWordやExcelのマクロとして利用されています。
すいません・・・あさはかでした・・。基本的な知識が欠けていました。
>ただ、WSHやHTMLからもWordやExcelのCOMコンポーネント(ActiveX)を通して、それらの機能を
>扱うことはできます。(CreateObject関数などで)
>しかし、セキュリティ上の問題から、通常の設定では、HTMLからはWordやExcelの機能を
>使用することはできません。
あれから自分でもいろいろ調査してみたのですが、むたぐちさんのおっしゃるとおり、ActiveXを使えば
できない事もないようです。が、一般的にActiveXの評判があまり芳しくなく、今回作成しようとしたもの
を実際使うと思われるユーザに聞いたところ、ActiveXは×といわれました。
ちょっとVBAを利用するのはやめて、別の方法にしようと思います。
お忙しい中ありがとうございました。
To: AKiOS さん
> Namazu のインデクサが perl で書かれているので、一応インストールは
> しています。perl についてはほとんど知らないのですが、ちょっと見た
> 限りでは単に nkf.dll を呼び出しているだけのようですね。
Namazuといえば、泣く子も黙る(?)高速検索システム(?)ですね。
Linuxのとあるディストリビューションでは、ヘルプシステムにこいつを利用していま
した。Web検索(サイト内検索)でも使われている例があるようです。
…って、ぜんぜんWSHと関係ないか。
> 対応しました!
すいません。どうもありがとうございます。
で、さらにお願いなんですが、記事番号からの検索というのもできると便利だと思うので、
話の種に(^^;実装してみてはいただけないでしょうか。
> ところで、WSH 2.0 の新機能を使いたいので 2.0 以降かどうかのチェックを
> したいのですが、どうすればいいのでしょう?
> 今はとりあえず WScript.version が 5.1 以降ならOKとしていますが…。
私もその方法を使っていますが、何か問題があるのでしょうか?
To: abuku さん
> むたぐちさん、おひさしぶりです。
どうもおひさしぶりです。
> 質問なのですが、VBSriptの中でVBAは使用できるのでしょうか?もしくはHTML
> の中でVBAは記述できるのでしょうか?(後者の質問はHPの趣旨にそぐわないかも
> しれませんが・・)
ちょっと質問の意味がつかみかねるのですが…。
VBScriptというのは、VBAのおもに言語としての基本機能のみを引き継いだ、
機能限定版なのです。
VBScriptのヘルプの「機能に関する情報」を見ると、どの機能が削除されているかが
わかると思います。
で、VBScriptは、WSHやHTMLから利用し、VBAはWordやExcelのマクロとして利用されています。
ただ、WSHやHTMLからもWordやExcelのCOMコンポーネント(ActiveX)を通して、それらの機能を
扱うことはできます。(CreateObject関数などで)
しかし、セキュリティ上の問題から、通常の設定では、HTMLからはWordやExcelの機能を
使用することはできません。
むたぐちさん、おひさしぶりです。
質問なのですが、VBSriptの中でVBAは使用できるのでしょうか?もしくはHTML
の中でVBAは記述できるのでしょうか?(後者の質問はHPの趣旨にそぐわないかも
しれませんが・・)
ちょっと迷っているので、アドバイス頂けたら幸いです。
To: 管理人むたぐち さん
>PerlScriptならできそうですね。
># まだActivePerlはインストールしていないんですが(^^;
Namazu のインデクサが perl で書かれているので、一応インストールは
しています。perl についてはほとんど知らないのですが、ちょっと見た
限りでは単に nkf.dll を呼び出しているだけのようですね。
>でも、よく考えると、list(番号).shtmlの番号のほかに、記事ごとの番号も
>あった方がわかりやすくていいかも、という気がしてきました(^^;
>これで、11-23 の記事、とすれば特定の記事をマークアップできますし。
対応しました!
ところで、WSH 2.0 の新機能を使いたいので 2.0 以降かどうかのチェックを
したいのですが、どうすればいいのでしょう?
今はとりあえず WScript.version が 5.1 以降ならOKとしていますが…。
To: Makoto さん
> Internet Explorer での質問です
> <object> タグで指定したコントロールのイベント
> を IE で受ける事は出来るのでしょうか?
できます。
<object id="hoge" ...>
なら、
Sub hoge_EventName()
と書いておくと、そのイベントが発生します。
ただし、DHTMLのobjectエレメント自体のイベント(OnClickなど)と、指定された
コントロール独自のイベント名が重複した場合の動作は確認していません。
# コントロール独自のプロパティ/メソッドは、objectエレメントのobjectプロパティ
# からアクセスすることで、名前のバッティングを防げるそうですが…。
# 詳しくはMSDNライブラリを参照してください。
To: AKiOS さん
> 現状では外部のコントロールを利用するか nkf を呼ぶしかなさそうですね。
>
> # java みたいに s = new String(responseBody, "JISAutoDetect") とか、
> # できたらいいのに…。
VB(Not VBS)にもStrConv関数と言うのがあり、Shift-JIS←→Unicodeの相互変換はできます。
JIS,EUCは無理みたい…。
HTAでは、document.charsetで、文字コードを簡単に変更できるんですが、
ドキュメント全部の文字コードが変換されてしまうので、この場合は使えないと思います。
PerlScriptならできそうですね。
# まだActivePerlはインストールしていないんですが(^^;
> 確認ですけど、過去記事の番号って list(番号).shtml の番号ですよね?
そうです。
でも、よく考えると、list(番号).shtmlの番号のほかに、記事ごとの番号も
あった方がわかりやすくていいかも、という気がしてきました(^^;
# ログのソースを見てもらえればわかるのですが、各記事に対して、コメント行として
# 記事番号が挿入されています。
これで、11-23 の記事、とすれば特定の記事をマークアップできますし。
# ただ、動作速度の面で問題が出てきそう…。
気が向いたらで結構ですが、ご一考いただけると幸いです
To: 管理人むたぐち さん
>まだ実験していないですが、この方法だと、EUCはやっぱりEUCになってしまいますよね?
>WSHではEUCは読み込めないので、Shift-JISかUnicode、もしくは英数字記号オンリーの
>ページしか保存できないことになります。
確かに EUC になってしまいます。(^^;
でも、これは仕方がないですね。responseBody はあくまでも応答ですから。
現状では外部のコントロールを利用するか nkf を呼ぶしかなさそうですね。
# java みたいに s = new String(responseBody, "JISAutoDetect") とか、
# できたらいいのに…。
># 今思ったのですが、検索結果に、過去記事の番号が表示されると、ポインタを
># 示しやすいかも? 私にしか意味のない機能ですが、良かったらご検討ください > AKiOSさん
了解しました!
確認ですけど、過去記事の番号って list(番号).shtml の番号ですよね?
Internet Explorer での質問です
<object> タグで指定したコントロールのイベント
を IE で受ける事は出来るのでしょうか?
出来るとしたら、どう記述すればよいのですか?
To: もぐ さん
> VBScriptからクリップボード操作を行う方法、裏技、サンプル等
> をご存じの方いないでしょうか?
GoriさんのWshPlus!を使うのが一番簡単だと思いますが、他にもHTAを使う方法など、過去に話題となっています。
詳しくは、AKiOSさんの過去記事検索スクリプトを使って、検索してみてください。
> 何をしたいのかというと、1000行程のリストをWSHでEXCELに張り
> 付けたいのですが、よくある1行づつ張り付ける方法だと張り付け
> る時間がかなりかかってしまうので、
あれ、そうなんですか。
原始的な手段の方が早いとは。
ExcelのVBAはわりとお粗末なのね(^^;
> とりあえずVBAで使っていたMSForms.DataObjectを使えないか試
> したのですが何故か、CreateObjectに失敗してしまいます。
WSHは、ActiveXコントロールのコンテナとはならないので、フォームなどの
コントロールは使用できません。
To: 石村 さん
> IEのアイコンをクリックすると設定に関係なく、
> いつも同じホームページを表示したいのですが、
> 可能でしょうか?
>
> 例)
> ツール→インターネット→全般→ホームページの設定で
> www.aaa.co.jp
> と指定されていても、IEのアイコンをクリックすると
> www.ccc.co.jp
> が表示されるようにしたい。
常駐アプリにして、IEの起動を監視し、起動されたら強制的に指定のページに
移動させるようにするしかないでしょうね。
# 私にはそんな高度な技術はないので、これ以上のことは…(^^;
# まあ、WSHなら、多少強引ですが方法を知っています。
# Shell.Windowsを一定期間ごとに監視し、IEのドキュメントオブジェクトが
# 見つかった時点で、IEのDocumentを「乗っ取る」方法です。
# (この方法は、どこかで紹介した気がするのですが、ちょっと覚えていません。)
# でもこのスクリプトを強制終了されたら終わりですし(^^;
そんなものをわざわざ作るよりは、IEの設定(ホームページの設定含む)に関する
レジストリを、ユーザーに操作できないようにアクセス権を設定すればいいと思うのですが?
# WinNT/2000のregedt32でできます。
To: Gori さん
> 拙作 wshplus.dll が使えます。インストール後に
ご紹介、ありがとうございます。
# この掲示板ではすでにおなじみですけど(^^;
> ランダムシグネチャー生成のためにこれを実装しましたので(苦笑
あ、それ面白そうですね。
クリップボードが使えると、スクリプトの幅が広がりますよね。
なんでデフォルトで実装されていないんだろうか…。
> VBScriptからクリップボード操作を行う方法、裏技、サンプル等
> をご存じの方いないでしょうか?
拙作 wshplus.dll が使えます。インストール後に
set WP=createobject("WshPlus.WP_Clip")
WP.settext OUTPUTTEXT
とやるだけです。
ランダムシグネチャー生成のためにこれを実装しましたので(苦笑
お久しぶりです
IEのアイコンをクリックすると設定に関係なく、
いつも同じホームページを表示したいのですが、
可能でしょうか?
例)
ツール→インターネット→全般→ホームページの設定で
www.aaa.co.jp
と指定されていても、IEのアイコンをクリックすると
www.ccc.co.jp
が表示されるようにしたい。
VB,VC,VBScript方が有り難いですが、言語の指定はありません。
よろしくお願いします。
はじめまして。
VBScriptからクリップボード操作を行う方法、裏技、サンプル等
をご存じの方いないでしょうか?
何をしたいのかというと、1000行程のリストをWSHでEXCELに張り
付けたいのですが、よくある1行づつ張り付ける方法だと張り付け
る時間がかなりかかってしまうので、複数行分をTABコードと改行
コードで区切ってクリップボードにコピーして、EXCELのPasteメ
ソッドで一括して張り付ける方法で高速化したいのです。
(VBやVBAだとよくやる手法ですが)
VbScript自体はクリップボード操作をサポートしてませんよね?
何か裏技的な手法はないものですかねぇ、、?
とりあえずVBAで使っていたMSForms.DataObjectを使えないか試
したのですが何故か、CreateObjectに失敗してしまいます。
To: AKiOS さん
> >Microsoft XMLも使えるようになってきたですし、HTMLの自動ダウンロード機能が
> >追加されるといいですね。
>
> すでに実装済みです(笑)。
そうですか! 完成を楽しみにしております。
> >なぜUnicodeで保存したファイルが、Shift-Jisとして読んだとき正常に表示されるのか。
>
> これは単に(Unicodeだと思い込んでいるので)何もしないで
> ファイルに書きこんでいるだけじゃないですか。(^^;
なんとなくわかりました(^^;
Shift-JIS,JIS,EUCなどさまざまなフォーマットを、とりあえずヘッダだけつけて
Unicodeとして取り扱っているのでしょうね。
変換の仕方がインテリジェントじゃない気がする…。
> >この2バイトを取り除いて、"真の"Shift-Jisにするには、
> >このファイルをもう一度TextStreamで(今度はShift-Jisとして)読み込み、
> >ゴミを除く処理を書き、再びShift-Jisで保存するようにすればいいと思います。
>
> 私もこの方法です。ゴミを取り除くのは単に2バイト読み捨てればOK!
まだ実験していないですが、この方法だと、EUCはやっぱりEUCになってしまいますよね?
WSHではEUCは読み込めないので、Shift-JISかUnicode、もしくは英数字記号オンリーの
ページしか保存できないことになります。
さて、どうしたものか…。
To: miura さん
> htaを<A HREF="test.hta">とリンクをはり呼び出すと、「ディスクに保存しますか。その場で開きますか。」とメッセージが出ますが、これを無くす書き方はあるのでしょうか。
これは過去に同じ質問が出ました。
AKiOSさんのHTAで検索をかけてみると、
「管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2000年 03月 15日 09時 16分 37秒 」
の記事が該当します。
この記事によると、私の環境はやっぱり異常なようですね(^^;
# 今思ったのですが、検索結果に、過去記事の番号が表示されると、ポインタを
# 示しやすいかも? 私にしか意味のない機能ですが、良かったらご検討ください > AKiOSさん
To: いわもと さん
> FTPのパスをリンク設定したのですが、保存の画面は出力されず、
> ブラウザ上で表示してしまいます。(*.pdf等)
httpと同じようになるのですね。知りませんでした(^^;
zipとかのアーカイブにして配布されているものしか
見たことがないので、これまで気づきませんでした。
> その結果、IE5、NN4.5では、保存画面が出力、
> IE4では、ブラウザ表示となってしまいます。
> IE4で、ブラウザ表示を回避し、保存画面を出力することはできるのでしょうか。
> (IE4にかぎらず、IE4.x以上、NN4.x以上で)
前にも書いたように、IEに関しては、保存画面を出すか出さないかは、pdfファイルの
関連付けに関係してくる(pdfならOLEの登録も関係してくるでしょう)ので、すべての
ユーザーの環境で必ず保存画面を出すようにする方法は、ないと思うのですが。
だいたい、世の中にごまんとある環境を想定すれば、Win上で動くIEやNNで保存ダイアログが
出たと言っても、それはあまり意味がないと思えるのですがいかがでしょうか。
# Web上では、ファイルをダウンロードさせるのに、『右クリックで「名前を付けて保存」
# してください』という注意書きをする、という方法をよく見かけますね。
# Windows+IEという、極めて限定的なシチュエーションを想定したもので、あまりいい
# 説明ではないですが(^^;
To:管理人むたぐち さん
ご回答ありがとうございます。
>ファイルをダウンロードさせたいなら素直にFTPにすればいいと思うのですが、
>何か問題があるのでしょうか?
FTPのパスをリンク設定したのですが、保存の画面は出力されず、
ブラウザ上で表示してしまいます。(*.pdf等)
また、
Response.AddHeader "Content-Disposition" ,
" attachment; filename=" & DLName
Response.ContentType = "application/x-binary"
Set bobj = Server.CreateObject("basp21")
barray = bobj.BinaryRead(OrgName)
Response.BinaryWrite barray
というように、クライアントに出力するようにしました。
その結果、IE5、NN4.5では、保存画面が出力、
IE4では、ブラウザ表示となってしまいます。
IE4で、ブラウザ表示を回避し、保存画面を出力することはできるのでしょうか。
(IE4にかぎらず、IE4.x以上、NN4.x以上で)
htaを<A HREF="test.hta">とリンクをはり呼び出すと、「ディスクに保存しますか。その場で開きますか。」とメッセージが出ますが、これを無くす書き方はあるのでしょうか。
To: 管理人むたぐち さん
># Globalオブジェクトのメソッドって関数ちゃうんかい! と思ってしまいますが(^^;
省略可能ということでしょうね(笑)。
>次のバージョン、期待しております。
>Microsoft XMLも使えるようになってきたですし、HTMLの自動ダウンロード機能が
>追加されるといいですね。
すでに実装済みです(笑)。
>なぜUnicodeで保存したファイルが、Shift-Jisとして読んだとき正常に表示されるのか。
これは単に(Unicodeだと思い込んでいるので)何もしないで
ファイルに書きこんでいるだけじゃないですか。(^^;
>この2バイトを取り除いて、"真の"Shift-Jisにするには、
>このファイルをもう一度TextStreamで(今度はShift-Jisとして)読み込み、
>ゴミを除く処理を書き、再びShift-Jisで保存するようにすればいいと思います。
私もこの方法です。ゴミを取り除くのは単に2バイト読み捨てればOK!
dim s
if not ts.AtEndOfStream then
ts.Read(2)
if not ts.AtEndOfStream then
s = ts.ReadAll()
end if
end if
To: AKiOS さん
> JScriptのメソッドです。JScriptのドキュメントにも少し説明が載ってますが、
# Globalオブジェクトのメソッドって関数ちゃうんかい! と思ってしまいますが(^^;
> 英数字と記号の一部を除いたすべての文字を %xx 形式に変換するメソッドです。
> VBS でこんなに長い(?)プログラムはほとんど作ったことがないので、
VBSで解説していただくと、よくわかります(笑)
どうもありがとうございます。
ついでに、WSFで書いてみました。
<job>
<object id="xh" progid="microsoft.xmlhttp" />
<script language="JScript">
function jsescape(str)
{
return(escape(str));
}
</script>
<script language="VBScript">
url = "http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/wshtop.htm"
xh.open "GET", url, false
xh.send()
msgbox jsescape(xh.responsetext)
</script>
</job>
> とりあえず、検索だけは少しマトモになりました。
> ・英数記号の半角・全角の区別はしないようにした。
> ・全角の単語検索にも対応した。
次のバージョン、期待しております。
Microsoft XMLも使えるようになってきたですし、HTMLの自動ダウンロード機能が
追加されるといいですね。
> ObjectViewerで見つけたresponseBodyをUnicodeで保存すると
> 最初の2バイト(0xff,0xfe)にゴミが入っていますが、
> ちゃんとShift_JISで取り出すことができました。
おお、本当にできますね。
でも私の頭の中は疑問符で一杯なのです。
とりあえず、コードを書いておきましょう。
url = "http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/wshtop.htm"
Set xh = WScript.CreateObject("microsoft.xmlhttp")
Set Fs=WScript.CreateObject("scripting.filesystemobject")
xh.open "GET", url, false
xh.send()
set ts=Fs.CreateTextFile("D:\test.htm",true,true)
ts.Write xh.responsebody
ts.close
なぜUnicodeで保存したファイルが、Shift-Jisとして読んだとき正常に表示されるのか。
不思議。
それと、先頭2バイトのゴミを除く方法はあるのか?
# この2バイトは、Unicodeなテキストファイルのヘッダのようなものだと思いますが
このままでは、IEにtest.htmを読み込ませると、化け化けになります。
(英数字すら化ける。つまり、HTMLのタグも解釈されないため、ただのゴミテキストが
表示されるのみです)
Win2000のメモ帳は、Unicodeに対応しているので、やはりこのファイルを読み込むと
文字化けします。
結局このファイルを表示できるのは、Unicodeに対応していないエディタに限られます。
この2バイトを取り除いて、"真の"Shift-Jisにするには、
このファイルをもう一度TextStreamで(今度はShift-Jisとして)読み込み、
ゴミを除く処理を書き、再びShift-Jisで保存するようにすればいいと思います。
が、これは本筋とは関係ない、変な処理ですよね。ちょっと気に入りません。
To: いわもと さん
> HTML上で、クリックすることにより、指定ファイルをダウンロード
> する機能を付加したいのですが、どのようにすれば実現できるでしょうか。
> ファイルの種類によらず、ダウンロードの確認画面を表示させたいのです。
> 使用環境:IIS,VBS,BASP21
今、AKiOSさんと議論中の用件と似ていますが、これはサーバー側での実装
ということですね。
ダウンロードの確認画面を出すかどうかは、ブラウザの設定によります。
たとえば、IEなら、Windowsエクスプローラの関連付けの設定(レジストリ)に
基づいて確認画面を表示させています。
しかし、サーバー側のスクリプト(ASPなど)では、基本的にクライアントの
ファイルシステムやレジストリにはアクセスできません。
そのため、サーバーからクライアントのブラウザの設定を変更することは
できません。
ファイルをダウンロードさせたいなら素直にFTPにすればいいと思うのですが、
何か問題があるのでしょうか?
To: 松本貢 さん
> パソコン自体あるいはそれぞれのWINDOWSがもっている独自のデータを取り出すにはどうすればいいのでしょうか.
すいません。
質問が抽象的過ぎて、よくわかりません…。
> 起動時にWSHでレジストリを用いてウィンドウズのプロダクトIDを読み取るにはどうすればいいでしょうか.
プロダクトIDは
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersionキーの
ProductIdという値の名前に格納されています。
# レジストリエディタで検索をかければすぐに見つかると思うのですが…。
WSHでレジストリを読み込む話は、私のサイトのあちこちに書いてあります。
とりあえず、Lesson9あたりをご覧ください。
起動時にWSHでレジストリを用いてウィンドウズのプロダクトIDを読み取るにはどうすればいいでしょうか.
パソコン自体あるいはそれぞれのWINDOWSがもっている独自のデータを取り出すにはどうすればいいのでしょうか.
はじめまして。いわもとです。
質問があります。
HTML上で、クリックすることにより、指定ファイルをダウンロード
する機能を付加したいのですが、どのようにすれば実現できるでしょうか。
ファイルの種類によらず、ダウンロードの確認画面を表示させたいのです。
使用環境:IIS,VBS,BASP21
To: 管理人むたぐち さん
>ちなみに、CreateTextFileするときに、Unicodeを指定すると、とりあえずエラーを出さずに
>responsetextの中身を書き出すことができます。当然文字化けするので意味はないですが、
>Shift-Jisでは保存できず、Unicodeなら保存できる、というのは何かポイントかもしれません。
さすがスルドイですね!
ObjectViewerで見つけたresponseBodyをUnicodeで保存すると
最初の2バイト(0xff,0xfe)にゴミが入っていますが、
ちゃんとShift_JISで取り出すことができました。
To: 管理人むたぐち さん
>LANカードは刺さってません。そのせいでしょうか。
ダイヤルアップの接続は、右下のボタンがオフライン接続のものと
キャンセルボタンのものと2つあって、私の環境のようにキャンセルボタン
の方が表示されるときは、キャッシュを利用することはできなくて、
それは、たぶん LAN カードがあるからだと思うのですが…。
>escape() というのは何でしょうか?
>私も試してみたいのですが…。
JScriptのメソッドです。JScriptのドキュメントにも少し説明が載ってますが、
英数字と記号の一部を除いたすべての文字を %xx 形式に変換するメソッドです。
VBS でこんなに長い(?)プログラムはほとんど作ったことがないので、
見苦しいかもしれませんが、VBS版 escape() です(/bbs/index.shtml で
JScript の escape() と同一の結果になることを確認していますけど、
もしかしたら is_print の記号に漏れがあるかもしれません)。
--- ここから ---
function escape(src)
dim s, length, i, c, h, code
s = ""
length = len(src)
for i = 1 to length step 1
c = mid(src, i, 1)
if is_print(c) then
s = s & c
else
h = hex(ascw(c))
select case len(h)
case 1 code = "%0" & h
case 2 code = "%" & h
case 3 code = "%u0" & h
case 4 code = "%u" & h
end select
s = s & code
end if
next
escape = s
end function
function is_print(c)
is_print = true
if "A" <= c and c <= "Z" then exit function
if "a" <= c and c <= "z" then exit function
if "0" <= c and c <= "9" then exit function
if c = "/" or c = "-" or c = "/" or _
c = "@" or c = "." or c = "_" or _
c = "+" then exit function
is_print = false
end function
--- ここまで ---
>ということは、Win32用コンソールアプリが作れるんでしょうか。
コンソールアプリもDLLも作れます。
>Type Libraryのノードを展開すると、タイプライブラリが列挙されるので、
>Microsoft XMLというやつを探してダブルクリックです。
ありがとうございます。ちょっと見るだけでも見てみます。
>ここまで高機能化してくると、この掲示板だけに使うのがもったいなくなってきますね。
この掲示板だけでもそこそこいると思いますよ。
とりあえず、検索だけは少しマトモになりました。
・英数記号の半角・全角の区別はしないようにした。
・全角の単語検索にも対応した。
50,000アクセス到達!
これからもよろしく!
To: やっさん さん
> TO たむぐち様
何か間違っていませんか(^^;
> これは、常に呼び出し側に値を返すコマンドで、これを使えば、どんな言語で
> 書かれたプログラムに対しても値を返せるということですね。
起動したプログラムのエラーコードが読み取れる言語なら、ですね。
バッチファイルはもちろんですが、WSHでもエラーコードを読み取ることができます。
WshShell.Runの返り値がそのままエラーコードです。
> WSHに関する本で、何か良いものがありしたら教えて頂きたいのですが、、
特にお勧めはありませんが、現在日本で出版されているWSH本は、以下の5冊のようです。
URLはとりあえず検索でひっかかったものなので、出版社のものではない場合があります。
# どなたか補完してください(^^;
「使いながら覚える…」は絶版っぽいです。(使いながら覚えるシリーズのWebページは
あったのに、WSHのは載っていなかったため)
「WSHクイックリファレンス」がこの中では一番新しいです。
「はじめてのWindows Scripting Host」 (株)アンク著 技術評論社
http://www.ank.co.jp/book/1998/wsh1.htm
「使いながら覚えるWindowsScriptingHost プログラミング入門」 竹田英雄著 エーアイ出版
http://emall.justnet.ne.jp/shop/pbk/cartdata/b1_01b/12443.htm
「Windows Scripting Host入門 with VBScript」 毎日コミュニケーションズ
http://emall.justnet.ne.jp/shop/pbk/cartdata/b1_01b/11233.htm
「WSHで楽しむWindows95/98/NT4.0版 ウィンドウズ・スクリプティング入門 VBScript編」 メディアテック出版
「WSHクイックリファレンス」 羽山博著 オライリー・ジャパン
http://www.oreilly.co.jp/BOOK/wsh/wsh.htm
To: AKiOS さん
> あれ? そうなんですか。私の環境では何回やってもだめですけど…。
> # もしかして LAN カードが差さってないとか?
LANカードは刺さってません。そのせいでしょうか。
> でも、キャッシュを読み込めたとしても responsetext はやはりおかしいので
> 使えません。escape() を使って表示してみると確かに Shift_JIS のページでは
> Shift_JIS が返ってきているようなのですが、一部 %uFFFF というのがあって
> どうすることもできません。
escape() というのは何でしょうか?
私も試してみたいのですが…。
ちなみに、CreateTextFileするときに、Unicodeを指定すると、とりあえずエラーを出さずに
responsetextの中身を書き出すことができます。当然文字化けするので意味はないですが、
Shift-Jisでは保存できず、Unicodeなら保存できる、というのは何かポイントかもしれません。
> >そもそもあれって、Winアプリの開発もできるんでしたっけ?
>
> 一応できます(これで GUI アプリを作る人は、さすがにいないと思うけど(^^;)。
> ていうか、C++ Builder 5 に含まれているものとほとんど同じモノだそうです。
ということは、Win32用コンソールアプリが作れるんでしょうか。
> >OLE/COM Object Viewerをお使いになってはいかが?
> >「技術情報」のところで紹介していますので。
>
> ダウンロードしてきましたが、使い方がよくわかりませんね。
> # xmlhttp がどこにあるのかさえ、わからん!(^^;
Type Libraryのノードを展開すると、タイプライブラリが列挙されるので、
Microsoft XMLというやつを探してダブルクリックです。
でも、文字通りCOMのインターフェースを見るものなので、私なんかは見ても良くは
わかりません。
> その後の掲示板記事検索HTAの情報です。
> 安定したら、またメールで送りますね >むたぐちさん
おお、ありがとうございます。
ここまで高機能化してくると、この掲示板だけに使うのがもったいなくなってきますね。
…やはりHTMLはデータの再利用性に乏しいですね。
時代はXMLです(?)
# 月刊ASCIIで連載してたXMLの記事は、今読んでみるとなかなか良かったです。
# "Microsoft XML"は、スクリプト言語によるCOMからのDOMへのアクセスを実装している、
# という考え方はあっているのかな?
To: さむ さん
> > InputBoxのエラーの件ですが、Win98+WSH2.0の環境では100%再現するようですね。(05/29 02.09)
>
> これまた,安心しました。ちなみに以下のコードがそれです。
安心している場合ではないと思うんですけどねえ(^^;
私はあまりWin98を使わなくなったのでいいんですが、結構致命的なバグですよね、これ。
WSH1.0では再現しなかったと思いますが。
If Err.Number<>0 Then... とかしないといけないんでしょうか。なんだかなあ…。
# Win2000のWSHで表示したInputBoxは、なんかフォントが小さくて気に入らないぞ!
> すみません,書き忘れてました。システムファイルチェッカーもやったんですよう。(エラー出ず)
いえ、エラーとは無関係に、強制的に復元してみてください。
Win98のCD-ROMから一つシステムファイルを復元する、というようなオプションが
ありますよね?
文字化けしてますよね?(↓)
意味不明の漢字の羅列は「キャンセルされた時」です。
お恥ずかしい...。
To: むたぐちさん
レス,ありがとうございます。
>> (1)
>> Sendkeys で,2バイト文字って送れます?
> あれは、文字を送るのではなく、キーコードを送るものですからね。
> 109キーボードにあるキー以外は送れないでしょう。
やっぱりそうですよね。安心しました。
>> (2)
>> InputBox関数で,テキストボックスの中を削除してOKすると
>> 「メモリ不足です」って出ます。なぜでしょう?
> あ、この現象は私も見たことがあります。
> ただ、原因がよくわからないんですよね。再現性もないし…。(05/27 23:53)
私のところは,再現しっぱなし(?)ですが。
> InputBoxのエラーの件ですが、Win98+WSH2.0の環境では100%再現するようですね。(05/29 02.09)
これまた,安心しました。ちなみに以下のコードがそれです。
========================================================
' 既存のフォルダ名は受け付けない
Do While FS.FolderExists(TodayFolderPath) = True
ORG = TodayFolderPath
TodayFolderPath = InputBox("バックアップ先のフォルダ名を指定して下さい", _
ORG & " はすでに存在しています" & Wscript.ScriptName, ORG)
If TodayFolderPath = "" Then TodayFolderPath = ORG ' 桑歉戮気譴浸
If Len(TodayFolderPath) = 0 Then TodayFolderPath = ORG ' 何も入力されない
Loop
=================================================================
>> (3)
>> (中略)
>> スクリプトのエラーでなく,ブルーバックの画面で次のように出ちゃうんです。
>> スキャンディスクや,デフラグとかいろいろやったんですが,ダメです。
>> MCSCAN32.VXD が壊れてるんでしょうか?
> Win98なら、システムファイルチェッカーというツールを使えば簡単にできます。
すみません,書き忘れてました。システムファイルチェッカーもやったんですよう。(エラー出ず)
To: 管理人むたぐち さん
>「私はたまたまオンライン中にスクリプトを実行してみたので
>表示されただけでした。」と書きましたが、今日テストしてみると、
>オフライン状態でもキャッシュを読み込んで表示されることが判明しました。
あれ? そうなんですか。私の環境では何回やってもだめですけど…。
# もしかして LAN カードが差さってないとか?
でも、キャッシュを読み込めたとしても responsetext はやはりおかしいので
使えません。escape() を使って表示してみると確かに Shift_JIS のページでは
Shift_JIS が返ってきているようなのですが、一部 %uFFFF というのがあって
どうすることもできません。
>そもそもあれって、Winアプリの開発もできるんでしたっけ?
一応できます(これで GUI アプリを作る人は、さすがにいないと思うけど(^^;)。
ていうか、C++ Builder 5 に含まれているものとほとんど同じモノだそうです。
>OLE/COM Object Viewerをお使いになってはいかが?
>「技術情報」のところで紹介していますので。
ダウンロードしてきましたが、使い方がよくわかりませんね。
# xmlhttp がどこにあるのかさえ、わからん!(^^;
PS.
その後の掲示板記事検索HTAの情報です。
・記号とか検索したいときがあるので、正規表現の検索は /.../ のように
スラッシュ記号で囲まれたときにするようにしました。
・半角と全角のどちらでもヒットするよう、半角または全角に変換したものと
OR検索するようにしました(しかし、半角と全角が混在した文字列には
ヒットしません)。
・半角のみですがちゃんと単語検索できるモードを追加しました(w で検索
すると半角の wsh にはヒットしないが、全角の WSH にはヒットする(^^;)。
・文字化けせずに掲示板に書きこみできるようにしました(無理やりです(^^;)。
・検索オプション(モード、ソート)や投稿者情報を iniファイルに書きこむ
ようにしました。
安定したら、またメールで送りますね >むたぐちさん
TO たむぐち様
書き込みありがとうございました。
無事に実現できました。
Wscript.Quitは、スクリプトを終了させるコマンドということですね。
これは、常に呼び出し側に値を返すコマンドで、これを使えば、どんな言語で
書かれたプログラムに対しても値を返せるということですね。
WSHに関する本で、何か良いものがありしたら教えて頂きたいのですが、、
それでは、失礼いたします。
To: やっさん さん
> バッチファイルより呼び出された、VBSファイルの処理結果を(返り値 0=正常、1=異常)というように、呼び出し元のバッチファイルに返してやるにはどのように
> VBSファイル上に記述すればよいのか教えて下さい。
正常
WScript.Quit 0
異常
WScript.Quit 1
です。
バッチファイルより呼び出された、VBSファイルの処理結果を(返り値 0=正常、1=異常)というように、呼び出し元のバッチファイルに返してやるにはどのように
VBSファイル上に記述すればよいのか教えて下さい。
ネットニュースで、winmgmtとは何か、という質問が出ていたので
回答してみました。
結局WMIの説明になってしまいましたが、この記事を元に「WSH技術情報」を
書いてしまうのです。 #計画的(^^;
To: kia さん
> エディタxyzzyで、VBScript用のキーワード色付けをやってみました。
お、期間限定品ですか。
必要な方はGETしておきましょう。
> #お話の過去記事検索HTAへのリンクが切れてるようですよ。
あれ、本当ですね。ファイル名がおかしいのかな?
うん、
http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/src/WshLab10.lzh
が正しいです。
この場合、リンクを修正すべきか、ファイル名を修正すべきか、どっちがいいんでしょう。
関係する話かどうかわかりませんが…。
Win2000のFAT領域のアクセスには、結構深刻なバグ(MS的にいうと仕様?)があり
Win2000から8+3で書き込んだファイル名が、Win98ではすべて大文字に
なるようです。これがスキャンディスクにひっかかったりするらしい。
また、ファイル名が完全に壊れてしまうこともあるらしい。
実は、これの被害をこうむったことがあります。
過去記事検索スクリプトで、Win2000でコピーしておいたログファイルが
Win98では大文字になってしまい、読み取りができなかったのです。
WshLab10.lzhのアップロードミスも、このせいかも知れません。
Win98には、ファイル名を大文字で表示するオプションとかもあって、
事態は複雑になっています。
これ、なんとかしてほしい。
To: みのみの さん
> コンマでも区切りましたが、それでもできないんです。
あれ、そうですか。
へルプには記述がないんですよね?
あ、I Love Youのソースをみても無駄ですよ。
あれは、アドレス帳の宛先ごとに一通ずつメールを出しているので。
むたぐちさん、早速のレスありがとうございます。
コンマでも区切りましたが、それでもできないんです。
「,」「;」「:」、とか、考えられる記号は
ほとんど試したつもりなんですが・・・。
やはり、「I LOVE YOU」のソースを参考にするしか
無いんですかね?(笑)
こんにちは。ご無沙汰してます。
エディタxyzzyで、VBScript用のキーワード色付けをやってみました。
色をつけるだけで、インデントとか補完とかはありません(^_^;)
しばらく置いておきますので、欲しい方はどうぞ。
#お話の過去記事検索HTAへのリンクが切れてるようですよ。
AKiOSさんと次のようなやり取りをメールでおこなっていました。
メールでやるのはもったいないネタだったので、ここに転載して続けます。
(WSH Lab.掲示板過去記事検索HTA改良に関する提案が、xmlhttpでキャッシュファイルを
扱えるかどうかという話に発展しました。)
>>>また、xmlhttpが使えれば、IEのキャッシュから直にファイルを読み込んで利
>>>用できますね。そうすると、手動で過去記事を保存する必要もなくなるかも知
>>>れません。(IEを普段利用していることが条件になりますが(笑))
>>>それで、未ダウンロードファイルは、statusプロパティで調べられる、と。
>>
>>推測ですがxmlhttpは単にHTTPで要求(CGIで利用するGETとかPOSTが有名ですね)
>>を出して、応答を受け取るだけのActiveXなんだと思います。
>>実際にやってみるとわかりますが「ダイヤルアップの接続」が表示されるはず
>>です。
>
>そうでした。私はたまたまオンライン中にスクリプトを実行してみたので
>表示されただけでした。
>何で勘違いしたんでしょ(^^;
>
>>で、xmlhttpではなく、telnetで要求を出す手順をみてみるとあることに気付き
>>ます。そうです! 要求を出すためには相手と接続しなければならないんですね。
>>だから、IEのキャッシュを利用するのは(xmlhttpでは)無理なんじゃないかな。
>># …ん? でもオフライン接続関連のプロパティがあればいけるかも。
>>
>><telnetでテストする手順>
>>(1) ターミナルオプションのローカルエコーをONにする。
>>(2) 相手先に接続する。
>> ホスト名:www.roy.hi-ho.ne.jp
>> ポート:80
>>(3) 要求を出す。
>> GET /mutaguchi/ HTTP/1.0<Enter>
>> <Enter> (←空行です。何も入力せずに<Enter>)
「私はたまたまオンライン中にスクリプトを実行してみたので
表示されただけでした。」と書きましたが、今日テストしてみると、
オフライン状態でもキャッシュを読み込んで表示されることが判明しました。
実験に使ったのは次のスクリプトです。
url = "http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/wshtop.htm"
Set xh = WScript.CreateObject("microsoft.xmlhttp")
xh.open "GET", url, false
xh.send()
msgbox xh.responsetext
前回試したときは、IEが「オフライン作業」になっていなかったため、失敗したのだと
思います。
To: さむ さん
InputBoxのエラーの件ですが、Win98+WSH2.0の環境では100%再現するようですね。
Win2000では起こらないようです。
皆さんも試してみてください。
To: hinano さん
> のんびりとIloveyou第2弾を作ろうと計画している者です。(笑)
すでに第二弾、第三弾…第十弾と怒濤のバージョンアップが繰り返されているので、
これ以上改良の余地はないでしょう。これもオープンソースの威力ですね!
> このサイト全体をまとめてダウンロード出来るようにはしてもらえないでしょうか?
> ブラウザのキャッシュでも良いのですが・・・いろいろと不都合がありまして・・・・
> それでまとめてダウンロードしていつでもすぐに見られるような状態にあると、
> VBSを描いているときに非常に都合がよいのです。
このご意見は、いつか出るだろうなあとは思っていましたが、基本的にこれはやらないつもりです。
一番の理由は、面倒だからです。
Webページ更新の際に、いちいちアーカイブの方も更新する必要がありますし。
# あ、スクリプト化すればいいのか(^^;
容量の問題で、一回の更新に時間がかかってしまうという問題もあります。
でも、そろそろ5万ヒット達成ですし、記念としてやってもいいかな? なんて…。
やるとしたら、HTMLヘルプにしようと思います。これは検索とかができて便利ですしね。
やり方は知らないんですけど…。
まとめてダウンロードするだけなら、Webページダウンロード支援ツールを用いれば
いいのではないかと思いますが、どうでしょうか。
初めまして。
のんびりとIloveyou第2弾を作ろうと計画している者です。(笑)
冗談はそれくらいとして、要望です。
このサイト全体をまとめてダウンロード出来るようにはしてもらえないでしょうか?
ブラウザのキャッシュでも良いのですが・・・いろいろと不都合がありまして・・・・
それでまとめてダウンロードしていつでもすぐに見られるような状態にあると、
VBSを描いているときに非常に都合がよいのです。
お手をわずらわせることとなりますが、なにとぞご検討のほどよろしくお願いします。
To: さむ さん
> ごぶさたしてます。昨年の暮れ,エラーコードが文字化けしていた者です。
お久しぶりです。
もうそんなになりますか。
> (1)
> Sendkeys で,2バイト文字って送れます?
> IMEのモードとか関係してますか?やり方が分かりません。
あれは、文字を送るのではなく、キーコードを送るものですからね。
109キーボードにあるキー以外は送れないでしょう。
Alt+半角/全角でIMEをオンにした後、読みのアルファベットキー→変換キーなど→Enter
を送れば、もしかしたら変換されるかもしれません(笑)
# すごいファジーな処理だ
クリップボードの中身をCtrl+Vで貼り付けるとかはどうでしょう。
まずクリップボードに書き込む必要がありますけど(その方法については、
過去記事を参照してください)。
# AKiOSさん作の掲示板検索スクリプトを使ってください
# 本当に便利だ…
> (2)
> InputBox関数で,テキストボックスの中を削除してOKすると
> 「メモリ不足です」って出ます。なぜでしょう?
あ、この現象は私も見たことがあります。
ただ、原因がよくわからないんですよね。再現性もないし…。
また怪しいバグですかね?
一応コードを見せてもらえますでしょうか。
> (3)
> クライアントPC(Win98)からサーバー(NT Server)にバックアップする簡単な
> スクリプトを作っています。
> 昔の(文字化けしていた)PC(Win95)の時は,順調に動いていましたが,
> 今(Win98)は,途中でアベンドします。っていうのが,スクリプトのエラーでなく,ブルーバックの画面で次のように出ちゃうんです。
私はWindows98のソースコードを書いた経験がないので、エラーを見ても原因は
わからないですねえ…(^^;
> スキャンディスクや,デフラグとかいろいろやったんですが,ダメです。
> MCSCAN32.VXD が壊れてるんでしょうか?
> もしそうなら,どなたか修復の方法をご存知ありませんか?
Win98なら、システムファイルチェッカーというツールを使えば簡単にできます。
「ファイル名を指定して実行」から
sfc
と入力すれば立ち上がります。
To: AKiOS さん
> xmlhttpのresponsetextですが、Shift_JISでもおかしいです。(^^;
> 漢字の部分がゴミと化しています。
あの文字コードは何なんでしょうね。
> >一応、ファイルは作られるんですが、中身が空です。
>
> どうやら、あまり期待しないほうがよさそうですね。
そんな…、すぐにあきらめたらいけません(笑)
> ところで、最近無償公開された Borland C++ Compiler 5.5 があるのですが、
> ActiveX(というかCOMですよね?)は、このCコンパイラ+APIで開発できる
> ものなんでしょうか?
そもそもあれって、Winアプリの開発もできるんでしたっけ?
ActiveXコントロールは、VB5 CCE(Control Creation Edition)で作れます。
昔は無償公開されていたのですが、今はどうなんでしょ。
> HTAって、ステータスバーがないのでなんか不恰好ですね。
> # それらしきものはApplicationタグには見当たらないし…。
私も思います。
ちょっとしたメッセージを表示させるのにステータスバーは便利なのに…。
HTAは、まだ洗練されているとはとても言いがたいですね。
だいたい、Heightとかのプロパティが初期設定できないという時点で
アプリケーションと名乗るのはどうかと思いますね。
To: みのみの さん
> 自動的にメール送信するスクリプトを作成しているのですが、
> 複数の宛先にメールすることができず困っています。
>
> セミコロンの後が省略されているようなのですが・・・。
# えっと、ここは一つ"I Love You"のソースを参考にして…(おい)
根本的な疑問なんですが、メールアドレスのスプリッタは、セミコロンではなく
コンマなのでは?
# セミコロンでも良かったのでしたっけ?
初めまして。
自動的にメール送信するスクリプトを作成しているのですが、
複数の宛先にメールすることができず困っています。
セミコロンの後が省略されているようなのですが・・・。
(下のスクリプトだと、aさんだけにしか送られません)
なんとも初心者風味な質問で恥ずかしいのですが、どなたかご教授ください。
------
Dim myOlApp
Dim myNamespace
Dim myItem
Set myOlApp = WScript.CreateObject("Outlook.Application")
Set myNamespace = myOlApp.GetNamespace("MAPI")
Set myItem = myOlApp.CreateItem(0)
myItem.To = "aさん; bさん"
myItem.Subject = "test"
myItem.Body = "test"
myItem.Send
Set myItem = Nothing
Set myNamespace = Nothing
Set myOlApp = Nothing
------
To: 管理人むたぐち さん
勘違いしてました!
xmlhttpのresponsetextですが、Shift_JISでもおかしいです。(^^;
漢字の部分がゴミと化しています。
今から考えるとtelnetでテストしたとき、ちゃんと表示されたので
それで勘違いしたんだと思います。(^^;
>試してみたんですが、うまくいきませんでした。
(中略)
>一応、ファイルは作られるんですが、中身が空です。
どうやら、あまり期待しないほうがよさそうですね。
ところで、最近無償公開された Borland C++ Compiler 5.5 があるのですが、
ActiveX(というかCOMですよね?)は、このCコンパイラ+APIで開発できる
ものなんでしょうか?
PS.
HTAって、ステータスバーがないのでなんか不恰好ですね。
# それらしきものはApplicationタグには見当たらないし…。
ごぶさたしてます。昨年の暮れ,エラーコードが文字化けしていた者です。
事情があって,その後の経過とか連絡できなくてすみませんでした。
あれから,Win98 に変わって,エラーが出なくなって安心してます。
(原因は謎のままですが...)
突然ですが,質問です。
(1)
Sendkeys で,2バイト文字って送れます?
IMEのモードとか関係してますか?やり方が分かりません。
(2)
InputBox関数で,テキストボックスの中を削除してOKすると
「メモリ不足です」って出ます。なぜでしょう?
(3)
クライアントPC(Win98)からサーバー(NT Server)にバックアップする簡単な
スクリプトを作っています。
昔の(文字化けしていた)PC(Win95)の時は,順調に動いていましたが,
今(Win98)は,途中でアベンドします。っていうのが,スクリプトのエラーでなく,ブルーバックの画面で次のように出ちゃうんです。
例外 0E VXD MCSCAN32(01) + 00017F04 の 0028:C15884D4(ここでEnter)
例外 0D 0246:013F480D (ここでEnter)
例外 0E 0028:C150DF41 (ここでEnter)
ある時は,
例外 0E VXD MCSCAN32(01) + 00017F04 の 0028:C1588674(ここでEnter)
例外 0D 0246:013F480D (ここでEnter)
例外 0D 0C4C:C13F269D (ここでEnter)
スキャンディスクや,デフラグとかいろいろやったんですが,ダメです。
MCSCAN32.VXD が壊れてるんでしょうか?
もしそうなら,どなたか修復の方法をご存知ありませんか?
再インストールはできれば避けたいのですが.....。
よろしくお願いします。
To: AKiOS さん
検索HTA、ありがたくいただきました。
みなさんにも公開したいと思います。
これは本当によくできたスクリプトです。
私なんかが書くスクリプトとは格が違いますよ(爆)
> microsoft.xmlhttp は HTTP(HyperText Transfer Protocolの略で、Webブラウザ
> とWebサーバーの間で行われる通信プロトコル)を利用するための ActiveX では
> ないでしょうか。。。
なるほど、IEが内部的に利用しているコンポーネントなんでしょうね。
htmlhttpがないのが気になりますが、xmlhttpに内包されているってことでしょう。
> 確かにそうなんでしょうけど responsetext に限っては、Webサーバーの応答の
> 本文が生のまま格納されているんだと思います(たぶん)。
私も試してみましたが、確かにそんな感じでした。
> >オブジェクトブラウザで見ると、DOMDocumentクラスに
> >doctypeプロパティや、saveメソッドとかの怪しいメンバがありますね。
>
> おお、save() があるんですね。ちょっと調べてみます。
試してみたんですが、うまくいきませんでした。
url = "http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/"
Set xh = WScript.CreateObject("microsoft.xmlhttp")
xh.open "GET", url, false
xh.send
Set xml=xh.responseXML
xml.save "C:\test.htm"
一応、ファイルは作られるんですが、中身が空です。
他のプロパティの挙動もおかしいし、やはりXMLじゃないとダメなのかもしれません。
要研究。
> # オブジェクトブラウザがほしーーーい!。
VB5 CCEをダウンロードするとか(笑)
# ↑まだあるのでしょうか…
OLE/COM Object Viewerをお使いになってはいかが?
「技術情報」のところで紹介していますので。
すみません、前回の投稿で文字化けしてしまいました。
管理人むたぐち さん:
>MSの公式文書はどこかにあるのでしょうか?
>microsoft.xmlhttpの位置付けって、どういうものなのか、いまいちわからないです。
>いったいどこで使われているものなのでしょう。
microsoft.xmlhttp は HTTP(HyperText Transfer Protocolの略で、Webブラウザ
とWebサーバーの間で行われる通信プロトコル)を利用するための ActiveX では
ないでしょうか。。。
また、HTTP についてですが手元にある雑誌によると、
・HTTP/1.0 : RFC 1945
・HTTP/1.1 : RFC 2616
で規定されていて W3C のサイトで公開されているそうです。
>IEやWSHのVBS/JSは、内部的にはUnicodeで処理されているはずなので、HTMLの文字列
>がEUCだろうがShift-jisだろうが、(IEが正しく文字コードを認識しさえすれば)結局は
>Unicodeに変換される…ということはないでしょうかね。やってみないとわかりませんが。
確かにそうなんでしょうけど responsetext に限っては、Webサーバーの応答の
本文が生のまま格納されているんだと思います(たぶん)。
WScript.Echo() で出力してみると Shift_JIS 以外のページの場合、漢字の部分が
ゴミ(表現できない文字コードは'?'に変換されるみたい)になっていて、
TextStream オブジェクトの Write() でファイルに書き込もうとするとエラーに
なります。
>オブジェクトブラウザで見ると、DOMDocumentクラスに
>doctypeプロパティや、saveメソッドとかの怪しいメンバがありますね。
おお、save() があるんですね。ちょっと調べてみます。
# オブジェクトブラウザがほしーーーい!。
邂″隱羣阪窶縺溘$縺。 縺輔sシ
>MS縺鈬K蠑乗枚譖後甎縺疇紂諷甄縺ゅk縺聶F縺励g縺縺?
>microsoft.xmlhttp縺謳Y藹謠o紂驟瓧縺聰紜甃紂粤甃紕矼甌縺聶M縺九√>縺上瓱紜e眈紂諷皺紜聶G紜痃蛟
>縺縺」縺溘>縺疇紜真繧上l縺聶G紕諷發紜医瓷縺聶F縺励g縺縲
microsoft.xmlhttp 縺ッ HTTPシHyperText Transfer Protocol縺D縺у燹クeb繝悶Λ繧聶エ
縺ィWeb繧球禺繝舌シ縺ト紜垂W紕閻盡紕鞫默羶≦穃絋祕紊球祀シ峨r蛻碕ヲ縺吶k縺溘a縺ョ ActiveX 縺у甎
縺聶G紜疥紕艱甃紂諷爐蛟ゅ
縺上痾蛟?TTP 縺瓩縺縺ヲ縺у痃紂跌藏腥竇甄縺ゅk髮題カ紜皸紕諷瓱縲
繝サHTTP/1.0 : RFC 1945
繝サHTTP/1.1 : RFC 2616
縺ю┥膊壹&繧後※縺縺ヲ W3C 縺聶ウ繧ゅ祕紜峨K髢九&繧後※縺繧九◎縺縺у痃蛟
>IE繧ЦSH縺ョVBS/JS縺燿腴繿礙逧縺ォ縺ッUnicode縺ч胼逅縺輔l縺ヲ縺繧九∴疽紜聶M縺у燹ゥTML縺鴉ャ膈怜
>縺窪UC縺繧阪≧縺郡hift-jis縺繧阪≧縺後(IE縺梧B縺励¥譁蜃m紊球禺繝峨r隱崎o紂疂紂蒹痃紕跂甍)邨仙ア縺ッ
>Unicode縺潟ー莉疂紕跂盒艢聶G縺縺縺薙→縺瓷縺縺ァ縺励g縺縺九∞爐紕粤瓧縺聶^縺聶G紜聶シ紂諷盍紜舌疼紕黼畍蛟
遒阪甼紜痒紂聽瓷繧薙〒縺励g縺縺代← responsetext 縺啄_紜ュ瓲縺燹クeb繧球禺繝舌シ縺闡w薛斐ョ
譛鴉ャ紂跋ワ紜医畩縺場⊆邏阪&繧後※縺繧九s縺縺鰲リ紂粤畩縺呻式紜≦甼繧難鴫蛟
WScript.Echo() 縺ч膾蜉帙@縺聶^繧九→ Shift_JIS 莉リμ紜医龝絋上盡縺閨イ蜷医∵滋蟄励ョ驛鈕ェ紂
繧翫竈饉郁;迴上瓰縺阪↑縺譁蟄励さ繝弱祺紜ア'?'縺潟ー莉疂紕跂盒紜槽痾紂紆床紜瓷縺e瓲縺縺ヲ縲
TextStream 繧聹k紊阪皈繧祕紜ー Write() 縺у稱紊e發繝甄譖後畉蠑弱發紂聽瓱縺吶k縺聶ヲ繝禺縺ォ
縺聶イ紜舌痃蛟
>繧聹k紊阪皈繧祕絅聹H繧聶エ縺ю╋紕諷瓱縲.OMDocument繧礬繧劫甄
>doctype繝励Ο繝代ユ繧e皋蛟《ave繝≦盻繝繝峨>聶U紜磯爲縺励>繝≦祿繝舌′縺ゅj縺上痃紜烽
縺翫♀縲《ave() 縺後≠繧九s縺у痃紜爐紜e皰紜ュ瓱隱水畊縺聶^縺上痃蛟
# 繧聹k紊阪皈繧祕絅聹H繧聶エ縺後⊇縺励シ繝弱禺縺滋蛟
> 私はもう IE で検索するの疲れたので、HTA で検索プログラムを作りました。
> ほしい人いますか?
ください(爆)
私も疲れています(^^;
もしよろしければ、うちのページで公開させてください。
というか、自分で作れって?
# 書き込みスクリプトなんか私しか使わない
# ようなものを公開してどうするんでしょうね(^^;
というかというか、こんな掲示板をいつまでも使っているというのが
そもそも間違いですよねゥァ」
Microsoft三分割か…。
OS・アプリ・インターネット部門に分かれることになるかもしれないそうです。
これでやっていけるんだろうか…。生き残る可能性があるのはアプリ部門だけ
という気がするんですが。
インターネット部門って、具体的に何をするんだろう?
To: AKiOS さん
> これを使って、ステータスを調べればできると思います。
> たとえば、こんな感じです。
貴重な情報提供、ありがとうございます。
そんなこともできるんですね。
MSの公式文書はどこかにあるのでしょうか?
microsoft.xmlhttpの位置付けって、どういうものなのか、いまいちわからないです。
いったいどこで使われているものなのでしょう。
> ところで xh.responsetext が Shift_JIS 以外のとき使い物にならないですよね?
BASP21で文字コード変換ができたような。
# あれっ? 何か変だなあ…(^^;
DHTMLなら、
document.charset="iso-2022-jp"
とかで表示されている文字コードを変更できますが(この場合はJISで表示)、
文字列としての扱いはどうなるのでしょうね。
IEやWSHのVBS/JSは、内部的にはUnicodeで処理されているはずなので、HTMLの文字列
がEUCだろうがShift-jisだろうが、(IEが正しく文字コードを認識しさえすれば)結局は
Unicodeに変換される…ということはないでしょうかね。やってみないとわかりませんが。
関係ないですけど、
FileSystemObjectはShift-jisのほかに、Unicodeのファイルも開けるというのは、
意外と知られていないかもしれない…。
> IE はソースの表示ができるので、もしかしたら(HTA なら)別の方法が
> あるのかと思い、質問させていただきました。
AKiOSさんがやられているのは、HTAのフレームにWebページを読み込んでやり、
そのドキュメントに対して操作をおこなうということだったんですね。
勘違いしてました。
HTAなら、frames(0)でフレームのWindowオブジェクトが取得できるだけ
まだましですよね(^^;
そういう問題ではないか。
> で、過去ログ読んでたら microsoft.xmlhttp を見つけたのですが、
> レスポンスが Shift_JIS 以外のとき、どうすることもできないんですよね。
> # save() とかでファイルに書きこめたらいいのに…。
まったく試していませんが、
responseXMLプロパティの返り値はオブジェクトですので、これからドキュメントの
中身にアクセスできるのかもしれません。
オブジェクトブラウザで見ると、DOMDocumentクラスに
doctypeプロパティや、saveメソッドとかの怪しいメンバがありますね。
見当はずれかもしれないですが、時間があったら試してみたいですね。
どなたか研究してみませんか? (他力本願モード…)
> >DocumentCompleteイベントは、各フレームが読み込まれるごとに発生するようです。
> >そこで、window.frames.lengthで総フレーム数を調べ、その数だけイベントが
> >発生すれば、読み込みが完了したと判断するのはいかがでしょう。
>
> え? これって InternetExplorer オブジェクトを使わずに DocumentComplete
> イベントを調べられるんでしょうか?
…できませんね(^^;
OnLoadイベントをYAMさん法(勝手に命名!)で無理やり実行させ、大本のHTAに
記述した変数でフレームのロード完了数をカウントしていくとか…。
…どうも無理がありますね。
何かもっとスマートな方法はないものか…。
みなさん、過去記事を検索するとき、どうやって検索していますか?
私はもう IE で検索するの疲れたので、HTA で検索プログラムを作りました。
ほしい人いますか?
管理人むたぐち さん、ご回答ありがとうございます。
>location.pathnameをFileSystemObjectで開くというのはどうでしょう。
あ、先の質問2つはページの自動保存についてのつもりだったのですが、
わかりにくくてすみません。
IE はソースの表示ができるので、もしかしたら(HTA なら)別の方法が
あるのかと思い、質問させていただきました。
で、過去ログ読んでたら microsoft.xmlhttp を見つけたのですが、
レスポンスが Shift_JIS 以外のとき、どうすることもできないんですよね。
# save() とかでファイルに書きこめたらいいのに…。
>DocumentCompleteイベントは、各フレームが読み込まれるごとに発生するようです。
>そこで、window.frames.lengthで総フレーム数を調べ、その数だけイベントが
>発生すれば、読み込みが完了したと判断するのはいかがでしょう。
え? これって InternetExplorer オブジェクトを使わずに DocumentComplete
イベントを調べられるんでしょうか?
管理人むたぐち さん & オダオダ さん
>> WSHにてWebページの死活監視を実施したいのですが、できるでしょうか?
>> サンプルページにあるIE自動操縦スクリプトを改造すればできそうなのですが、
>> 指定のURLが表示できなかった場合をどう判断すればよいのか良く分かりません。
(中略)
># あとは、IE5で使えるようになった、microsoft.xmlhttpですか…。
過去ログを呼んでいたら GET の使い方のサンプル
「管理人むたぐち さん 2000年 03月 31日 16時 27分 47秒」
がありました。
これを使って、ステータスを調べればできると思います。
たとえば、こんな感じです。
--- http.js ---
function echo(s) { WScript.Echo(s); }
var url = "http://localhost/"; // ← 適当に変えてください
var xh = new ActiveXObject("microsoft.xmlhttp")
xh.open("GET", url, false);
xh.send();
//echo(xh.responsetext); // ← Shift_JIS なら問題ないけど…。
switch (xh.status) {
case 200: echo("Success!"); break;
case 404: echo("ページが見つかりません"); break;
case 500: echo("サーバー側のエラー"); break;
default: echo("status="+xh.status); break;
}
--- ここまで ---
ところで xh.responsetext が Shift_JIS 以外のとき使い物にならないですよね?