しんたろう さん (shintaro_n@pop21.odn.ne.jp) 2000年 09月 07日 09時 59分 14秒

こんにちは、はじめまして、しんたろうです。

早速ですが、質問があります。
クライアントサイドのVBスクリプトより、Wscriptにて作成したVBSファイルを
呼ぶにはどのようにしたらよろしいのでしょうか?
ご教授お願いいたします。

ts さん 2000年 09月 07日 03時 37分 19秒

むたぐちさん、ありがとうございます。

うまくいきました。

> というか、もう出ていますね。
> http://www.borncity.de/WSHBazaar/WSHRas.htm

管理人むたぐち さん 2000年 09月 07日 00時 29分 44秒

というか、もう出ていますね。
http://www.borncity.de/WSHBazaar/WSHRas.htm

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2000年 09月 07日 00時 27分 00秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

To: Makoto さん

> あれ、私の使っている Iria はコンポーネントとしての機能は無いです...
> ヴァージョンが古いのかな?

私がインストールしているのは1.05です。
コンポーネント化は結構最近かもしれません。

IEの右クリックメニューの拡張方法の良い参考例になります。
# 個人的に、付属の*.htmがVBSで書いてあるのがうれしい。




To: AKiOS さん

> いえ、Technology Preview です。
> テストマシンを用意する必要があります。(^^;

そんな余裕はないなあ。
やはり正式版が出るまで待つことにします。
で、正式版はWindows.NET(ってWhistlerとは違うの?)に同梱?

> > でも着想がユニークだと思いませんか?
>
> えっと、よくわからないのですが、(^^;
> どれのことでしょうか?

DynaCallというコンポーネントそのものです。
オートメーションで無理やりAPIを使えるようにするという着想です。
API関数の引数の型を指定する方法も、ちょっと面白いなあと思いました。




To: ts さん

> ダイヤルアップ接続の確立と切断をWSHから行うための
> COMオブジェクトを探しています。

かのDynaCallの作者でもある(?)G.Bornさんが、最近、まさにそのための
コンポーネントを製作し、ネットニュースにプレリリース版を公開されていました。

Newsgroups: microsoft.public.scripting.wsh
Subject: Re: Connect to my ISP via WSH
From: "G・ter Born" <GBorn<nospam>@borncity.de>
Date: Mon, 7 Aug 2000 09:57:24 +0200
Message-ID: <#Tv5tkEAAHA.221@cppssbbsa02.microsoft.com>

そのうちWSH Bazaarで、正式版が公開されることでしょう。

# それにしてもほんの1ヶ月前のことなんですね、これ。
# それまでは、なかったということなんでしょう。

ts さん 2000年 09月 06日 18時 37分 40秒

tsです。
いつもお世話になります。

ダイヤルアップ接続の確立と切断をWSHから行うための
COMオブジェクトを探しています。
ご存じのかた、ご教示お願い致します。

AKiOS さん 2000年 09月 06日 12時 22分 06秒

To: 管理人むたぐち さん

> > Preview版ですね。
>
> ということは、βよりは、正式版に近いということですね(^^;

いえ、Technology Preview です。
テストマシンを用意する必要があります。(^^;

> もしいろいろなソフトに対応するのなら、コマンドライン引数を自分で設定できる
> ようにする必要が出てくると思います。

そうですね。iniファイルの
download=
で設定できるようにしたいと思います。

> でも着想がユニークだと思いませんか?

えっと、よくわからないのですが、(^^;
どれのことでしょうか?

Makoto さん 2000年 09月 06日 02時 43分 40秒



むたぐち さんへ

>> # GetRef関数はDHTMLのイベントハンドラ限定らしい…。

IDispatchEx を使っているんでしょう
このインターフェイスを使っているCOMオブジェクトは可能なはずです
ただ新しい目のものなので対応してる物は現在皆無ですが...

IDispatchEx とは実行時に動的なメソッドの追加削除を可能にした
オートメーションインターフェイスです


>>> その文字列のアドレスを取得しないといけません

これは出来ません、っていうか出来たら困ります
また、BSTR型は VB の String型と同じ Unicode な構造体ですが
スクリプトを使ってる限りこういう内部構造を知る必要は無いですよね


>>やはりAPIを使ってコンポーネントをつくり、それを利用するというのが
>>正しい方法のようです。

そうですね、VB ならごっつう簡単に作れちゃいますよね


>>Iriaだとどうだったかな…。

あれ、私の使っている Iria はコンポーネントとしての機能は無いです...
ヴァージョンが古いのかな?
# ReGet はコンポーネントしてるけど





AKiOS さんへ

>>残念なお知らせなんですが、IE5.5では非表示モードでHTAファイル
>>の実行ができないことがわかりました(必ず表示されてしまう)。

これ、待ってたんですが、残念です...
IE 5.0 限定で公開するのはダメですか?
(ソースが見てみたいです)


管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2000年 09月 05日 23時 41分 46秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

To: AKiOS さん

> Preview版ですね。

ということは、βよりは、正式版に近いということですね(^^;

> 各人好みのダウンロードプログラムが使えるようにボタンをクリック
> したら、指定したダウンロードプログラムを起動するようにしようと
> 思っているのですが、いかがでしょう?

それは良いですね。
もしいろいろなソフトに対応するのなら、コマンドライン引数を自分で設定できる
ようにする必要が出てくると思います。

Iriaだとどうだったかな…。
Inetコントロールで自作した方が早いか?

> チャレンジャーですね。(^^;

チャレンジャーではなく、無知なだけです。
でも、ちょっと背徳的な雰囲気(ってなんだ)が楽しいかも。

> APIを使う場合は、素直にVBやC/C++でプログラミングしたほうが
> かえって簡単にできるんじゃないでしょうか。。。

そうでしょうね。
でも着想がユニークだと思いませんか?

> 残念なお知らせなんですが、IE5.5では非表示モードでHTAファイル
> の実行ができないことがわかりました(必ず表示されてしまう)。
> よって、<hta:application>タグの属性を拡張するツールの開発は
> 凍結しました。

AKiOSさんとこの件でメールをやり取りしたのですが、ここで書くのを
忘れていました。
で、残念ですがそういうことです。
WshShell.Run hoge.hta,0 → window.resizeTo のコンボも効かなくなっています。



To: Makoto さん

> たとえポインタを得られたとしても、ダメですね

以下、私にとっては難しい解説でしたが、どうもありがとうございました。
たぶんお分かりだと思いますが、私はAPIのことはさっぱりわかりません(^^;

> スクリプトで扱う文字列は BSTR 型なので、クリップボードで扱う
> \0 で終わる文字列に変換しなければなりません

& Chr(0) とかでしょうか。そんな単純なものではないですか…。

> そしてそれをグローバルメモリにコピーする訳ですが
> その文字列のアドレスを取得しないといけません
> それって出来たかな?

どうなんでしょうね。私もこれの具体的な方法がわからず挫折しました。
VBでならできるのでしょうか。

> # だから、API なんてスクリプトでは使わないって...

はい。それが良さそうです。
やはりAPIを使ってコンポーネントをつくり、それを利用するというのが
正しい方法のようです。

まあ、ちょっとした興味で使う分には構わないでしょう(^^;
私もほんのちょっぴりですが、APIというものに触れることが出来たわけですし。



To: Lib30 さん

> スクリプトから私がよく使うAPIはワイルドカードにマッチしているかどうか調べるやつです。

実際に使っていらっしゃるんですね。
やはり、こういう的を絞った使い方は効果的なようですね。

> VBScriptにはLike演算子がなく(Like演算子は全角半角を区別しないためあまり使えないが)、

全然関係ないですが、
select...caseステートメントで、To が省かれたのは何故だろう。
使いにくくて仕方がないです。

With...End Withのように、バージョンがあがってリバイバルしたものもありますね。
どういう基準で取捨選択されているのか、ちょっと興味があります。

> これって、レジストリを書き換えたあと表示されているページを再読み込みする、というのではできないでしょうか?

やってみたんですが、反映されないのです。
残念ながら再起動しかないです。



To: こすけ さん

> ちょっと教えていただきたいのですが、WSHから別ファイルのWSHを呼び
> 出して処理を実行出来ますか。

できます。
WshShell.Run "other.vbs"
とかです。詳しいことは、Runメソッドについてお調べください。

> もし引数なんかも渡せたらよいのですが。

WshShell.Run "other.vbs option"

のように、普通に引数を渡せます。
other.vbs側では、WshArgumentsオブジェクトを使って引数を読み込めます。
Lesson12など参考にしてみてください。

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2000年 09月 05日 23時 39分 55秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

To: AKiOS さん

> Preview版ですね。

ということは、βよりは、正式版に近いということですね(^^;

> 各人好みのダウンロードプログラムが使えるようにボタンをクリック
> したら、指定したダウンロードプログラムを起動するようにしようと
> 思っているのですが、いかがでしょう?

それは良いですね。
もしいろいろなソフトに対応するのなら、コマンドライン引数を自分で設定できる
ようにする必要が出てくると思います。

Iriaだとどうだったかな…。
Inetコントロールで自作した方が早いか?

> チャレンジャーですね。(^^;

チャレンジャーではなく、無知なだけです。
でも、ちょっと背徳的な雰囲気(ってなんだ)が楽しいかも。

> APIを使う場合は、素直にVBやC/C++でプログラミングしたほうが
> かえって簡単にできるんじゃないでしょうか。。。

そうでしょうね。
でも着想がユニークだと思いませんか?

> 残念なお知らせなんですが、IE5.5では非表示モードでHTAファイル
> の実行ができないことがわかりました(必ず表示されてしまう)。
> よって、<hta:application>タグの属性を拡張するツールの開発は
> 凍結しました。

AKiOSさんとこの件でメールをやり取りしたのですが、ここで書くのを
忘れていました。
で、残念ですがそういうことです。
WshShell.Run hoge.hta,0 → window.resizeTo のコンボも効かなくなっています。



To: Makoto さん

> たとえポインタを得られたとしても、ダメですね

以下、私にとっては難しい解説でしたが、どうもありがとうございました。
たぶんお分かりだと思いますが、私はAPIのことはさっぱりわかりません(^^;

> スクリプトで扱う文字列は BSTR 型なので、クリップボードで扱う
> \0 で終わる文字列に変換しなければなりません

& Chr(0) とかでしょうか。そんな単純なものではないですか…。

> そしてそれをグローバルメモリにコピーする訳ですが
> その文字列のアドレスを取得しないといけません
> それって出来たかな?

どうなんでしょうね。私もこれの具体的な方法がわからず挫折しました。
VBでならできるのでしょうか。

> # だから、API なんてスクリプトでは使わないって...

はい。それが良さそうです。
やはりAPIを使ってコンポーネントをつくり、それを利用するというのが
正しい方法のようです。

まあ、ちょっとした興味で使う分には構わないでしょう(^^;
私もほんのちょっぴりですが、APIというものに触れることが出来たわけですし。



To: Lib30 さん

> スクリプトから私がよく使うAPIはワイルドカードにマッチしているかどうか調べるやつです。

実際に使っていらっしゃるんですね。
やはり、こういう的を絞った使い方は効果的なようですね。

> VBScriptにはLike演算子がなく(Like演算子は全角半角を区別しないためあまり使えないが)、

全然関係ないですが、
select...caseステートメントで、To が省かれたのは何故だろう。
使いにくくて仕方がないです。

With...End Withのように、バージョンがあがってリバイバルしたものもありますね。
どういう基準で取捨選択されているのか、ちょっと興味があります。

> これって、レジストリを書き換えたあと表示されているページを再読み込みする、というのではできないでしょうか?

やってみたんですが、反映されないのです。
残念ながら再起動しかないです。



To: こすけ さん

> ちょっと教えていただきたいのですが、WSHから別ファイルのWSHを呼び
> 出して処理を実行出来ますか。

できます。
WshShell.Run "other.vbs"
とかです。詳しいことは、Runメソッドについてお調べください。

> もし引数なんかも渡せたらよいのですが。

WshShell.Run "other.vbs option"

のように、普通に引数を渡せます。
other.vbs側では、WshArgumentsオブジェクトを使って引数を読み込めます。
Lesson12など参考にしてみてください。

こすけ さん 2000年 09月 05日 17時 28分 45秒

こんにちは はじめまして
ちょっと教えていただきたいのですが、WSHから別ファイルのWSHを呼び
出して処理を実行出来ますか。
確かどこかで、この様な事が出来ると読んだ記憶があるのですが何処で読んだか
どのように作成すればよいのか思い出せません。(VBSです)
私の記憶違いでしょうか。

解かりましたら教えてください。
もし引数なんかも渡せたらよいのですが。

よろしくお願いいたします。


Lib30 さん (lib30@yo-mail.co.jp) 2000年 09月 04日 23時 50分 08秒
URL:http://www.ob.aitai.ne.jp/~kazoo/

スクリプトから私がよく使うAPIはワイルドカードにマッチしているかどうか調べるやつです。
VBScriptにはLike演算子がなく(Like演算子は全角半角を区別しないためあまり使えないが)、
正規表現とは微妙にパターンが違うので、これをスクリプトのみで実装するのはかなり困難だと思われるからです。


ちょっと前の話題なんですけれども...

>> インターネットオプション(画像の表示・非表示など)を外部より操作し
>> ブラウザで反映させたいのですが
>> WSHでこのような操作は行えるのでしょうか?

> ただ、ブラウザの再起動が必要と書かれていますが
> 再起動無しで即反映なんてのは出来ないのでしょうか?

これって、レジストリを書き換えたあと表示されているページを再読み込みする、というのではできないでしょうか?

AKiOS さん 2000年 09月 04日 14時 14分 07秒

To: 管理人むたぐち さん

> あと、これは私の知識不足によるのですが、グローバルメモリって何?

ヒープのことですね。
ヒープとは動的にメモリを確保するときに使われる領域のことです。

> # それにしても、APIを呼び出しそこなったら、WSHが確実に落ちますね(^^;
> # APIを使うって、やっぱり覚悟が要るのかも。

チャレンジャーですね。(^^;
APIを使う場合は、素直にVBやC/C++でプログラミングしたほうが
かえって簡単にできるんじゃないでしょうか。。。

PS.
残念なお知らせなんですが、IE5.5では非表示モードでHTAファイル
の実行ができないことがわかりました(必ず表示されてしまう)。
よって、<hta:application>タグの属性を拡張するツールの開発は
凍結しました。

Makoto さん 2000年 09月 04日 02時 27分 47秒

>>また、VBSにはAddressOf演算子がないため、コールバック関数の関数ポインタを
>>引数に取る関数が使えません。
>>GetRef関数で代用できるかと思ったのですが、やっぱりだめでした。

たとえポインタを得られたとしても、ダメですね
API が使うコールバック関数の方は
引数のスタックのつみ方と、その破棄の仕方を
ある決められた形でコーディングされたサブルーチンのアドレスです
GetRef で得られるのは
アウトゴーイングインターフェイス(又はソースインターフェイス)
というイベント用の IDispatch インターフェイスです(v-table)
2つは似ても似つかない別物です


>>あと、これは私の知識不足によるのですが、グローバルメモリって何?

グローバルメモリは Win32 では普通のメモリです


>>実は、クリップボードにテキストを書き込むスクリプトを作ってみようと

スクリプトで扱う文字列は BSTR 型なので、クリップボードで扱う
\0 で終わる文字列に変換しなければなりません
そしてそれをグローバルメモリにコピーする訳ですが
その文字列のアドレスを取得しないといけません
それって出来たかな?

# COM の世界ではメモリの扱いは非常に厄介な物になっていて
# プロセスが違う場合、マーシャリングというのがシステムで行われます
# 単純にアドレス値を扱えばOKというものではありません

# だから、API なんてスクリプトでは使わないって...


AKiOS さん 2000年 09月 03日 23時 27分 45秒

To: 管理人むたぐち さん

> でも、このSDKはまだβ版ではありませんでしたか?

Preview版ですね。

> AKiOSさんは、どのようにしてHTMLをコピーされているのでしたっけ?

新着記事のみをダウンロードするプログラムを自作しました。

> ダウンロード用にIriaというソフトを入手したので、
> これを使おうかな。IEのキャッシュはあきらめるしかないですね。

各人好みのダウンロードプログラムが使えるようにボタンをクリック
したら、指定したダウンロードプログラムを起動するようにしようと
思っているのですが、いかがでしょう?

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2000年 09月 03日 17時 44分 07秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

DynaCallを使ってWSHからAPI関数を使うのには限界もあります。

まず、VBSでは、Type...End Typeステートメントがサポートされていないため、
ユーザー定義型(要するに構造体ですね)を定義することができないので、
構造体を引数に取るAPI関数は使用できません。
# だから、AKiOSさんが21-21で提案された方法は、WSH+DynaCallでは実現不可能でした(^^;

また、VBSにはAddressOf演算子がないため、コールバック関数の関数ポインタを
引数に取る関数が使えません。
# EnumWindowsとかが駄目です。
GetRef関数で代用できるかと思ったのですが、やっぱりだめでした。
# GetRef関数はDHTMLのイベントハンドラ限定らしい…。

あと、これは私の知識不足によるのですが、グローバルメモリって何?
実は、クリップボードにテキストを書き込むスクリプトを作ってみようと
思ったのですが、これは私の手には余りました。
OpenClipboard はいいのですが、SetClipboardDataA の引数に何を与えたものか…。

それで痛感したのですが、やはりVBのClipBoardオブジェクトや、クリップボードを扱う
COMコンポーネントは、ほんとうに使いやすく作られているんですね。

# それにしても、APIを呼び出しそこなったら、WSHが確実に落ちますね(^^;
# APIを使うって、やっぱり覚悟が要るのかも。

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2000年 09月 03日 04時 56分 33秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

とつぜんですが、DynaCall(Dyna Wrapperが正式名称かな?)の
使用例です。

VBではWAVEファイルを鳴らすとき、

Private Declare Function sndPlaySound Lib "winmm.dll" _
Alias "sndPlaySoundA" (ByVal lpszSoundName As String, _
ByVal uFlags As Long) As Long

としますが、これをDynaCallで実現するには、

Set UserWrap = CreateObject("DynamicWrapper")
UserWrap.Register "winmm.dll", "sndPlaySoundA", "I=sl","f=s", "R=l"
UserWrap.sndPlaySoundA "c:\windows\media\chord.wav",1

のようにします。
Registerメソッドのパラメータの意味については付属ドキュメントを
見てください。I=slで、string,long型の引数を取り、R=lでlong型の
値を返すことを指定しています。

Win2000では、NT用のdynwrap.dllをRegSvr32で登録すると
動きました。

別にWin32APIに限らず、いろいろなDLLを使えると思います。
オートメーションをサポートしていないソフトでも、WSHから
利用できるようになるというメリットは大きいです。

http://ourworld.compuserve.com/homepages/Guenter_Born/index0.htm
からダウンロードできますので、興味のある方はどうぞ。
(わずか40KBほどです)



管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2000年 09月 03日 01時 52分 53秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

To: mamepi さん

> 検索サイトで出てくる多くのWSH関連サイトは難しすぎるので、
> 重宝しそうです。

そういえば、うちはあまり検索サイトでは出てきませんね。
最近は更新も止まっていてあまり良くないですね。
あちらこちらに不十分なところがありますが、そういうところは他のサイトで
補ってくださいませ。




To: Makoto さん

> # これ、API 知ってる人も使わないでしょう
> # だってスクリプトでそんな事しないから...

そうでもないと思いますよ。
microsoft.public.scripting.wshではしょっちゅう紹介されている
コンポーネントです。
たしかに、VBからAPIを呼び出すのと同じく、あまり多用すると本来の「お手軽さ」が
失われてしまうので注意が必要ですが、ポイントを押さえて利用すればなかなか
効果的だと思います。

Makoto さん 2000年 09月 03日 01時 19分 03秒

>>DynaCallです。
>>リンクページで紹介しています。

なるほど、そんなのがあったのですか
あっ、でも これ API 知ってないと使えませんね.....z..z..zzz

# これ、API 知ってる人も使わないでしょう
# だってスクリプトでそんな事しないから...

mamepi さん (mamepi@mbj.sphere.ne.jp) 2000年 09月 02日 22時 35分 26秒
URL:http://www.mars.sphere.ne.jp/mame/

はじめまして、
検索サイトで出てくる多くのWSH関連サイトは難しすぎるので、
重宝しそうです。
これからもよろしく。

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2000年 09月 02日 19時 28分 36秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

○IE5.5の新機能 - その1

IE5.5をインストールしても、見た目はどこがどう変わったのかよくわからない
ほどの微妙な変化しかないですが、内部的には結構いろいろ変わっているようです。

印刷プレビュー機能(もともとHTMLのサムネイル表示機能があるので、
たいして驚きもないです(^^;)、DHTMLの機能増強(縦書き・色つきスクロールバー・
ポップアップetc)などの一般受けする部分はおいといて、ここではIEのCOM
コンポーネント部分の仕様変更を中心に見ていきましょう。

・WebBrowser(InternetExplorer)オブジェクト
WindowClosing(IsChildWindow As Boolean, Cancel As Boolean)
WindowSetHeight(Height As Long)
WindowSetLeft(Left As Long)
WindowSetResizable(Resizable As Boolean)
WindowSetTop(Top As Long)
WindowSetWidth(Width As Long)
というイベントが追加されました。ただし、どういうときに発生するイベントなのか
よくわかりません。

・ShellNameSpaceオブジェクト
新規に追加された(IE5からだった?)オブジェクトです。
おそらく、お気に入りを制御するものです。
「お気に入りの整理」で使われているようです。
いずれ深く研究してみましょう。

・Folder3オブジェクト
Folder2オブジェクトに、ShowWebViewBarricadeプロパティが追加されたものです。
WebViewBarricadeというのは、WindowsフォルダなどでWeb表示しているとき、
ファイル表示を抑制する機能(実際は、folder.httが実現している)です。

ちなみに、Folder2オブジェクトは、Folderオブジェクトに
HaveToShowWebViewBarricadeプロパティ(WebViewBarricadeがあるか否か?)
OfflineStatusプロパティ(オフラインフォルダの状態?)
Selfプロパティ(folder.Items.Itemとほぼ同じ。そのフォルダのFolderItemオブジェクトを返す)
DismissedWebViewBarricadeメソッド(WebViewBarricadeを無効にする?)
Synchronizeメソッド(オフラインフォルダの同期)
を追加したものです。Folder2,3オブジェクトは、Win2000のshell32.dllの機能を
呼び出すものなので、Win98からは使えません。

疲れたので続きはまた今度…。



To: AKiOS さん

> .NET SDK一式(C#のコンパイラ・ドキュメント・実行環境含む)が
> ダウンロードできるようになったのですが、なんと86MBもあって
> 躊躇しています。

この情報は私も某所でキャッチ済みでした。
容量の情報も(^^;
さすがに、私にはダウンロードは無理です。

> # アスキーから近々「C#入門」が出るらしいのですが、この書籍に
> # 付録として付いてこないかな、なんて勝手に期待しています。(^^;

ついてくる可能性はありますね。
でも、このSDKはまだβ版ではありませんでしたか?

Windowsプログラミング系雑誌の付録についてくるのではと見ているのですが、
見かけた方は、ご報告お願いします。

> あらら、それならdownload.jsはもう不要になりましたね。
> 私もすでに使っていないことだし、記事検索HTAから利用できなくなっても
> 問題ないでしょうか?

AKiOSさんは、どのようにしてHTMLをコピーされているのでしたっけ?

> > # 新しく開いたウィンドウからファイルをダウンロードするとそのウィンドウが
> > # 勝手に閉じてしまうし(これ、信じられないことに仕様らしいです)。

という仕様のため、ダウンロード用にIriaというソフトを入手したので、
これを使おうかな。IEのキャッシュはあきらめるしかないですね。

oDocument.body.parentElement.outerHTML で掲示板のHTMLを取り出そうとしたのですが、
元のHTMLと似ても似つかぬものになってしまいますね。一応、マークアップの仕方は
同じみたいですが、wshlab.hta に読み込ませることはできませんでした。

ところで、Iriaは、COMコンポーネントとして呼び出すことができるようなので、
WSHからWeb上のHTMLを取得するのに使えるかもしれません。



To: Santosh さん

> VBSファイルをステップ実行できるデバッガってご推薦ものありますか?
> ちなみにMicrosoft Script Debuggerでデバッグを挑戦しましたが
> VBSファイルをどう操作していいか理解できず断念しました。

スクリプトデバッガの使い方については、過去記事リスト10の16番目
の私の記事(2000/03/06 12:37)に書いてありますので、参考にしてください。

しかし、私もあまり使い方を把握していません。
On Error Resume Next とMsgBoxで十分?

そういえば、スクリプトデバッガは、COMコンポーネントとして
利用可能だったと思います。
もしかすると、自作も可能?

Microsoft製以外のデバッガがあるかどうかわかりませんが、
リンクページでも紹介している、Primal Scriptというエディタなら
もしかしたらデバッグ機能がついているかもしれません。
海外のWSHユーザー御用達のエディタらしいです。かなりいい値段がついて
いますが、それなりのことはあるらしい…。

Santosh さん 2000年 09月 02日 16時 54分 46秒

みなさま、はじめまして

VBS初心者のSantoshです。

達人のみなさまにご質問があります。
VBSファイルをステップ実行できるデバッガってご推薦ものありますか?
ちなみにMicrosoft Script Debuggerでデバッグを挑戦しましたが
VBSファイルをどう操作していいか理解できず断念しました。

AKiOS さん 2000年 09月 01日 22時 56分 22秒

To: 管理人むたぐち さん

> C#をまじめに勉強しても損はなさそうですね。

.NET SDK一式(C#のコンパイラ・ドキュメント・実行環境含む)が
ダウンロードできるようになったのですが、なんと86MBもあって
躊躇しています。
# アスキーから近々「C#入門」が出るらしいのですが、この書籍に
# 付録として付いてこないかな、なんて勝手に期待しています。(^^;

> じつは、IE5.5をインストールしてみたのですが、IE5.5ではまたこのHTAの
> 見た目が変わってしまいました。記事リストと本文がフレーム分割されていますが、
> 各フレームの枠がなくなってしまいました。
> ただ、別に違和感はないので特に問題はありません。

そうですか。
それを聞いて少し安心しましたが、ちょっと気になります。

> それと、ダウンロードスクリプトですが、IE5.5の仕様変更のため、オフライン状態で
> キャッシュの読み込みが出来なくなってしまいました。

あらら、それならdownload.jsはもう不要になりましたね。
私もすでに使っていないことだし、記事検索HTAから利用できなくなっても
問題ないでしょうか?

> # 新しく開いたウィンドウからファイルをダウンロードするとそのウィンドウが
> # 勝手に閉じてしまうし(これ、信じられないことに仕様らしいです)。
> # なんかインストールして損した気が。

なんかすごい仕様ですね。(^^;
インストールする気が失せました(笑)。

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2000年 09月 01日 17時 41分 45秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

To: Makoto さん

> ん、これ気になりますね
> 何ていうコンポーネントなんすか?

DynaCallです。
リンクページで紹介しています。

> オートメーションから呼び出せる API にも限界があると思いますが、
> どんな API が呼べるんでしょうか...

私もよく知らないのですが、VBのDeclareステートメントの代わりをするものなので、
たいていは呼び出せるのではないでしょうか。



To: AKiOS さん

> なんかのサンプルを見たことがありますが、API(DLL内の関数)を直接
> 呼び出すことができるようです。

それはすごいなあ。
C#をまじめに勉強しても損はなさそうですね。

> PS.
> 例の<hta:application>タグの属性を拡張するツールができましたので、
> Win2000でもテストしていただけませんか? >むたぐちさん

はい、喜んでお引き受けいたします。メールで送っていただけますでしょうか。

記事検索スクリプトの方ですが、以前私が書いたエラーの原因がわかりました。
「チェック中」に無理やりボタンを押していたからでした(^^;

じつは、IE5.5をインストールしてみたのですが、IE5.5ではまたこのHTAの
見た目が変わってしまいました。記事リストと本文がフレーム分割されていますが、
各フレームの枠がなくなってしまいました。
ただ、別に違和感はないので特に問題はありません。
それにしても、細かいところで仕様をころころ変えてきますね、IEは。

それと、ダウンロードスクリプトですが、IE5.5の仕様変更のため、オフライン状態で
キャッシュの読み込みが出来なくなってしまいました。
というのも、たとえオフライン状態でも、
this.xh.open("GET", url, this.async);
this.xh.send();
のところで、強制的にオンライン状態に切り替わり、ダイヤルアップ接続を促す
ダイアログが出現します。キャンセルすると、とうぜんエラーになってしまいます。

うーん、これからどうしよう…。

# Win2000+IE5.5では、Zオーダーが狂うバグが直っていないし(なぜだ!)。
# 新しく開いたウィンドウからファイルをダウンロードするとそのウィンドウが
# 勝手に閉じてしまうし(これ、信じられないことに仕様らしいです)。
# なんかインストールして損した気が。
# でも、DIV要素やTEXTAREA要素の領域が、インテリマウスのホイールでスクロール
# できるようになったのはうれしい改善点ですね。
# デスクトップのツールバーに置いたフォルダのショートカットが機能しないバグ(Win98)
# もひそかに修正されているし。



To: ezh さん

どうやら今回の私の指摘は、はずれだったようですね(^^;

> #ただ、私的にはWindows2000やIE5に問題があるのではないかと思うのですが・・・
> # ネスケでは全くでないし、再現性もまちまちだし・・・

よくわからないですが、IE5のバグかもしれませんね。
IEって、バージョンアップするたびにわけのわからないバグや
仕様が追加されている気が…。

ezh さん 2000年 09月 01日 13時 53分 21秒

To: 管理人むたぐち さん

ご回答ありがとうございます。

> もしかすると、<option>タグのvalue属性にない値をセットしようとしていませんか?

> たとえば、

> <script language="vbscript">
> Sub window_onload()
> document.test.list.value="4"
> End Sub
> </script>

> <form name="test">
> <select name="list">
> <option value="1">one</option>
> <option value="2">two</option>
> <option value="3">three</option>
> </select>
> </form>

> のようにすると、このドロップダウンリストはブランクになります。
> (Win2000+IE5.01で確認。あとでWin98+IE5.0でも試してみます)
> これなら仕様と言うか、ある意味当たり前の動作だと思います。

> DBから取得した値が、<select>タグのvalue値として設定可能かどうか(つまり、
> 各<option>タグのvalue値のどれかと一致するか)を調べるルーチンを追加しておく
> 必要があると思います。

valueに設定する値は設定可能な値(日本語文字列)のため、ご指摘内容が原因とは
考えれないと思います。

> なお、スクリプトを使わず、HTMLのみで、<select>タグを4つ並べたもの(各タグには
> <option>タグを3個含む)をWin2000+IE5.01で表示してみましたが、
> ブランクなドロップダウンリストは再現しませんでした。
> やはり、スクリプト側の問題ではないでしょうか。

結論から申し上げますと、SELECTEDタグを使用して、デフォルト値を設定しておけば
ブランク表示されるということはなくなりました。
ただ、根本的な解決にはなっていないと思うのですが、今回は
これを解決策としたいと思います。
 管理人むたぐちさん、貴重なお時間を割いて頂いて本当にありがとうございました。

#ただ、私的にはWindows2000やIE5に問題があるのではないかと思うのですが・・・
# ネスケでは全くでないし、再現性もまちまちだし・・・

AKiOS さん 2000年 09月 01日 12時 31分 51秒

To: 管理人むたぐち さん

> で、それはやはりhoge.exeの問題だと思うのです。
> そんなに長い引数を渡さなければいけないという仕様が、です。

そうなんですよね。

> > 具体的にはCreateProcess()というWindows APIを使って、子プロセスを
> > 実行します。
>
> C#ではこういうこともできるようになるんでしょうか。

なんかのサンプルを見たことがありますが、API(DLL内の関数)を直接
呼び出すことができるようです。ただ、そのサンプルを見た限りでは
APIの場合でも、関数宣言をして、どのDLLをインポートするか指定しな
ければならないのが、(#includeがないので)ちょっと気になりました。

PS.
例の<hta:application>タグの属性を拡張するツールができましたので、
Win2000でもテストしていただけませんか? >むたぐちさん



To: amataku さん

> hoge.exeはWindowsのコマンドではありません.

そういうことでしたら、hoge.exeを作った方に相談してください。
それで解決できると思いますが。

> >具体的にはCreateProcess()というWindows APIを使って、子プロセスを
> 実行します。
> ↑これJscriptでもできますか?

残念ながら、WSHの標準機能ではAPIを呼び出すことはできないので
この方法も不可ですね。

Makoto さん 2000年 09月 01日 06時 16分 55秒



>>あえてWSH(スクリプト)にこだわると言うのであれば、Win32APIを呼び出す
>>コンポーネントというのが存在するので、それを使えばいいと思いますが、

ん、これ気になりますね
何ていうコンポーネントなんすか?
オートメーションから呼び出せる API にも限界があると思いますが、
どんな API が呼べるんでしょうか...

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2000年 09月 01日 01時 54分 30秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

To: amatau さん

> hoge.exeはWindowsのコマンドではありません.hoge.exeのテストをしたいためのスクリプトなんです.だからhoge.exeが正しく動いているかをチェックするために,hoge.exe以外のものは何もいれずにテスト用のプログラムを作らないといけないのです.

うーん。hoge.exeというのが何かわからない限り、これ以上のフォローはできませんね。
リダイレクトが使える以上、少なくともコンソールアプリであるという推測は
できますが…。
hoge.exeがどういうコマンドラインオプションを受け付けるのか、とかの情報がないと…。

長い引数(それもcommand.comの制限を越えるような!)を与えるしか方法がない、という
のなら、どちらかというとhoge.exeの仕様に問題があると思いますよ。

WSHからテスト実行するときだけでなく、実際の運用でも、こういう長い引数を与える
ことは問題にならないのでしょうか?

> >具体的にはCreateProcess()というWindows APIを使って、子プロセスを
> 実行します。
> ↑これJscriptでもできますか?

WSH標準の機能ではできません。
# 将来的に、JScript.NETならできるようになるかも。

あえてWSH(スクリプト)にこだわると言うのであれば、Win32APIを呼び出す
コンポーネントというのが存在するので、それを使えばいいと思いますが、
「hoge.exe以外のものは何もいれずに」という条件を満たさないですし…。



amatau さん 2000年 08月 31日 22時 52分 58秒

みなさんありがとうございます.

AKIOSさん>
hoge.exeはWindowsのコマンドではありません.hoge.exeのテストをしたいためのスクリプトなんです.だからhoge.exeが正しく動いているかをチェックするために,hoge.exe以外のものは何もいれずにテスト用のプログラムを作らないといけないのです.

>具体的にはCreateProcess()というWindows APIを使って、子プロセスを
実行します。
↑これJscriptでもできますか?

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2000年 08月 31日 21時 32分 39秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

AKiOSさん、miraさん、フォローありがとうございました。

> で、ちなみにスクリプトから実行したい hoge.exe というのは
> Windowsの何というコマンドなんでしょう?

私にもようやくamatakuさんが直面している問題を理解できました(^^;
で、それはやはりhoge.exeの問題だと思うのです。
そんなに長い引数を渡さなければいけないという仕様が、です。

ファイルを読み込むオプションとかがあってもいいような気がします。
hoge.exe -o hoge.txt > temp.dat
みたいな感じの。

もしくは、標準入力を渡せるなら、リダイレクトという手もあるでしょう。
hoge.exe < hoge.txt > temp.dat
のように。

そういうことがhoge.exeでできるかどうか、調べてみてはいかがでしょうか。

> 具体的にはCreateProcess()というWindows APIを使って、子プロセスを
> 実行します。

C#ではこういうこともできるようになるんでしょうか。

AKiOS さん 2000年 08月 31日 17時 41分 56秒

To: amataku さん

> >単にcommand.comの文字数制限が問題ということであれば、
> 別のコマンドシェル(Vector等で探してください)を使うか、
> これはだめなんです.Windows標準からできるだけ,外れない環境下で動かさなくてはならないので,

フリーソフト等の利用はダメ、ということならわかるのですが、
Windowsのセットアップでインストールできるアプリ(WSH含む)や
コマンドだけしか使えない、ということですか?
で、ちなみにスクリプトから実行したい hoge.exe というのは
Windowsの何というコマンドなんでしょう?

> >または標準出力をリダイレクトしてコマンドを実行する単純な
> プログラムを自分で作成すればよいと思います
>
> これは,具体的にはどういうことですか?

具体的にはCreateProcess()というWindows APIを使って、子プロセスを
実行します。その際、パラメータとして渡すSTARTUPINFO構造体の
hStdOutputフィールドにあらかじめオープンしておいたファイルの
ハンドルをセットしておけば(もちろん、子プロセスがハンドルを継承
できるように他のパラメータも適宜セットしてください)、その子プロセスの
標準出力はファイルにリダイレクトされている状態になりますので、
あとは子プロセスの終了を待って、ファイルをクローズするだけです。

amataku さん (amataku@geocities.co.jp) 2000年 08月 30日 20時 15分 06秒

みなさん早速のご回答本当にありがとうございます.

To: AkiOSさん.

>単にcommand.comの文字数制限が問題ということであれば、
別のコマンドシェル(Vector等で探してください)を使うか、
これはだめなんです.Windows標準からできるだけ,外れない環境下で動かさなくてはならないので,


>または標準出力をリダイレクトしてコマンドを実行する単純な
プログラムを自分で作成すればよいと思います

これは,具体的にはどういうことですか?

すいません自分も説明不足でした.
具体的にはコマンドラインプログラム(hoge.exe)にながーーーーーい引数(longhoge)を食わせて実行し,その標準出力を受け取らなくてはならないのです.これを普通に実行させようとすると,
var shell = WScript.createObject("WScript.Shell");
shell.Run("command /c hoge.exe longhoge > temp.dat");
のようになって,hoge.exeとlonghogeをあわせて,文字列が長くなってしまい,
command.comに食わせることができなくなってしまうのです.(なってしまいませんか?)

これで,なにかよい解決案ありますか?




AKiOS さん 2000年 08月 30日 13時 29分 57秒

To: amataku さん

> 上の方法だと、command.comの制約で127文字くらいしか、引数を渡せないので、困っています。cmd.exeは98にはないし・・・

単にcommand.comの文字数制限が問題ということであれば、
別のコマンドシェル(Vector等で探してください)を使うか、
または標準出力をリダイレクトしてコマンドを実行する単純な
プログラムを自分で作成すればよいと思います。

mira さん 2000年 08月 30日 10時 23分 28秒

> amataku さん

>上の方法だと、command.comの制約で127文字くらいしか、引数を渡せないので、困っています。cmd.exeは98には
>ないし・・・

「長ーい引数を渡してファイルにリダイレクトするバッチファイル」を作って
起動するとか...(^_^;)
NT上での実験では300文字くらいでも大丈夫でした。

echo "長い文字列長い文字列・・・長い文字列" >> c:\hoge\moge.dat


管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2000年 08月 30日 03時 49分 59秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

To: Makoto さん

> + [InetSKD]ブラウザの標準コンテキストメニューに項目を追加する

お、ちゃんと公式の情報があるんですね。
ありがとうございます。また今度見てみます。

> むたぐちさんなら、おもしろいスクリプトが作れるでしょう
> 楽しみにしています、、なんて

うーん…。
なんかすでにこの分野は開拓され尽くした感もありますが…。

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2000年 08月 30日 03時 14分 22秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

To: ezh さん

> ただ、処理概要を説明いたしますと、DBから取得した値を
> SELECTタグのVALUE値として設定しているだけです。

もしかすると、<option>タグのvalue属性にない値をセットしようとしていませんか?

たとえば、

<script language="vbscript">
Sub window_onload()
document.test.list.value="4"
End Sub
</script>

<form name="test">
<select name="list">
<option value="1">one</option>
<option value="2">two</option>
<option value="3">three</option>
</select>
</form>

のようにすると、このドロップダウンリストはブランクになります。
(Win2000+IE5.01で確認。あとでWin98+IE5.0でも試してみます)
これなら仕様と言うか、ある意味当たり前の動作だと思います。

DBから取得した値が、<select>タグのvalue値として設定可能かどうか(つまり、
各<option>タグのvalue値のどれかと一致するか)を調べるルーチンを追加しておく
必要があると思います。

なお、スクリプトを使わず、HTMLのみで、<select>タグを4つ並べたもの(各タグには
<option>タグを3個含む)をWin2000+IE5.01で表示してみましたが、
ブランクなドロップダウンリストは再現しませんでした。
やはり、スクリプト側の問題ではないでしょうか。

Makoto さん 2000年 08月 30日 01時 57分 04秒
URL:http://www.geocities.co.jp/SiliconValley-Bay/4483/


>># IE5の右クリックメニューは、スクリプトで機能拡張できるようです。

MSDN ライブラリの
+ サポート技術情報
+ サポート技術情報(日本語)
+ インターネット開発
+ ActiveX Software development Kit
+ [InetSKD]ブラウザの標準コンテキストメニューに項目を追加する

にあります
むたぐちさんなら、おもしろいスクリプトが作れるでしょう
楽しみにしています、、なんて

ezh さん 2000年 08月 29日 21時 02分 44秒

To: 管理者むたぐち さん

早速の回答ありがとうございます。

>と言われましても、私はとっても困ります(^^;
>どんなスクリプトなのか書いていただかないと…。

申し訳ございません。業務用のアプリのため公開できません。
ただ、処理概要を説明いたしますと、DBから取得した値を
SELECTタグのVALUE値として設定しているだけです。

>スクリプトを使わず、HTMLだけで追試してみましたが、再現されませんでした。
>(Win98+IE5.0)

そうなんです、Windows2000のみで発生しています。また、ネスケでも
発生しません。

>ところで、ブランクになったリストを展開すると、普通に各項目が選択可能な
>状態になるのでしょうか?

通常と同じように処理ができます。

>selectedを明示した場合はどうなるのでしょうか?

実は、今の環境では確認できないため、明日確認しようと思っています。
その結果は後日お知らせしようと思っています。

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2000年 08月 29日 20時 32分 07秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

To: ts さん

> 7月1日にWord起動に関する次の投稿をさせていただき、
> むたぐちさんからアドバイスをいただきました。
> その節はありがとうございました。

いえいえ、あの時はあまりお役に立てませんでした。

> 進展はありました。エラーの規則性を発見しました。

テンプレートファイルが悪さをしていたんですか。
でも、何でこれが関係あるんでしょうね。

実はあれから私もWordを触る機会がありまして、件のスクリプトを試して
みたんですが、エラーは出ませんでした。



To: ezh さん

>   VBスクリプトを用いてSELECTタグを使用するHTMLを
>   作成しているのですが、この表示結果に誤りがあります。

と言われましても、私はとっても困ります(^^;
どんなスクリプトなのか書いていただかないと…。

>   現象としては、同一のセレクトタグを4つ並べて表示
>   した場合、1つ目や3つ目でのドロップダウンリスト
>   でデフォルト表示が行われません(ブランクが表示されます)。

スクリプトを使わず、HTMLだけで追試してみましたが、再現されませんでした。
(Win98+IE5.0)

ところで、ブランクになったリストを展開すると、普通に各項目が選択可能な
状態になるのでしょうか?

>   表示される、他のSELECTタグとその記述は全く同じです。
>   また、現状のHTMLは明示的にデフォルトの設定は行ってません。
>   ("SELECTED"を使用していない。)

selectedを明示した場合はどうなるのでしょうか?

ezh さん 2000年 08月 29日 18時 33分 23秒

始めまして
 早速ですが質問があります。
 
 ■現象(再現性があったりなかったり)
  VBスクリプトを用いてSELECTタグを使用するHTMLを
  作成しているのですが、この表示結果に誤りがあります。
  現象としては、同一のセレクトタグを4つ並べて表示
  した場合、1つ目や3つ目でのドロップダウンリスト
  でデフォルト表示が行われません(ブランクが表示されます)。
  表示される、他のSELECTタグとその記述は全く同じです。
  また、現状のHTMLは明示的にデフォルトの設定は行ってません。
  ("SELECTED"を使用していない。)
  HTMLのリロードを行うとすべてのドロップダウンリストで
  正常に表示が行われます。
 ■環境
  OS    Windows2000
  ブラウザ IE5.0(暗号強度56bitバージョン)
 
 このような、現象について、何か情報がありましたら、
 教えてください。

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2000年 08月 29日 17時 31分 50秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

To: amataku さん

> JScript、Vbscript(特にJscript)でも、コマンドラインプログラムを実行させてその標準出力にだされた結果を受け取る方法って、command /c をつかってファイルにリダイレクトし、その結果を読む以外にありますか?

残念ながら、ありません。
WSH2.0からは、実行結果を標準出力に出すことは可能ですが、標準出力を受け取る方法
はないのです。できれば便利なんですがねえ…。時代に逆行しているから採用されなかった
のでしょうか。

> 上の方法だと、command.comの制約で127文字くらいしか、引数を渡せないので、困っています。cmd.exeは98にはないし・・・

これ、ちょっとわからないんですけど、ファイルにリダイレクトする場合は、
引数の長さは関係ないと思うんですが…。

ts さん 2000年 08月 29日 17時 08分 57秒

7月1日にWord起動に関する次の投稿をさせていただき、
むたぐちさんからアドバイスをいただきました。
その節はありがとうございました。

> set a=createobject("word.application")
> a.visible=true
> a.documents.open("c:\a.doc")
> --
> 10回の起動トライで、2〜3回は起動するものの、7〜8回は起動に失敗し、
> WSHから「呼び出しは、呼び出し先で拒否されました。(80010001)」
> というエラーメッセージを返されます。エラー発生に規則性はないのですが、

その後、新規購入のWindows98 Second EditionパソコンにOffice2000を導入したところ、
またしても同じ問題が発生しました。
(したがって、OS再インストールをおこなっても同じ結果になる可能性が高いと思われます。)
また、もう一台別のWindows98マシンでも同様の現象を確認しています。
関連すると思われるレジストリデータの削除も効果がありませんでした。
このようにいまだに問題の核心には至っていないのですが、
進展はありました。エラーの規則性を発見しました。

Windows98の起動直後、
C:\WINDOWS\Application Data\Microsoft\Templatesにあるnormal.dot
を削除した状態でスクリプトを実行するとうまくWordが起動します。
ところが、normal.dotが存在した状態で実行すると上記エラーとなります。
いったんエラーがでると、[Ctrl]+[Alt]+[Del]で表示される「プログラムの強制終了」画面に「Windword」が表示されます。
そうなると、もはやnormal.dotを削除しても実行エラーとなります。
このとき、「プログラムの強制終了」画面に「Windword」が二つ表示されます。

そこで、当面は次のようにスクリプトを書いて、
Word起動をおこなうことにしました。
--
set f=createobject("scripting.filesystemobject")
f.deletefile("c:\windows\application data\microsoft\templates\normal.dot")
set a=createobject("word.application")
a.visible=true
a.documents.add
set f=nothing
set a=nothing

amataku さん (amataku@geocities.co.jp) 2000年 08月 29日 13時 28分 33秒

質問させてください。

JScript、Vbscript(特にJscript)でも、コマンドラインプログラムを実行させてその標準出力にだされた結果を受け取る方法って、command /c をつかってファイルにリダイレクトし、その結果を読む以外にありますか?

上の方法だと、command.comの制約で127文字くらいしか、引数を渡せないので、困っています。cmd.exeは98にはないし・・・

過去に同様の質問があったらすいません、(一応探してみたのですが・・・)
どうかお願いします。


過去に同様の記事があったらごめんなさい(一応探してみたんですが・・・)

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2000年 08月 29日 02時 29分 53秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

最近ちょっとネタ不足の感がありますが…。
ニュースに投稿したスクリプトでも紹介しておきます。
表示中のフォルダ/HTMLのソースを表示するものです。
以前この掲示板に書いたのとほとんど同じですが。

Win98の場合、TypeName(oDocument)="WebViewFolderContents"でした。

Set oShell = CreateObject("Shell.Application")
For Each oWindow In oShell.Windows
Set oDocument=oWindow.document
If TypeName(oDocument)="HTMLDocument" Then
msgbox oDocument.body.parentElement.outerHTML,,oWindow.LocationURL
ElseIf TypeName(oDocument)="IShellFolderViewDual" Or _
TypeName(oDocument)="WebViewFolderContents" Then
msgbox oDocument.Script.document.body.parentElement.outerHTML,, _
oDocument.Folder.Items.Item.Path
End If
Next


To: Lib30 さん

> Webアクセサリのよりこっちのほうが使いやすいですよ。
> [ToggleIE Image] http://free01.plala.or.jp/~kojima/

情報提供ありがとうございました。
まだこのページは見ていませんが、もしかするとスクリプトで実現しているのかな?
# IE5の右クリックメニューは、スクリプトで機能拡張できるようです。

miya さん 2000年 08月 28日 18時 55分 33秒

WSHではムリですか・・・残念です。
管理人さん、Lib30さんご親切にどうもありがとうございました。

Lib30 さん (lib30@yo-mail.co.jp) 2000年 08月 27日 20時 57分 31秒
URL:http://www.ob.aitai.ne.jp/~kazoo/

>ところで、画像の表示ON/OFFを切り替えるということだけに関していえば、
>たしかMSのページにそういうツールがあったと思います。
>Webアクセサリとか言いましたっけ?

Webアクセサリのよりこっちのほうが使いやすいですよ。
[ToggleIE Image] http://free01.plala.or.jp/~kojima/

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2000年 08月 27日 16時 44分 00秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

To: miya さん

> ただ、ブラウザの再起動が必要と書かれていますが
> 再起動無しで即反映なんてのは出来ないのでしょうか?

無理だと思います。
ついこの間、この掲示板に書いたのですが、WSHでレジストリを
操作して設定を書き換えるという手法の限界というものは確かにあります。

ところで、画像の表示ON/OFFを切り替えるということだけに関していえば、
たしかMSのページにそういうツールがあったと思います。
Webアクセサリとか言いましたっけ?

miya さん 2000年 08月 27日 11時 08分 57秒

管理人さん、どうもありがとうございます。
管理人さんの書かれているスクリプトを実行すると
確かに、画像の表示・非表示を行ってくれてます。
ただ、ブラウザの再起動が必要と書かれていますが
再起動無しで即反映なんてのは出来ないのでしょうか?
ちょっとわがままな質問なのですがご返答頂ければ幸いです。

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2000年 08月 26日 20時 40分 12秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

To: miya さん

> インターネットオプション(画像の表示・非表示など)を外部より操作し
> ブラウザで反映させたいのですが
> WSHでこのような操作は行えるのでしょうか?

レジストリをいじることで可能です。
こんな感じのスクリプトでどうですか?
次に開かれるウィンドウから設定が有効になります。

Set WshShell = WScript.CreateObject("WScript.Shell")
sKey = "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\"
sName = "Display Inline Images"

sValue = WshShell.RegRead(sKey & sName)
If sValue = "yes" Then
WshShell.RegWrite sKey & sName, "no","REG_SZ"
MsgBox "画像を表示しません。"
ElseIf sValue = "no" Then
WshShell.RegWrite sKey & sName, "yes","REG_SZ"
MsgBox "画像を表示します。"
End If

"Display Inline Images"は、画像表示のフラグですが、他の設定も
同様にして変更が可能だと思います。
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Mainキーを
レジストリエディタで開き、値を書き換えたり、インターネットオプションで設定を
変更したりしてみて、対応を調べてください。

また、レジストリをWSHで操作する話については、Lesson9にまとめてあります。

miya さん 2000年 08月 26日 15時 52分 16秒

はじめまして
いろいろありましてこのHPに来ました。
WSHのことは来たばかりで何も分かりませんが、ちょっと質問させて下さい。

インターネットオプション(画像の表示・非表示など)を外部より操作し
ブラウザで反映させたいのですが
WSHでこのような操作は行えるのでしょうか?

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2000年 08月 25日 17時 39分 22秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

○WSHの意外な落とし穴

まずは、次のスクリプトを実行してみてください。
ただし、この話はたぶんWSH2.0限定です。

Set WSH = WScript.CreateObject("WScript.Shell")
WSH.Run "notepad"

こんなの、試してみるまでもないでしょ、メモ帳が立ち上がるんでしょ?
と思われた方、まあ、やってみてくださいよ。

…エラーが出るんですね、これが。
よく、WSHのサンプルでは"WshShell"の代わりに"WSH"という変数を使っていることが
ありますが、WSH2.0ではこれがアウトになってしまうのです。

なぜこれがエラーになってしまうかと言うと、実は、WSH2.0においては、
"WSH"という変数は、"WScript"オブジェクトと等価に扱われるのです。
ためしに、msgbox WSH Is WScript とやると、Trueと表示されます。
msgbox WSH.ScriptFullName とかも普通に動いたりするわけです。

この事実は意外と知られていないかもしれません。
なんかよくわからないけどWSHをバージョンアップしたら動かなくなった
スクリプトがあるぞ、という方は、ここを疑ってみるといいかもしれません。



To: aMI さん

> 一番最初にいそいそ試しましたがダメでした。

やはりですか。Win2000だけの方法みたいですね。

> もっと簡単に出来ても言いと思うんだがなぁ
> >スペシャル・ホルダへのリンク

同感です。もうちょっとだけ、方法を考えてみます。
FolderオブジェクトにCreateLinkメソッドとかあればいいのに。

> ご挨拶が遅れましたが、
> 元々 perl 使いのaMIと申します。

どうもどうも、WSH使い(?)のむたぐちです。

> それに、そもそも perl は unix 文化。
> DOS/WIN や日本語環境ではいろいろ制約や問題があります。

そうですねえ。
ただ、PerlScriptというのがWSHで動いたりします。
別途ダウンロードが必要になりますが。

.NETでは、Perlがサポートされるので、今後に期待、ってところでしょうか。

> 正規表現は使えるようになったし、

VBS5.5で正規表現の機能がレベルアップしたそうですね。

> ハッシュ相当の機能も付いたし。

Scripting.Dictionaryのことかな?

> (少なくとも今なら)フロッピー1枚で最新バージョンに上げられる、
> というのは perl と比べると非常に大きい魅力です。

そう言われてみると、VBSやJSのスクリプティングエンジンって、すごい
小さいですよね。

> というわけで、これからもよろしくお願いします。

こちらこそ、どうぞよろしく。



To: YASU さん

> 管理人さま、はじめまして、これからもよろしくお願いします。

申し遅れましたが、はじめまして。
今後とも当ページをよろしくです。

> >できません(きっぱり(^^;)

> そうですか、がっかり・・・

すいません。前回のレスはちょっと不明瞭な書き方でしたが、
OE4/5.0ではできない、ということです。
OE5.5では未確認です。どなたか調べていただけると私はうれしいのですが…。

> メールの保存と削除をWSHでやりたかったんですが、できないとなれば
> 何か違う方法を考えてみます。

OEのメールを格納している*.dbxファイルのフォーマットは解析されているので、
バイナリのレベルでアクセスしてやれば、あるいは可能かもしれません。
# もっとも、WSHの標準機能では、バイナリファイルの読み書きができませんが。

dbxファイルのフォーマットについては、
http://www02.so-net.ne.jp/%7Ehome/sal/oe5conv.html
をどうぞ。VBのサンプルソースも公開されています。

Return