高橋 さん 2001年 01月 22日 19時 59分 05秒

高橋@目から鱗 > 有意義な講義、です。


>むたぐちさん
>とくにpathnameは、Windows(DOS)形式のフルパスで値が返るので、用途によっては
>便利です。
>
document.URL → file://C:\WIN95\筑集眺餅\a.html
location.pathname → /C:\WIN95\筑集眺餅\a.html
なるほど、これは良いですね。
加工の必要なく使えそうです。

>> VBSのホストとして使用するのは、(WSHではないですから)IEですか、IISですか?
>
>あとHTAという可能性もありますね。これはIEと見ていいかも。
># というか、本質的にはスクリプトエンジンとしてのVBSは全部同じでしたね(^^;
>
そうですね。(汗)

>IEの場合、ドキュメントオブジェクトは、JScriptでもVBScriptでも同様に扱えます。
>
おお、↓で表示されますね! 目から鱗です。。。
'==============================================================
document.write document.URL
'==============================================================

>それがActiveX Scriptingのいいところ。
>ついでにいうと、IEではJavaScriptをスクリプトエンジンとしては持っていないはずです。
>JScriptのエイリアスみたいに扱われるんでしょうね、きっと。
>
え、そうだったんですか?(初耳)
昔はどうだったんでしょう。気になりますね。
# むたぐちさんの解説を期待。。。

>いや、細かい話ですいません。
>
いえいえ、上にも書きましたが、まさに「目から鱗がとれた。」気分です。
こういうの、間違って覚えるとなかなか直らないんですよね。で、お客さんと話している
時に「え?」という顔されたり。。。(経験アリ、又、その逆も。。。)
むたぐちさん、有意義な講義をありがとうございました。

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2001年 01月 22日 19時 34分 47秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

To: 高橋 さん&ばみ さん

> VBSで、現在表示されているページのフルパスを取得する方法を教えてください。

高橋さんご提示の方法
document.URL
以外にも、

location.href
location.pathname

が使えます。
とくにpathnameは、Windows(DOS)形式のフルパスで値が返るので、用途によっては
便利です。

ここからは、ちょっと余談モードです。

WSHからIEのブラウザオブジェクトを呼ぶときは、
IE.LocationURL
IE.Path
で取れたりします。
# IE.document.location.href でもいいですが(^^;

> VBSのホストとして使用するのは、(WSHではないですから)IEですか、IISですか?

あとHTAという可能性もありますね。これはIEと見ていいかも。
# というか、本質的にはスクリプトエンジンとしてのVBSは全部同じでしたね(^^;

> IEで、現在表示されているページのフルパスを取得する場合、一番簡単なのは、
> JavaScriptかJScriptを使うことです。

IEの場合、ドキュメントオブジェクトは、JScriptでもVBScriptでも同様に扱えます。
それがActiveX Scriptingのいいところ。
ついでにいうと、IEではJavaScriptをスクリプトエンジンとしては持っていないはずです。
JScriptのエイリアスみたいに扱われるんでしょうね、きっと。

いや、細かい話ですいません。

高橋 さん 2001年 01月 22日 18時 55分 00秒

高橋@やはり滝落ちモデルが良い、です。


>ばみさん
>VBSで、現在表示されているページのフルパスを取得する方法を教えてください。
>(D:\My Documents\Web\test1.htm を表示しているのであれば、そのフルパスを
>変数に取得させたいんです。)
>たぶん、超初歩的な質問だと思うんですが、よろしくお願いします。
>
これはHTMLですよね?
という思い込みで以下書きます。

VBSのホストとして使用するのは、(WSHではないですから)IEですか、IISですか?
IISであれば(ASPですから)、Serverオブジェクトを使用して、実行中のスクリ
プト(.VBSファイル)のパスを取得することが出来ます。
IEの場合は…私は力になれそうもありません。
識者の方の回答を期待するしかないでしょう。

IEで、現在表示されているページのフルパスを取得する場合、一番簡単なのは、
JavaScriptかJScriptを使うことです。
==================
document.URL
==================
これだけで取得できます。

# ひとりごと
# うーん、何か質問を書き込もうとしていたような気がするのですが…
# 思い出したらまた来ます。

ばみ さん 2001年 01月 22日 18時 18分 44秒

はじめて質問させていただきます。
(Win95 IE5.0 を使用しています。過去ログを調べようとおもったのですが、
こちら側のサーバー設定のせいで出来ないので、質問がダブっていたら済みません。)

VBSで、現在表示されているページのフルパスを取得する方法を教えてください。
(D:\My Documents\Web\test1.htm を表示しているのであれば、そのフルパスを
変数に取得させたいんです。)
たぶん、超初歩的な質問だと思うんですが、よろしくお願いします。

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

○WMIでリモート管理 Win98-Win2000編 Part2

前回(28-28)は、Win98側からWin2000の制御をする方法について書きましたが、今回は
Win2000からWin98を制御する話です。
(もちろんWin98用WMIコアコンポーネント(http://msdn.microsoft.com/downloads/sdks/wmi/download.asp)が
インストール済みであることが条件です。プロトコルはNetBEUI+TCP/IPを使用しています)

28-36でも書いたとおり、WMIはDCOMを使ってリモートアクセスをおこないます。
Win98のDCOMのデフォルト設定では、リモートアクセスの許可がされていないので、まずその設定
をおこないます。そのためには、dcomcnfg.exeというプログラムを使うのですが、
標準では添付されていないので、http://www.microsoft.com/japan/com/dcom98/dcom13.aspから
「DCOM98コンフィグレーション・ユーティリティ」をダウンロードします。
DCOMのバージョンが異なっていると動作しないので、最新版のDCOM98もダウンロードしておくと
良いでしょう。(現時点でver 1.3が出てます)

インストール・再起動がすめば、dcomcnfg.exeを実行し、「既定のプロパティ」タブを開きます。
「このコンピュータ上で分散COMを使う」にチェックが入っていることを確認し、
既定の認証レベルを「接続」にします。
次に「既定のセキュリティ」タブを開いて、「リモート接続を使用する」にチェックを入れます。
「OK」をクリックすると再起動を促されるので再起動します。

この後、WMIの設定をおこないます。wbemcntl.exe(C:\WINDOWS\SYSTEM\WBEM\WBEMCNTL.EXE)を
実行し、Advanced(詳細設定)タブを開き、"Enable Anonymous Connection with share level security."
(共有レベルのセキュリティを使って匿名で接続できるようにする)にチェックを入れます。
これでWin2000からのWMI接続が可能になります。

以下のようなスクリプトをWin2000から実行してみてください。

Set Locator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set oService = Locator.ConnectServer("192.168.0.2")
Set oProcess=oService.Get("Win32_Process")
result = oProcess.Create ("notepad",null,null,processid)
msgbox result

初回実行時は、かなり時間がかかります(私の場合、数分待たされた)が、そのうちWin98側で
メモ帳が立ち上がり、Win2000側でプロセス起動成功のダイアログ("0"が表示されれば成功です)が
表示されます。

なお、セキュリティなどについてまだ良くわかっていない点があるので、これを試すときは
十分注意してください。万一外部からの侵入があったとしても、私は責任が取れませんので
あらかじめご了承ください。
というか、私自身も結構不安なんですけど(^^;

DCOMやWMIに詳しい方、この手順に何か問題があったらご指摘いただけるとさいわいです。

あと、WinMeではどうやってDCOMの設定をすればいいのか、ご存知の方がいらっしゃいましたら
ご教示くださいませ。
# WinMe用のdcomcnfg.exeってあるんでしょうか?

この方法を使えば、Win9x-Win9x間の相互制御もできるかもしれません。レポートお待ちしてます。


To: そう さん

> コントロールパネルのODBCを設定するやり方をおしえてほしいです。

以前も質問を受けたのですが、私にはODBCのことはわからないのです(^^;
とりあえず、関係してそうな過去記事をピックアップしておきます。
何かの参考になるでしょうか。

13-41 なおすけ さん 2000/05/01 22:30
13-49 管理人むたぐち さん 2000/05/02 23:05
23-27 はや さん 2000/10/19 19:38
23-29 Pinball さん 2000/10/24 11:36
24-27 大トロ さん 2000/11/10 13:46
24-32 大トロ さん 2000/11/13 10:17
24-33 SIGNAL9 さん 2000/11/13 14:02
24-35 大トロ さん 2000/11/13 18:15
24-37 SIGNAL9 さん 2000/11/14 09:25


To: 松島 さん

> とりあえず、ポップアップメニューを作ってみました。
> いまのところ、クリックしないとサブメニューが出てこない動作にしてます。
> あと、キーオペレーションは相変わらず後回しです(^^;)。
> http://db.popup.org/matsushima/temp/20010120/popup.html

拝見しました。いやー、本物と区別がつかないレベルになってきましたね。
凄いです。
popupオブジェクトって、Windows標準のメニューを表現するために作られたのでは、とか
思えてきました(^^;
# そういえば、松島さんのサイトのドメイン名は…(^^;

> ウィルスとワームの違いとか、正しい知識を啓蒙しようせずにただ騒ぐだけのマスコミにも、
> いいかげんアホくさくて嫌気がさしてしまっていますけど(苦笑)。

I Love Youはウィルスではないですが、世間的にはウィルスで通っているので、
私もこの名前を使ってしまいました。
「Rubyを256倍使うための本 邪道編」にしたがって、「I Love You スクリプトワーム」と
呼ぶようにしましょうか(^^;

松島 さん (matsushima@popup.org) 2001年 01月 20日 18時 29分 42秒
URL:http://www.popup.org/ai/

とりあえず、ポップアップメニューを作ってみました。
いまのところ、クリックしないとサブメニューが出てこない動作にしてます。
あと、キーオペレーションは相変わらず後回しです(^^;)。
http://db.popup.org/matsushima/temp/20010120/popup.html

表示する瞬間に、表示用のHTMLを作っているので、ちょっと重いです。
その代わり、DOM的にリアルタイムでパラメータを弄って反映できると
思います、たぶん(試していないので)。

えーと、動作の怪しいところが1点。
実行スクリプトのスコープの基準となる位置が、記述されているところと、
実際に動作するところで、異なっているようなので、クリックしたら
そんな関数は無い、と怒られてしまうかもしれません…(^^;)。

POPUPタグで宣言した ID を使って、ID.show(x,y,element); で表示されます。
(引数を省略したら、イベントが起きたときのマウスの位置に現れます)

>htcでビヘイビアを別ファイルにしておくと、ソースを見たとき「こんなに短いのに
>どうしてこんなことができるんだろう」と思われるかもしれませんね(^^;

そんな風にしてみました(笑)。

>誤った道具の使い方がされると、その道具が糾弾されるのは、まあありがちですが。

そうですね(^^;)。
危険物かもしれない謎の箱を、専門家でもない人がポンポン無造作に開けまくって、
大きな被害が起きて、仕掛けた犯人が叩かれて、配達者が対策を練る。ヘンなんですよねー。
現実世界でも、得体の知れない配達物をポンポン無造作に開いちゃうもんですかねぇ(^^;
ウィルスとワームの違いとか、正しい知識を啓蒙しようせずにただ騒ぐだけのマスコミにも、
いいかげんアホくさくて嫌気がさしてしまっていますけど(苦笑)。

そう さん 2001年 01月 19日 22時 37分 34秒

コントロールパネルのODBCを設定するやり方をおしえてほしいです。

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2001年 01月 19日 16時 59分 37秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

> +{HOME}でいいような気がします。

{HOME}+{END}
でしたね(^^;

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2001年 01月 19日 16時 55分 58秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

To: 松島 さん

> 定義するデータはシンプルに記述/アクセスできるようにしたうえで、
> 実際の表示ではTABLEタグなどを使って見栄えを整えたいのですが、
> なかなかむずかしいですね(^^;)。

htcでビヘイビアを別ファイルにしておくと、ソースを見たとき「こんなに短いのに
どうしてこんなことができるんだろう」と思われるかもしれませんね(^^;

> 同じ時期に、ILoveYou.txt.exe とか全く同じ外観/動作のexeファイル版もが
> 出回っていたとしたら、世間の見方も違っていたでしょうね。(^_^;;

exeなウィルスと同じ物が作れるWSHってすごいなあ、という評価? (なわけない)

del *.* というバッチファイルを実行したらファイルが消えてしまった、だから
バッチファイルなんてろくなもんじゃない、って言っているのとあまり変わらない気がします。
誤った道具の使い方がされると、その道具が糾弾されるのは、まあありがちですが。



To: 高橋 さん

> 高橋@病み上がり & ヘルプを読みましょう、です。

風邪のほうは大丈夫でしたでしょうか。
そういう私もまだ病み上がりなんですが(^^;

> >.vbsファイルというのは、他のvbsで定義されている
> >サブモジュールを呼び出すことはできないのでしょうか?
> >
> できません。

ExecuteGlobalステートメントで、サブモジュールのスクリプトファイルを
TextStreamで読み出したものを実行してやると、できますね。
まあ、普通そんなことはしませんが…。

やはり、高橋さんのおっしゃるように、wsf or wscを使うのがいいと思います。> はじめてさん
wsfについては「WSH2.0の新機能」
wscについては「WSH技術情報」に概要を書いてます。


To: こん さん

> SendKeys "^+{RIGHT 4}", True
> SendKeys "^(c)", True
> End Sub
>
> なぜRIGHT4回かというと小数点や、負の数字が含まれる答えに
> 対応するためです

+{HOME}でいいような気がします。
が、clipboardオブジェクトを使うのが普通でしょうね。
これはVBSにはないですが、VBA,VBでは使えるオブジェクトです。

こん さん (gct1@lycos.ne.jp) 2001年 01月 19日 14時 52分 53秒

こんにちは
VBAでEval関数を使ってみました
今度はクリップボードにコピーする方法がわからず
いい方法ではないかもしれませんが
こんな風にしてみたら期待どおりになりました

Private Sub コマンド4_GotFocus()
Dim a
siki.SetFocus
a = siki.Text
kotae.SetFocus
kotae.Text = Eval(a)
SendKeys "^+{RIGHT 4}", True
SendKeys "^(c)", True
End Sub

なぜRIGHT4回かというと小数点や、負の数字が含まれる答えに
対応するためです

VB。。VBS。。VBA少しずつ違うというのはやりにくいですね
余計頭が混乱します。。。

ありがとうございました
またよろしくお願いします

高橋 さん 2001年 01月 19日 10時 22分 11秒

高橋@病み上がり & ヘルプを読みましょう、です。


>はじめてさん
>はじめてか質問します&初歩的な質問でかなりすみません。。。
>.vbsファイルというのは、他のvbsで定義されている
>サブモジュールを呼び出すことはできないのでしょうか?
>
できません。
但し、
=====================
sub1.vbs
sub2.vbs
main.wsf
=====================
とあって、main.wsfでsub1.vbsとsub2.vbsをインクルードしてあれば、
sub1.vbsで定義しているサブルーチンをsub2.vbsで呼ぶといったこと
はできます。
また、呼び出される側を.wscファイルにしてあれば、.vbsファイルか
らも呼び出すことができます。

このあたりのことは、全てヘルプファイルに書いてあります。
一通り目を通されることをお勧めします。

マイクロソフト
http://www.asia.microsoft.com/Japan/Developer/Scripting/default.htm

# むたぐちさんのリンクのページにも載っています。

はじめてさん さん 2001年 01月 19日 09時 58分 23秒

 はじめてか質問します&初歩的な質問でかなりすみません。。。
.vbsファイルというのは、他のvbsで定義されている
サブモジュールを呼び出すことはできないのでしょうか?

松島 さん (matsushima@popup.org) 2001年 01月 19日 00時 34分 37秒
URL:http://www.popup.org/ai/

To: 管理人むたぐち さん

>Lib30さんご紹介のサンプルと組み合わせると、より"本物"っぽいメニューができそうですね。
>完成を楽しみにしています。

定義するデータはシンプルに記述/アクセスできるようにしたうえで、
実際の表示ではTABLEタグなどを使って見栄えを整えたいのですが、
なかなかむずかしいですね(^^;)。

先にポップアップメニューとしての動作を作ってから、それを流用するような感じで
メニューバーっぽくしようかなと考えてます。

>I Love You ですね。少し前に流行りました。
>これのせいで、どれだけWSHの評判が落ちたことか。

同じ時期に、ILoveYou.txt.exe とか全く同じ外観/動作のexeファイル版もが
出回っていたとしたら、世間の見方も違っていたでしょうね。(^_^;;

イエペス さん 2001年 01月 18日 16時 47分 02秒

To: 管理人むたぐち さん

>Win2000のブリーフケースで試してみたところ、
>名前、サイズ、種類、更新日時は取得できましたが、パスと状態が"---"という文>字列になってしまいました。
>なお、Win2000ならデスクトップ(NameSpace(0))は正常に取得できます。

いろいろと試して戴き、ありがとうございました。
大変参考になりました。今後共、宜しくお願いします。

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2001年 01月 18日 11時 20分 16秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

さらに補足です。

microsoft.public.wbemを調べると、Win9x間でのWMIのリモートアクセスは
どうすればいいか、という質問がけっこう出されていました。
その回答によると、そもそもWMIのリモート制御というのはDCOMを使用しており、
Win9xのデフォルトでは、セキュリティの設定上?リモートアクセスができなく
なっているそうです。
そのため、DCOMの構成を設定すればいいらしい?です。
ちょっと読んだだけなのであいまいなところが多いのですが、確認してみたいと
思います。
dcomcnfg.exeで設定できるらしいのですが、Win98SEには入ってないな…。
ヘルプファイルはあるのに…。

WSH5.6のWshRemoteオブジェクトもDCOMを利用するものなので、もしかすると
こちらも使えるようになるかも。


To: AKiOS さん

Win98SEのkernel32.dllは4.10.2222でした。
システムのプロパティで見られるWindowsのバージョンと同じなので、
kernel32.dllのバージョンを見るのが一番確実な判別法かと思われます。


To: もなか さん

Microsoftが次に出すWSH5.6で、セキュリティ問題に関してのソリューションを一応
出しています。
http://www.asia.microsoft.com/japan/developer/workshop/languages/clinic/scripting11132000.asp

スクリプトへの署名ができるようになり、スクリプトに対する
セキュリティポリシーの設定が可能になっています。


To: 松島 さん

メニューのサンプル、拝見しました。
ポップアップがちゃんとウィンドウからはみ出して表示されることに、ちょっと感動を
覚えてしまいました(^^;
Lib30さんご紹介のサンプルと組み合わせると、より"本物"っぽいメニューができそうですね。
完成を楽しみにしています。

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

補足です。


To: AKiOS さん

GetFileVersionメソッドで、システムディレクトリにあるkernel32.dllのバージョンを
調べるというのはどうでしょうか。
WinMeでは4.90.0.3000
Win2000では5.0.2195.1600
です。Win98やWinNT4.0については未確認ですが、おそらく5.x以上ならWin2000以上のOSと
考えていいのではないかと思います。
GetFileVersionメソッド自体が、Windows Script5.0くらいで追加されたものなので、
素のWin98とかでは動作しないのが難点ですが。
# ScriptEngineのバージョンも調べて、5.0未満なら問答無用でWin98未満のバージョンで
# ある、と判別すればいいのかも。


To: イエペス さん

Win2000のブリーフケースで試してみたところ、
名前、サイズ、種類、更新日時は取得できましたが、パスと状態が"---"という文字列に
なってしまいました。
しかも、ブリーフケースが開いている状態でスクリプトを実行すると、

>ブリーフケースは別のコンピュータで使われています。
>開かれているブリーフケースを閉じて、やり直してください。

という、閉じてもまた開くダイアログが表示されてしまいました。

なお、Win2000ならデスクトップ(NameSpace(0))は正常に取得できます。

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

To: イケダ さん

> やりたい事は、abc.wsf・def.wsf・ghi.wsfのすべての処理で、
> 共通のログファイルを作成したいのです。

前にも書きましたが、FileSystemObjectのTextStreamを使用した
方が何かといいと思いますよ。
同時にファイルオープンしてしまった際のエラートラップも可能ですし。
Lesson15をご覧ください。

もしくは、WshShell.LogEventを使うのもいいかもしれません。
詳しくは「WSH2.0の新機能」を参照してください。
Win9xならwsh.logというファイル名でログを残せます。



To: 高橋 さん

フォロー感謝します。
助かります(^^;

> # 職場には、2000行以上のスクリプトを書く強者がいます。
> # モジュール分割はおろか、サブルーチンも切り出さないものだから
> # 他人にはデバッグできません…
> # ネスト10段なんて当り前、まるでCOBOLみたいです…

ありがちですねえ。
私はモジュール分割はしないです。ま、そんなに長いスクリプトは書かないからというのも
ありますが、単一ファイルですべてを済ますことに美しさを感じてしまうからなのです。
…COMの精神に反していますか?(笑)



To: なおきん さん

> 今WMIで,
> システム全体の(「あるプロセスの」とか贅沢は申しません)
> ^^^^^^^^^^^
> CPU使用率及び
> メモリ使用率
>
> を計算したいのですが,(ちょっと前この掲示板でも流行りましたよね?)

ええ、そのときのログは参考になりませんでしたか?
24-48 さむ。 さん 2000/11/16 17:05
24-47 さむ。 さん 2000/11/16 16:25
24-45 さむ。 さん 2000/11/15 17:23
24-38 ONO さん 2000/11/14 09:37

私には、これ以上のことはちょっとわからないです。



To: イエペス さん

> VB6+IE4からshellオブジェクトのGetDetailsOfメソッドを利用して、
> ブリーフケースの項目名(パス・状態・その他)と対応する内容を
> 取得しようとしていますが、何も表示されません。

そうなんですか。何ででしょうね?
ブリーフケースは特殊中の特殊なフォルダだから、なんか普通と違うのかもしれません。
「デスクトップ」もできませんでしたしね。
ブリーフケースは一応Web表示できますが、情報ペインに表示される情報がファイル名だけ
ですね。とすると、ブリーフケースは、もともと項目名を取得できない仕様に
なっている可能性があります。



To: こん さん

> VB6でのEval関数の使い方がわかりません

VB6にはEval関数はありません。

…だけだとそっけないので。
Eval関数は、VBS5.0で新しく加わりました。
VBS5.0は、VB6より後でリリースされたので、VB6ではまだなかったわけです。
VBにあってVBSで省略された機能は多いですが、VBS独自の機能も結構あります。
正規表現なんかが代表例ですね。
VBSのヘルプに、機能の比較表があるので参考にしてみてください。

ちなみに、VB7でEval関数が使えるようになるかどうかは微妙です。
というのも、最初にリリースされるバージョンのVB.NET(VB7に搭載されるはず)が、
Eval関数をサポートしないらしいからです。
このへんの事情は、MSDN Online Web WorkshopのJScript.NETの紹介記事に詳しいです。


To: もなか さん

> スクリプティングホストはウイルスなんかにも使われてるとか聞いたので、
> どなたか具体例とか対応方法とかあったらおしえてください。

I Love You ですね。少し前に流行りました。
これのせいで、どれだけWSHの評判が落ちたことか。
このウィルスについては、WWWを検索すればいっぱい出てくると思うので、
ここではあえて詳しくは書きません。
ZDNN(http://www.zdnet.co.jp/news/index.html)なんかが割といいと思います。

この掲示板で何度も取り上げた、「Rubyを256倍使うための本 邪道編」でも
詳しく述べられています。
悪いのはOutlookだろ。アンインストールすべきなのはWSHじゃなくてOutlook。同感です。

もなか さん 2001年 01月 17日 15時 20分 21秒

こんにちわ。
HPみせていただきました。
が、私にはとても理解できませぬ・・・^^;

いきなり来てこんなこと聞くのは失礼かもしれませんが
スクリプティングホストはウイルスなんかにも使われてるとか聞いたので、
どなたか具体例とか対応方法とかあったらおしえてください。

こん さん (gct1@lycos.ne.jp) 2001年 01月 17日 11時 09分 38秒

たびたび,恐れ入ります
どなたか教えてください
VB6でのEval関数の使い方がわかりません

Private Sub Command1_Click()

Text2.Text = eval(Text1.Text)

End Sub
としてみましたがエラーが出ます

コンパイルエラー
SubたまはFunctionが定義されていません。

というエラーメッセージがでます
オブジェクトブランザーで見るとEvalという関数が
出ていないのが気になるのですが
もちろん、入力候補(W)で見ても出てきません

よろしくお願いします

イエペス さん 2001年 01月 17日 04時 14分 29秒

こんばんは。ご無沙汰です。
VB6+IE4からshellオブジェクトのGetDetailsOfメソッドを利用して、
ブリーフケースの項目名(パス・状態・その他)と対応する内容を
取得しようとしていますが、何も表示されません。
同様の方法で、他のフォルダでは成功するんですが、ブリーフケース
だけダメなんです。何かやり方があるんでしょうか?
宜しくお願い致します。


管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2001年 01月 16日 14時 36分 12秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

To: Lib30 さん

> http://msdn.microsoft.com/xml/reference/scriptref/XMLDOM_Objects.asp
> にある、XMLHttpRequestというのがMicrosoft.XMLHTTPオブジェクトのことのようです。
> FileSystemObjectなどと違い、システムに登録されているIDのようなものと実際の呼び名は違うようです。

ご教示ありがとうございます。
なるほど、道理で見つけられなかったわけだ(って探してないですけど(^^;)

この辺のオブジェクト名は、VBのオブジェクトブラウザで見られるのと同一ですね。
(ってこれは当然ですが)
# オブジェクトブラウザからProgIDを調べる、あるいはその逆は、意外と困難だったりします。
# OLE/COM Object Viewerなら簡単なんでしょうけど…。


To: AKiOS さん

> ちょっと気になったのですが、Win2000でも HKEY_LOCAL_MACHINE\ 以下のキーを
> すべてのユーザが読み出せるのでしょうか?

これはセキュリティポリシーの設定次第だと思います。
デフォルトでは、少なくともPower User(デフォルトのユーザーグループ)の
権限があれば、読み出せます。
極端な話、レジストリキー一つ一つにセキュリティ設定ができますからね。
一概にこうだとは言えないと思います。

> それはそうですが、完全に一致するタイトルを指定すればよいので
> 特に困ることはないでしょう。

アプリによっては、
filename.ext - AppName
等の形式を取るものがあり、こういうタイプのものは完全一致が使えないのです。


To: 松島 さん

> ぜんぜん完成じゃないんですけど、肝心のところが手詰まりっぽいんで
> 現状をアップしてみました。ソースは未整理なのでゴチャゴチャです。

すいません、今、IE5.01な環境でつないでるもんで、まだ拝見していません。
また後日拝見させていただきたいと思います。
# IE5.5はノートには厳しいのです(^^;

> バリバリ可能でした(笑)。余計なスクロールバーとかは出てきません。
> 表示位置も、任意のエレメントやwindowやスクリーン全体を基準にオフセットを設定できて、
> OBJECTタグのコントロールの背面に表示されてしまうこともなかったです。

そういえば、IE5.5では「飛び出すフレーム」(違った?)が使えるようになったそうですね。
枠をはみ出すとは、勢いがあっていいですね。なんのこっちゃ。

> WindowsMEでは、OSのヘルプ(説明とかトラブルシューティングとか)にHTAが
> 使われているのをよく見かけますけど、どうなんでしょうね。
> ヘルプ系では*.CHMも増えてきましたけど、未だに*.HLPがしばしば使われてますし(笑)。

あのヘルプは重すぎです。
なんであんなに重たいのでしょうか。得体の知れないCOMコンポーネントのせいだろうか。
とにかく、Winキー+F1を押すと憂鬱になれます。

Win2000ではアプリケーションの追加と削除がHTAですね。これ、なぜかWinMeでは
採用されなかった…。
ほかにも、IE周りのダイアログ(お気に入りの整理とか)は、だいたいHTA、かどうかは
わかりませんが少なくともHTMLでできているようですね。

> .NET Frameworkのオブジェクトに、COMのインターフェースを通じてアクセスできれば、
> できるかもしれませんね。

あ、なるほど。そういうCOMオブジェクトが標準添付されるかな?
WSH/HTAから直で.NET Frameworkのオブジェクトを利用できるようには、さすがにならないでしょうね。
WSHはCOMが命、CreateObjectな世界でありつづけるんでしょう…。

ブラウザ上で動くVBScriptって、.NET時代にはどうなるんでしょう?


To: ONO さん

> .NET Frameworkで作成されたコンポーネントはすべてCOMとして扱うことが可能に
> なるはずです。きちんと動作させたことはないんですが、サンプルもあります。

それを聞いて安心しました。
となると、.NETの勉強をしないわけにはいかないな(^^;
# いつまでもCOMにこだわることもないんでしょうけど。

> 逆に従来のCOMを.NET環境で扱うことも簡単にできます。

なんかOLD COMとかいう、物悲しいオブジェクト名で扱われると聞いたんですが(^^;

> #って、このてのネタしか書き込まなくてごめんなさい(^^;

いえいえ、とても参考になります。ありがとうございます。


とりあえず、返信の前半終了。

高橋 さん 2001年 01月 16日 11時 22分 42秒

高橋@風邪気味、となりの人は半袖(!)、です。


あまりお力になれずに申し訳ありませんが…
>イケダさん
>下にも書きましたが、
>def 開始
>def 終了
>ghi 終了
>になってしまいます。
>
同じようにEchoだけする.wsfを3つ作ってみたのですが、うまく動きませんでした。
イケダさんと同じように
abc.wsf, def.wsf, ghi.wsfとし、出力はファイルにリダイレクトしていますが、
abc.wsfの出力のみファイルに保存されます。
# 私の組み方がまずいのかもしれません…

ちょっとこのあたりはWindowsのコンソール出力 & リダイレクト等を調べないと、
この方法での実装は難しそうですね。
# 普通に考えても、ファイルの排他制御とか、後勝ちとかありますしね。
# WSHではこのあたりあまり考えなくても良かったのですが、他の言語での開発
# 時にも考えなくなってしまうのが怖いですね

あと、細かい点をいくつか。
(それぞれ独立しています)

>ファイルを作成し終えてからファイル名を変更しているのですね。
>でも、同時にabc.wsfとabc2.wsfが動くことがあるため、
>その場合に正しく作動してくれないような気がします。
>
例えば、
abc.wsfでは出力先をabcResult.txt
abc2.wsfでは出力先をabc2Result.txt
というように回避ではNGでしょうか?
# ジョブが増えた場合も想定しないと駄目ですが…

>>モジュールを分けているのは、
>>def.wsf、ghi.wsfが、他のプログラムからも呼べるようにするためです。
>>また、*.wsfで作成しているのは、
>>インクルードする共通関数のファイルがあるためです。
>>
abc.wsfがメインモジュール、def.wsf, ghi.wsfがサブルーチンモジュール
と解釈しています(間違っていたら、以下は読み飛ばして下さい)。
Runメソッドでスクリプトレベルで走らせる
ではなく、
def.wsfの処理全体を1サブルーチン(内部で分割は必要でしょうが)にして、
それをabc.wsfからコールする、では駄目なのでしょうか?
この場合でしたら、「コンソールが〜」という話しは解決できそうです(1ス
クリプトですから…未確認ですが)

あと、ファイルに出力するのは、ログとして保存しておきたいからだと
思います。
コンソール表示が必要なく、常にファイルに保存するのでしたら、28-15で
むたぐちさんが書かれているように、
>FileSystemObjectでテキストファイル操作が可能なんですから、これを利用
>するほうがいいです。(追記とかも可能ですし)
>
FileSystemObjectを利用するほうが適当かと思います。


>むたぐちさん
○WMIでリモート管理 Win98-Win2000編
>Win98(ノート,192.168.0.2)からWin2000(デスクトップ,192.168.0.1)のWMIサービスを
>実行させることに成功したので、報告します。
># プロトコルはTCP/IP+NetBEUIでクロスケーブル接続。
>
WMIはセキュリティホールになりかねない反面、忙しいシステム管理者にとっては大き
な武器になりますね。(^^)
こちらの掲示板でも過去、随分話題になってますね。
私も、趣味と実益を兼ねて、本格的に手をだそうかと考えています。
サンプルがアップされることを期待しております。m(_ _)m

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

○WMIでリモート管理 Win98-Win2000編
Win98(ノート,192.168.0.2)からWin2000(デスクトップ,192.168.0.1)のWMIサービスを
実行させることに成功したので、報告します。
# プロトコルはTCP/IP+NetBEUIでクロスケーブル接続。

Set Locator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set oService = Locator.ConnectServer("192.168.0.1","root/cimv2","administrator","password")
Set oProcess=oService.Get("Win32_Process")
result = oProcess.Create ("notepad",null,null,processid)

これをWin98側から実行すると、Win2000側でメモ帳が立ち上がります。
ポイントとしては、Win2000側のユーザー名とパスワードを指定することです。
# 名前空間のセキュリティ設定をいじれば、ユーザーごとの権限をいろいろ変えられるはずなのですが、
# そこまではまだチェックしてません。

ただ、Win2000からWin98のWMI呼び出しは、「RPCサーバーが利用できない」というエラーが出て
成功していません。何かいい方法はないでしょうか。
microsoft.public.wbemを購読するようにしました。ちょっと過去記事をあさってみるつもりです。


みなさん、書き込みどうもありがとうございます。
えっと、返信は少々お待ちください。なんか疲れてます(^^;

なおきん さん 2001年 01月 15日 18時 05分 49秒

たびたび質問させて頂いています.なおきんと申します.
今WMIで,
システム全体の(「あるプロセスの」とか贅沢は申しません)
^^^^^^^^^^^
CPU使用率及び
メモリ使用率

を計算したいのですが,(ちょっと前この掲示板でも流行りましたよね?)
CPU使用率に関しては,
http://www.users.gr.jp/ml/archive/wsh/
をみても,それっぽいのが分からなかったのと,
メモリに関しては,
Win32_PerfRawData_PerfOS_Memoryあたりを見ているのですが,
それっぽいのはあるのですが,よく分からない,
結局
どの値を 何の値
^^^^^^^ ^^^^^^
で割ればよいのかが,CPU,メモリ共に分からないで,
新年早々,ふにゃふにゃしています.

どなたか,ご教授くださいませよろしくお願いします.

イケダ さん 2001年 01月 15日 14時 31分 19秒

>高橋さん
ファイルを作成し終えてからファイル名を変更しているのですね。
でも、同時にabc.wsfとabc2.wsfが動くことがあるため、
その場合に正しく作動してくれないような気がします。


ファイル名については、むたぐちさんに教えていただいた、

> -def.wsf-
> objWshShell.Run("command /c cscript //nologo ghi.wsf " & " >> " & WScript.Arguments(0),0,1)

で、半ば無理矢理やってしまおうと考えています。



しかしやっぱりまだ解決できていない問題があります。

abc.wsfの中で、WshShell.Runメソッドを使って、def.wsfを呼び出します。
def.wsfの中で、WshShell.Runメソッドを使って、ghi.wsfを呼び出します。

順番としては、(細部は省略します)
==abc.wsf
- echo "abc 開始"
- Run(def.wsf)
- ==def.wsf
- - echo "def 開始"
- - Run(ghi.wsf)
- - ==ghi.wsf
- - - echo "ghi 開始"
- - - 〜処理〜
- - - echo "ghi 終了"
- - echo "def 終了"
- echo "abc 終了"

となるので、バッチファイルで別々に実行する事もできません。
むたぐちさんに教えていただいた方法で行うと、
下にも書きましたが、
def 開始
def 終了
ghi 終了
になってしまいます。

どのような情報で何ができるようになるのかなど
わかっていないことが大変多いので、
何度もお手数をおかけして申し訳ありません。
なにかありましたらよろしくお願いします。

高橋 さん 2001年 01月 15日 13時 37分 45秒

高橋@打合せ前、コーヒー必須の状態、です。

>イケダさん
>モジュールを分けているのは、
>def.wsf、ghi.wsfが、他のプログラムからも呼べるようにするためです。
>また、*.wsfで作成しているのは、
>インクルードする共通関数のファイルがあるためです。
>
なるほどなるほど、いいですねぇ。(^^)
# 職場には、2000行以上のスクリプトを書く強者がいます。
# モジュール分割はおろか、サブルーチンも切り出さないものだから
# 他人にはデバッグできません…
# ネスト10段なんて当り前、まるでCOBOLみたいです…

先ほどのBATファイルと合体技で、こんな感じではいかがでしょうか?
=========abcedfghi.batここから============
BATファイル + WSHで
abc.wsf > Result.txt
def.wsf >> Result.tx
ghi.wsf >> Result.txt
MyRen.wsf
=========abcedfghi.batここまで============

=========MyRen.wsfここまで================
' 時刻を取得
strExecTime = Now

' 適当に整形
strExecTime = '...

Set objWshShell = WScript.CreateObject("WScript.Shell")
intRet = objWshShell.Run("command /c ren Result.txt " & strExecTime, 0, 1)
=========MyRen.wsfここまで================


# DOS世代なもので、どうしても既存のものを利用して済ませようと
# してしまいます。(^^;
# 実装の条件などありましたら、また別のアイデアを出せるかもしれません。

松島 さん (matsushima@popup.org) 2001年 01月 15日 13時 22分 01秒
URL:http://www.popup.org/ai/

To: Lib30 さん

>createPopupというのは、すべてのウインドウの前に表示されるウインドウを作る
>メソッドだからです。でもふつうのウインドウと違ってlocationオブジェクトなど
>一部のオブジェクト、プロパティは実装されてないようですが。

なるほど「一部が実装されていない」というのがポイントですね。

>>サブメニューを表示したときに、元のメニューが消える。
>popupオブジェクトのshowメソッドには、第五引数にポップアップ元の
>オブジェクトを指定することができます(というか、省略できないような)。

表示位置の基準を指定するもので、省略時にはデスクトップの左上が基準に。
エレメントが指定されたときは、そのエレメントの位置を基準に、となるようです。
http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/show.asp


>http://msdn.microsoft.com/Downloads/samples/Internet/ie55/menubehavior/sample.asp
>ここで似たようなメニュービヘイビアが紹介されています。参考にされてみては。

おぉ、バッチリできちゃってますね。しかもシンプルで。
いいサンプルですね。紹介ありがとうございます(^^)。

イケダ さん 2001年 01月 15日 13時 00分 07秒

>高橋さん
さっそくのご返事ありがとうございます。

モジュールを分けているのは、
def.wsf、ghi.wsfが、他のプログラムからも呼べるようにするためです。
また、*.wsfで作成しているのは、
インクルードする共通関数のファイルがあるためです。

abc.wsfと似たようなプログラム abc2.wsf、abc3.wsf・・・が
様々な時間で動くため、
たとえば、
abc.wsfが午前10時に動いた場合は、「abc_1000.log」にログを出力
abc2.wsfが午後2時に動いた場合は、「abc2_1400.log」にログを出力
と、ログを残していきたいです。


教えていただいた掲示板の過去ログを読みましたが、
上書きされることについては触れていないようでした。
なにかいい案 または参考になる過去ログがありましたら教えてください。

高橋 さん 2001年 01月 15日 11時 04分 53秒

高橋@月曜日は貧血気味、です。

>イケダさん
>やりたい事は、abc.wsf・def.wsf・ghi.wsfのすべての処理で、
>共通のログファイルを作成したいのです。
>abc.wsfでログファイル名を時間などで決めて、
>そのファイルに それ以後の処理のログを残そうと思っています。
>先日の方法でうまくいきましたが、
>もっとスマートな方法があったらぜひ教えてください。
>
イケダさん、こんにちは。
お世話になります。
具体的にどんな処理を行っているのか、なぜモジュール分割している
のか、教えて頂けないでしょうか。
プログラムレベルで実装が難しくても、1つ上のレベルで解決できる
ことも多々ありますよね。
共通のログファイルを作成したいのであれば、
BATファイル + WSHで
abc.wsf > Result.txt
def.wsf >> Result.txt
ghi.wsf >> Result.txt
とか
abc.wsf > Result1.txt
def.wsf > Result2.txt
ghi.wsf > Result3.txt
copy Result1.txt+Result2.txt+Result3.txt
等の方法もあります(ファイル名は当然リネームすることになりますが)。
27-28
27-23
27-22
27-20

それと、1つ問題が発生しました。
>ですが、実行してみると
> def 開始
> def 終了
> ghi 終了
>と、なってしまいます。
>これは、def.wsfが、出力するファイルの開始位置を覚えているようです。
>
過去ログの
27-28
27-23
27-22
27-20
このあたりと重なっているかもしれません。

イケダ さん 2001年 01月 15日 10時 03分 04秒

むたぐちさん、先日のアドバイスありがとうございました。
標準出力を受け継ぐ処理は教えていただいた通りに書いて
できるようになりました。
やりたい事は、abc.wsf・def.wsf・ghi.wsfのすべての処理で、
共通のログファイルを作成したいのです。
abc.wsfでログファイル名を時間などで決めて、
そのファイルに それ以後の処理のログを残そうと思っています。
先日の方法でうまくいきましたが、
もっとスマートな方法があったらぜひ教えてください。

それと、1つ問題が発生しました。
def.wsfで、開始のログと終了のログを書きます。
WScript.Echo "def 開始"
〜ghi.wsfを呼ぶ〜
WScript.Echo "def 終了"
また、ghi.wsfでも、開始のログと終了のログを書きます。
WScript.Echo "ghi 開始"
〜ghiの処理〜
WScript.Echo "gih 終了"

期待する結果は、
def 開始
ghi 開始
ghi 終了
def 終了
ですが、実行してみると
def 開始
def 終了
ghi 終了
と、なってしまいます。
これは、def.wsfが、出力するファイルの開始位置を覚えているようです。

どのように解決したらよいでしょうか。
再びご指導願います。

ONO さん 2001年 01月 15日 09時 23分 28秒
URL:http://www.corebase.co.jp/shu/

>>(で、使おうと思えばCOMオブジェクト以外にも.NET Frameworkのオブジェクトも使える、
>>というのが理想…ってないよな、それは(^^;)
>
>.NET Frameworkのオブジェクトに、COMのインターフェースを通じてアクセスできれば、
>できるかもしれませんね。

.NET Frameworkで作成されたコンポーネントはすべてCOMとして扱うことが可能に
なるはずです。きちんと動作させたことはないんですが、サンプルもあります。
逆に従来のCOMを.NET環境で扱うことも簡単にできます。
ただし、当然のことですが.NET Frameworkが動く環境になってないと利用できない
です。

#って、このてのネタしか書き込まなくてごめんなさい(^^;

Lib30 さん (lib30@yo-mail.co.jp) 2001年 01月 14日 23時 06分 51秒
URL:http://www.ob.aitai.ne.jp/~kazoo/

To 松島さん

>ただ、createPopup()で作られるオブジェクトが、完全に白紙状態の
>documentオブジェクトまたはwindowオブジェクトっぽくて、スタイルシートや

createPopupというのは、すべてのウインドウの前に表示されるウインドウを作る
メソッドだからです。でもふつうのウインドウと違ってlocationオブジェクトなど
一部のオブジェクト、プロパティは実装されてないようですが。


>サブメニューを表示したときに、元のメニューが消える。

popupオブジェクトのshowメソッドには、第五引数にポップアップ元の
オブジェクトを指定することができます(というか、省略できないような)。
ソースを見た感じそれがないようなので、そこにポップアップ元のオブジェクトを
指定するといいのでは?


http://msdn.microsoft.com/Downloads/samples/Internet/ie55/menubehavior/sample.asp

ここで似たようなメニュービヘイビアが紹介されています。参考にされてみては。

松島 さん (matsushima@popup.org) 2001年 01月 14日 20時 25分 01秒
URL:http://www.popup.org/ai/

To: 管理人むたぐち さん

ぜんぜん完成じゃないんですけど、肝心のところが手詰まりっぽいんで
現状をアップしてみました。ソースは未整理なのでゴチャゴチャです。
http://db.popup.org/matsushima/temp/20010114/sample.html
(なぜか私の環境ではネットに上げるとトルコ語になってしまいました(汗))

なんとなくソレっぽく、リストビューコントロールを貼り付けてみてます。

不具合1:
サブメニューを表示したときに、元のメニューが消える。
(popupオブジェクトを複数同時に表示する方法がわかりませんでした…)

不具合2:
ウィンドウの横幅を狭くすると、サブメニューの横幅も狭くなる。
ウィンドウの縦を(最大のサブメニューの高さより)狭くすると、スクロールバーが出る。
(visiblity:hidden; の状態で持っているのがいけないみたいです)

問題点:
カプセル化されていないコードがhtml中に…(^^;


1階層に限定して練りこむか、1つのpopupウィンドウの中でうまく階層移動できる
インターフェースを考えて作ってみるか、どちらかですね。


>ところでこのpopupオブジェクト、ウィンドウをはみ出して表示することは可能なんでしょうか?

バリバリ可能でした(笑)。余計なスクロールバーとかは出てきません。
表示位置も、任意のエレメントやwindowやスクリーン全体を基準にオフセットを設定できて、
OBJECTタグのコントロールの背面に表示されてしまうこともなかったです。

ただ、createPopup()で作られるオブジェクトが、完全に白紙状態の
documentオブジェクトまたはwindowオブジェクトっぽくて、スタイルシートや
ビヘイビアの状態をいちいち引き継がせたり、popup上のオブジェクトとpopup元の
オブジェクトとの関連付けたりするのが面倒だと思います。
実は、呼び出し元のwindowとのスコープやらの関係がよく分かってません(^^;)。
あと、親windowのsetCapture()と組み合わせた挙動もなんだかよく分かりません。
つっこんだ事をしようとすると、分からないことばかりになってしまいますね(^^;)。

popupオブジェクトは、1つしか表示できないような感じでした。
仕様なのか組み方が悪いのかよく分かりませんけども、もう一つのオブジェクトを作って、
show() をした瞬間に、元のウィンドウが閉じてしまいます(^^;)。

>そうですね。WSHやHTAと.NETってどういう関係になるんでしょう。やはり淘汰されるのかな。

WindowsMEでは、OSのヘルプ(説明とかトラブルシューティングとか)にHTAが
使われているのをよく見かけますけど、どうなんでしょうね。
ヘルプ系では*.CHMも増えてきましたけど、未だに*.HLPがしばしば使われてますし(笑)。

>(で、使おうと思えばCOMオブジェクト以外にも.NET Frameworkのオブジェクトも使える、
>というのが理想…ってないよな、それは(^^;)

.NET Frameworkのオブジェクトに、COMのインターフェースを通じてアクセスできれば、
できるかもしれませんね。

AKiOS さん 2001年 01月 14日 18時 27分 03秒

To: 高橋 さん

こちらこそ、よろしくお願いします。

> Netscapeだと、2行目の「s.length」で一発でとれるんですよね。
(中略)
> # Netscape6はどうなるんでしょう?

詳しくは知りませんが、IEと同じようになるんじゃなかったですか。(^^;



To: 管理人むたぐち さん

やはり確実な方法はないようですね。

> Win2000系、というかNT系では、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ProductOptionsキー
> の"ProductType"に"WinNT"という文字列が入っているので、これで確認できると思います。

ちょっと気になったのですが、Win2000でも HKEY_LOCAL_MACHINE\ 以下のキーを
すべてのユーザが読み出せるのでしょうか?


> > 数MBのテキストはともかく、この場合はidxファイルを作るだけなんですよね?
>
> 実はDatulaにおいてはそれだけの話ではなくて、mbxファイルも、各記事が512byte(1セクター)境界から
> 始まるように配置しないといけないので、mbxファイル全体を扱う必要があるのです。

セクター境界に配置する場合であっても、最初にmbxファイルのファイルサイズを
求めておけば、追加だけでいけると思います。

> また、Datulaでは他にもmbxファイル内のどのセクターにデータがあるかを管理するbmpファイル
> (といっても画像ファイルではない)なんかもあって、バイナリの読み書きができないFileSystemObject
> では手も足も出ません。
> ということで、あきらめました(^^;

それならしょうがないですね。(^^;


> > 以下はJavaScriptのサンプルです。
(中略)
> VBSでの定石(?)とほぼ同じで、やはり一文字ずつ評価するしかないんですね。

他にも方法はありますが、これが最も簡単でいいと思います。

> > 調べてみたところ、デスクトップは "Program Manager" 、
> > タスクバーの方はタイトルバーがないためか、設定されていませんね。
>
> となると、"Program"という文字列をタイトルバーに含むウィンドウをアクティブにするのは、
> "Program"を指定文字列とする限りにおいては不可能ですね。

それはそうですが、完全に一致するタイトルを指定すればよいので
特に困ることはないでしょう。

Lib30 さん (lib30@yo-mail.co.jp) 2001年 01月 14日 01時 09分 27秒
URL:http://www.ob.aitai.ne.jp/~kazoo/

>> Call objHTTP.Send(xmldoc)
>すいません、xmldocには何を入れたらいいんでしょうか?

何もいれず、このままでいけると思います。また、Send()という風に省略してしまってもいいようです。

ドキュメントによればSendメソッドというのは、Openメソッドで
指定したアドレスとの通信路を開き、そのアドレスへXMLDocumentオブジェクト
なるものを送信するためのものだそうです。そしてサーバー側で受け取ったオブジェクトを
保存したりくっつけたりしてその結果を取得するのがgetAllResponseHeaders()や
responseTextといったメソッド、プロパティのようです。

>そういえばXMLHTTPオブジェクトの公式なドキュメントってないんでしたっけ。

http://msdn.microsoft.com/xml/reference/scriptref/XMLDOM_Objects.asp
にある、XMLHttpRequestというのがMicrosoft.XMLHTTPオブジェクトのことのようです。
FileSystemObjectなどと違い、システムに登録されているIDのようなものと実際の呼び名は違うようです。

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2001年 01月 14日 00時 37分 06秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

何気に長文になってしまいましたが…
↑wshbbs.vbs用に、なんとなくタイトルっぽいのを入れてみました。

To: 高橋 さん

> (長文)wshbb.vbs、実行条件明示してありますね(汗)

最近は必要環境を書くのもなかなか大変で。
OSもIEもWSHもバージョンがいろいろ増えましたからね。
Win95+IE4.01(シェル統合)+IE5.01+Windows Script5.5 とかでも動くかもしれませんが、
そんなものいちいち書いてられないし(^^;

> 私「この処理なら、速度はあまり要求しませんね。では、実装はWSHで…」
> 顧客「いや、将来何があるか分からんし、速度最優先で頼む。」
> 私「じゃ、ATLで…」
> 顧客「将来的に問題が起こったらどうする! お前が異動してたら困るんだ!」
> 私「ソースはありますし、ドキュメントも…」
> 顧客「うちのやつはCが分かんないんだ!」
> 私「…(絶句)」

…現場の生の声は生々しいですね(当たり前ですが(^^;)

> そういえば、過去ログで「言語の実装のみで目的を達成することへのこだわりがある。」と
> 書かれていたような…(^^;

というか、OS標準以外のコンポーネントなどを使わずに、目的を実現するのが好きだという
ことです。
これだと、○○をインストールしてください、と書く必要がない、という理由もありますが、
「自動処理とは程遠い」と思われているWindowsでも、ここまでのことができるんだ、というのを
示したいというのもあります。

> 私の方も、index.htmとlist1.htmをダウンロードし、正規表現のところで止まりました。

私の早とちりでしたね。別にダウンロードが失敗していたわけではなかったのですね(^^;

> list1.htmの内容を確認してみると、1から50まで全て取得できています。で、いくつか
> エラーをトラップしてみたのですが、SubMatchesオブジェクト(のプロパティ、メソッド)
> を触るとVBS実行時エラー'438'が発生します(Kenji Yamamotoと同じエラー)。

こういうスクリプト言語のバージョンに依存するスクリプトを書くときは、バージョンチェックを
すべきなんですが、これもめんどくさいから省略してます。
厳密なエラー処理を書くこともないでしょ、しょせんスクリプトなんだし、といった
軽い気持ちでやってます(^^;

> Netscapeだと、2行目の「s.length」で一発でとれるんですよね。

うーん、NetscapeとIEで実行結果が違う例の一つですね。
こういう差異のために、わざわざブラウザ判別ルーチンを加えるのも、ばかばかしい話ですね。
何とかして欲しいです。ECMAScriptというのは理想系にすぎないのか?



To: 松島 さん

> popupの多重生成が可能かどうかなど、試してみないと分からないことがありますけど、
> 2点ほど、どうしようもなかった問題点が解決しそうなので、使ってみたいと思います。
> (ブラウザ枠でクリッピングされてスクロールバーが出てしまうのと、
>  OBJECTタグのコントロールの裏側に表示されるのが解決しそうです)

うまくいくといいですね。
完成の折には、またご報告いただけると幸いです。

ところでこのpopupオブジェクト、ウィンドウをはみ出して表示することは可能なんでしょうか?
これまでのdivなどを使う手法だと、どうしてもウィンドウ内でしか表示できなかったので、
ポップアップっぽくならなかったのですが。

> >余談ですが、.NET Frameworkではメニューバーが当然普通に使えます。
>
> それはいいことですね。
> 余計なところに労力を使わなくて済むのは、すばらしいことです(^^)。

そうですね。WSHやHTAと.NETってどういう関係になるんでしょう。やはり淘汰されるのかな。
お気楽スクリプト環境として生き残ってもらいたいですが。
(で、使おうと思えばCOMオブジェクト以外にも.NET Frameworkのオブジェクトも使える、
というのが理想…ってないよな、それは(^^;)



To: AKiOS さん

> WSHで確実にWin9x系とWin2000系を判別する方法って、あるのでしょうか?
> 過去ログを探していたら、Win9x系では%ProgramFiles%が未定義のようなので
> これでいけると思ったのですが、AUTOEXEC.BAT等で定義されている可能性が
> あるので確実じゃないですね。

Win2000系、というかNT系では、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ProductOptionsキー
の"ProductType"に"WinNT"という文字列が入っているので、これで確認できると思います。
# "LanmanNT"や"ServerNT"の場合もあるらしい。Win2000Proでは"WinNT"でした。
Win9x系ではこのキーがないので、読み出し時にエラーが出た場合はNT系、という解釈で
いいと思います。

ちなみにWin9x系ではHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersionキーに
"VersionNumber"があり(NT系にはない)、その値がWindowsのバージョンを格納しています。
(Win98SEなら"4.10.2222"という値になる)

両方の条件を加味してやれば、そこそこ信憑性のあるバージョンチェックができると思います。
が、これも手動で値を改ざんされていたら困りますが、普通は大丈夫でしょう。

あと、Win9x系には、ユーザー環境変数がないことを利用することもできるかもしれません。
たとえば、
Set WSHEnv = WshShell.Environment("User")
でエラーが出たらWin9x、と言えるのではないでしょうか。と思ったら、別にWin9xでも
エラーは出ないですね(^^;

では、Win9x系にはシステム環境変数がないことを利用して、WshShell.Environment("System").Count=0かどうかで
決めるのはどうでしょう、と思ったら、なぜかWin9xではWshShell.Environment("System").Count=1ですね。
何でかというと、WSHのインストーラーが、
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
(システム環境変数の格納キー)に"PATHEXT"という名前の値を、Win9xでも意味なく追加してしまうからでした。
ただし、Win9xで
Set WshShell = WScript.CreateObject("WScript.Shell")
For Each s In WshShell.Environment("system")
msgbox s
Next
というスクリプトを実行すると、「データがさらにあります」という日本語になっていない意味不明の
エラーを出してきました。なんじゃこりゃ。
どちらにせよ、WshEnvironmentは、それが環境変数として認識されているかどうかに関係なく、ただ
該当のレジストリキーを参照しているだけなので(過去記事参照)、この方法でWin9xかWinNTかを
判断するのはきわめて危険だという結論になるでしょう。

それにしても、環境変数の話に踏み込むと、毎度ややこしい話になりますね。

> 数MBのテキストはともかく、この場合はidxファイルを作るだけなんですよね?

実はDatulaにおいてはそれだけの話ではなくて、mbxファイルも、各記事が512byte(1セクター)境界から
始まるように配置しないといけないので、mbxファイル全体を扱う必要があるのです。
(で、idxファイルには、各記事のセクター位置を記録することで、mbxファイルの読み出しの高速化を
図っているわけです)
しかも、WSHというかFileSystemObjectでは、ファイルのある部分からある部分を読み込んである部分に
書き込む、とかができないので、毎回ファイル全体を処理しないといけません。これは
やはり非能率的だし、第一こんなコードを書きたくありません(^^;
また、Datulaでは他にもmbxファイル内のどのセクターにデータがあるかを管理するbmpファイル
(といっても画像ファイルではない)なんかもあって、バイナリの読み書きができないFileSystemObject
では手も足も出ません。
ということで、あきらめました(^^;

> 以下はJavaScriptのサンプルです。
> --- ここから ---
> function lenB(s) {
> var len = s.length;
> for (var i = 0; i < s.length; i++) {
> if (s.charCodeAt(i) > 0xff) {
> len++;
> }
> }
> return len;
> }

VBSでの定石(?)とほぼ同じで、やはり一文字ずつ評価するしかないんですね。

> > タスクバーをアクティブにする方法はわかりませんが、デスクトップは
> > WshShell.AppActivate "program" でなぜかできます。
>
> 調べてみたところ、デスクトップは "Program Manager" 、
> タスクバーの方はタイトルバーがないためか、設定されていませんね。

なるほど、そういうわけでしたか。
となると、"Program"という文字列をタイトルバーに含むウィンドウをアクティブにするのは、
"Program"を指定文字列とする限りにおいては不可能ですね。
まあ、もともとファジーなもんですから仕方ないか。
# でもVBだと、shell関数(プログラム実行)の返り値(タスクID)をAppActivateの引数にできるので、
# かなり確実な制御ができるんですよ。WSHのヘルプにも同じことが書いてあるんですが、
# これはもちろん間違い。(VBのヘルプを丸写ししたのがバレバレ)
# WSH5.6βのヘルプにはshell関数の文字こそなくなったものの、タスクIDが指定できるという説明は
# 残ったままです。もしかすると単なるミスではなく、本当にタスクIDなるものを指定する方法があるのでは、
# という気がしてきたのですが真相は不明。



To: イケダ さん

> abc.wsf のファイル中で、
> objWshShell.Run("def.wsf",0,1)
> と書き、wsfファイルを呼びました。
> さらにその中で、
> objWshShell.Run("ghi.wsf",0,1)
> と呼びました。
> 全部で3つのファイルです。
>
> このプログラムは無事実行でき、
> 次に標準出力先をファイルに変えようと思いました。
>
> abc.wsfはダブルクリックで起動するとして、
> def.wsfを呼ぶ時に標準出力をファイルにしようと思っています。
> def.wsfのファイルの先頭に、
> Dim stdout
> Set stdout = WScript.StdOut
> を付け加えました。
> def.wsfでも標準出力をファイルにし、
> またghi.wsfでも標準出力をdef.wsfと同じファイルにするためには、
> objWshShell.Run("def.wsf",0,1)
> と
> objWshShell.Run("ghi.wsf",0,1)
> を、どのように書き換えたらよいでしょうか。
> 出力先のファイル名は、abc.wsfの1個所だけに書きたいです。

まず、abc.wsfの標準出力をファイルにする、というのは、標準出力をファイルに
リダイレクトする、ということでよろしいでしょうか。

出力ファイル名をresult.txtとします。

-abc.wsf-
objWshShell.Run("command /c cscript //nologo def.wsf result.txt >> result.txt",0,1)

-def.wsf-
objWshShell.Run("command /c cscript //nologo ghi.wsf " & " >> " & WScript.Arguments(0),0,1)

としてやれば、abc.wsfにファイル名を書くだけで、def.wsfおよびghi.wsfにも同じファイルに出力
できると思います。(これでうまくいくと思うんだけど…)
wsfファイルへの引数に、出力ファイル名を指定してやることがポイントですね。

ただ、私はこの方法をまったくお勧めしません。というのも、せっかくFileSystemObjectで
テキストファイル操作が可能なんですから、これを利用するほうがいいです。(追記とかも可能ですし)



To: Lib30 さん

> 最近書き込みしていないんで、たまにわっと。

スクリプトのご提供、どうもありがとうございます。

> Call objHTTP.Send(xmldoc)

すいません、xmldocには何を入れたらいいんでしょうか?

> HTTPに関する情報を取得するスクリプトです。XMLHTTPオブジェクトははっきりとした使い方はよくわからず、
> この使い方も実は外道かもしれませんが...。

そういう使い方もできるんですね。結構興味深いです。
これで少なくともHTMLドキュメントを取得・HTTPの情報を取得、という2個の使い道が見つかりましたね。
XMLとは直接関係ない使用法に限定すると、ですが(^^;

そういえばXMLHTTPオブジェクトの公式なドキュメントってないんでしたっけ。
外道でも邪道でも、便利に使えればそれで良しとしましょう(^^;

Lib30 さん (lib30@yo-mail.co.jp) 2001年 01月 13日 17時 20分 26秒
URL:http://www.ob.aitai.ne.jp/~kazoo/

最近書き込みしていないんで、たまにわっと。

Set objHTTP = CreateObject("Microsoft.XMLHTTP")
Call objHTTP.Open("POST", "http://www.ob.aitai.ne.jp/~kazoo/", false)
Call objHTTP.Send(xmldoc)
MsgBox objHTTP.getAllResponseHeaders() ,,"HTTP Header"
MsgBox objHTTP.responseText ,,"Source"
MsgBox objHTTP.statusText ,,"HTTP Status"

HTTPに関する情報を取得するスクリプトです。XMLHTTPオブジェクトははっきりとした使い方はよくわからず、
この使い方も実は外道かもしれませんが...。

イケダ さん 2001年 01月 12日 21時 48分 09秒

すみません。「書き込む」押しました。

abc.wsf のファイル中で、
objWshShell.Run("def.wsf",0,1)
と書き、wsfファイルを呼びました。
さらにその中で、
objWshShell.Run("ghi.wsf",0,1)
と呼びました。
全部で3つのファイルです。

このプログラムは無事実行でき、
次に標準出力先をファイルに変えようと思いました。

abc.wsfはダブルクリックで起動するとして、
def.wsfを呼ぶ時に標準出力をファイルにしようと思っています。
def.wsfのファイルの先頭に、
Dim stdout
Set stdout = WScript.StdOut
を付け加えました。
def.wsfでも標準出力をファイルにし、
またghi.wsfでも標準出力をdef.wsfと同じファイルにするためには、
objWshShell.Run("def.wsf",0,1)

objWshShell.Run("ghi.wsf",0,1)
を、どのように書き換えたらよいでしょうか。
出力先のファイル名は、abc.wsfの1個所だけに書きたいです。


よろしくご指導願います。

イケダ さん 2001年 01月 12日 21時 31分 20秒

はじめまして。イケダと申します。
WSHでプログラム作成中で、
わからないことがあったので教えてください。


*.wsf のファイル中で、
objWshShell.Run("abc.wsf",0,1)

高橋 さん 2001年 01月 12日 18時 49分 59秒

高橋@仕事でハイになっている状態、です。


>AKiOSさん
AKiOSさん、初めまして。
高橋@新参者です。
よろしくお願いします。
作業のほうが一息ついたので、思わず出てきてしまいました。

>>> LenB()に関しては、職場でも話題が豊富です。
>以下はJavaScriptのサンプルです。
>--- ここから ---
>function lenB(s) {
> var len = s.length;
> for (var i = 0; i < s.length; i++) {
> if (s.charCodeAt(i) > 0xff) {
> len++;
> }
> }
> return len;
>}
>--- ここまで ---
>
Netscapeだと、2行目の「s.length」で一発でとれるんですよね。
近年、WEBの仕事が増えていますが、このあたり、知っていないと
ハマりますよね。。。

# Netscape6はどうなるんでしょう?
# 検証しないと。。。

AKiOS さん 2001年 01月 12日 17時 16分 32秒

おひさしぶりです。

WSHで確実にWin9x系とWin2000系を判別する方法って、あるのでしょうか?
過去ログを探していたら、Win9x系では%ProgramFiles%が未定義のようなので
これでいけると思ったのですが、AUTOEXEC.BAT等で定義されている可能性が
あるので確実じゃないですね。
# 環境変数なら %COMSPEC% で判別するしかないのかな。



To: 管理人むたぐち さん

> > LenB()に関しては、職場でも話題が豊富です。
>
> いちばん簡単な方法として、一字一字、その文字が1バイトかそうでないかを
> 調べる方法が、よく挙げられていますね。
> これだと、VBSの機能だけでできる反面、非常に時間がかかってしまうという
> デメリットがあります。
> この方法で数MBのテキストを調べるとき、実用的な速度が出るものでしょうか(^^;

数MBのテキストはともかく、この場合はidxファイルを作るだけなんですよね?
インポートする手間を考えたらデメリットというほどでもないと思いますよ。
以下はJavaScriptのサンプルです。
--- ここから ---
function lenB(s) {
var len = s.length;
for (var i = 0; i < s.length; i++) {
if (s.charCodeAt(i) > 0xff) {
len++;
}
}
return len;
}
--- ここまで ---


それから、遠隔レスになりますが(^^;

> タスクバーをアクティブにする方法はわかりませんが、デスクトップは
> WshShell.AppActivate "program" でなぜかできます。

調べてみたところ、デスクトップは "Program Manager" 、
タスクバーの方はタイトルバーがないためか、設定されていませんね。

松島 さん (matsushima@popup.org) 2001年 01月 12日 10時 20分 03秒
URL:http://www.popup.org/ai/

むたぐちさんへ

>しかし、正直言って松島さんのメニューバーが、一番良くできています(^^;
>ちゃんと階層構造も持っているし…。

元のサンプルから得たヒントが大きくて、まだまだパクリの域を脱していなくて
恐縮です(^^;)。

>IE5.5から、popupオブジェクトというのが使えるようになったのですが、これは
>どうでしょうか。(私もよく調べていないのですが)

popupの多重生成が可能かどうかなど、試してみないと分からないことがありますけど、
2点ほど、どうしようもなかった問題点が解決しそうなので、使ってみたいと思います。
(ブラウザ枠でクリッピングされてスクロールバーが出てしまうのと、
 OBJECTタグのコントロールの裏側に表示されるのが解決しそうです)

>余談ですが、.NET Frameworkではメニューバーが当然普通に使えます。

それはいいことですね。
余計なところに労力を使わなくて済むのは、すばらしいことです(^^)。

高橋 さん 2001年 01月 12日 02時 47分 21秒

(長文)wshbb.vbs、実行条件明示してありますね(汗)
高橋@WEB各所出没中 & 明日から仕事山積み & 愚痴モードです。(^^;

>Kenji Yamamotoさん
>mget uf で拾ってきたメイリングリスト過去記事については、そのままインポートできましたし。
>もしかしたら、Outlook Express5 に一度読み込ませてからインポートしていたのかもしれませんが。
>どちらにせよ、トラブルなくいったので、あんまり詳しく覚えていないです。
>すいません。m(__)m
>
いえいえ、色々とありがとうございました。
おかげさまで、当初の野望も達成でき、大変感謝しています。m(_ _)m

# 私の場合、試行錯誤している間が一番楽しいのかもしれません。仕事は別ですが…(爆)

# もしや、Windows2000 FAQ でお会いしていたりしますか?



>むたぐちさん

>> 入力:掲示板ログからReadLine
>> やはりあまり速くない(遅い)です。
>まあ、処理の性質によって、この長さが容認できるかどうかが決まってくるんでしょうけど。
>
そう、結局要求される性能なんですよね。
で、その時の顧客との会話を…
私「この処理なら、速度はあまり要求しませんね。では、実装はWSHで…」
顧客「いや、将来何があるか分からんし、速度最優先で頼む。」
私「じゃ、ATLで…」
顧客「将来的に問題が起こったらどうする! お前が異動してたら困るんだ!」
私「ソースはありますし、ドキュメントも…」
顧客「うちのやつはCが分かんないんだ!」
私「…(絶句)」

# 結局、LenA()のような方法をとりましたが。
# 「入力が100バイト程度なんだから…」とは言いませんでしたが。

>でも、もとはといえば、LenBがShift-JISに対応していないのが問題で、これを
>何とかして欲しかったですね。
>
そういえば、過去ログで「言語の実装のみで目的を達成することへのこだわりがある。」と
書かれていたような…(^^;

>> 結局、「掲示板の記事をMUAで」という野望は、下記で出来ました。
>> 1.wshbbs.vbs で.emlに保存
>> 2.作成した.emlをOE5にドラッグアンドドロップ
>> 3.Outlook2000でOE5のデータをインポート
>
>あんまり何回もやりたくないですね(^^;
>wshbbs.vbs側でなんとかしたいところですが、要研究です。
>
いえいえ、ダブルクリック1つで新規投稿チェックができますので、大変重宝しています。
ブラウザも開かなくてすみますし。(爆)


>> # OE5のデータファイルをOutlook2000で読み込むと、なぜか受信日時が「なし」に。
>> # 送信日時はあるのに…
>う、wshbbs.vbsのDate:フィールドは適当なので、そのせいかもしれません。
>というか、全部適当なんですけどね(^^;
>
.emlファイルにしてOE5で読み込んだときは、送信日時も受信日時もきちんと入っています。
ということは、やはりOutlook2000?

# 早計は禁物ですが…
# 調べてみたいですね(いつになることやら)

>> # 過去ログDL & メイラーの検索でログ検索もバッチリですね。
>Datulaの本文検索機能は、ちょっと弱いので(でもヘッダフィールド検索は使える)、
>私はAKiOSさんのHTAで検索しています。
>こちらは正規表現が使えるし、ヒットした記事を一覧表示できるし便利です。
>
いずれこちらも使わせていただきたいと思います。
よろしくお願いします。m(_ _)m


>> 掲示板取得スクリプトが動作しませんでしたので、状況の情報を提供いたします。
>ありがとうございます。
>その環境では、IE5.5はインストール済みでしょうか。あ、リスト1が取得できているということは、
>インストール済みですよね。
>
下で「バージョンが…」などと書いてしまいましたが、この実行環境のあたりは、
スクリプト内に思い切り書いてありました。
またもや早とちりでした。申し訳ありません…m(_ _)m

>となると、ダウンロードが失敗している可能性が高いです。
>実はこのスクリプト、エラー処理をほとんどしていません(おい…)。
>そのため、ダウンロードに失敗しても、無理やりデータ変換しようとします。
>それでこけてるんだと思います。wshbbs.iniを削除してもう一度やってみてください。
>
先ほどは状況説明が足りませんでしたので、改めまして…
私の方も、index.htmとlist1.htmをダウンロードし、正規表現のところで止まりました。
(エラー行など、Kenji Yamamoto さんと全く同じ状況です)
list1.htmの内容を確認してみると、1から50まで全て取得できています。で、いくつか
エラーをトラップしてみたのですが、SubMatchesオブジェクト(のプロパティ、メソッド)
を触るとVBS実行時エラー'438'が発生します(Kenji Yamamotoと同じエラー)。
M$からscriptjp.exeをDLできたので、適用後(VBS5.5、WSH5.1)に再実行したところ、再現
しませんでした。
# このスクリプト、大変重宝しています。
# お暇のある時にでもチェックして頂ければ幸いです。

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2001年 01月 12日 00時 11分 19秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

To: 高橋 さん

> vbscalc2.vbsに書かれていたので、昔Downloadさせて頂いた
> vbscalc.vbsを開いてみました…すごい発想ですね、これ。
> M$-DOSでバッチ(ファイル)を作っている感じですね。(^^)
> いや、ホントすごいです。

vbscalc.vbsは、実は今でもダウンロードが可能なので、興味ある方はどうぞ。
別ファイルを作ってそれを実行させ、結果を取得する、という方法を思いついた後、
Eval関数の存在を知り、こっちの方が簡単にできるな、と思ってvbscalc2を作った
んだったと思います。
それか、Eval関数を実行できない環境で、Eval相当のことをするにはどうすればいいのか、
という考えでvbscalcを作ってみたのかな? 忘れた…。

> 入力:掲示板ログからReadLine
> 出力:バイト長 タブ 入力文字列 → 出力用ファイル
> 10回実行し、平均16886ミリ秒でした。
> やはりあまり速くない(遅い)です。

わざわざ実験、どうもありがとうございました。
なるほど、微妙なところですが、20秒っていうのはやはり長いですね。
まあ、処理の性質によって、この長さが容認できるかどうかが決まってくるんでしょうけど。

> 速度が要求される場面では、やはりCやDelphiでCOM化したほうが有利ですね。

そうですね。
でも、もとはといえば、LenBがShift-JISに対応していないのが問題で、これを
何とかして欲しかったですね。

> LenB()関連、過去ログにありましたね。
> お騒がせして申し訳ありません。m(_ _)m

いえいえ、この掲示板では、この問題はまだ未解決のままでしたし。

> 結局、「掲示板の記事をMUAで」という野望は、下記で出来ました。
> 1.wshbbs.vbs で.emlに保存
> 2.作成した.emlをOE5にドラッグアンドドロップ
> 3.Outlook2000でOE5のデータをインポート

あんまり何回もやりたくないですね(^^;
wshbbs.vbs側でなんとかしたいところですが、要研究です。

> # OE5のデータファイルをOutlook2000で読み込むと、なぜか受信日時が「なし」に。
> # 送信日時はあるのに…

う、wshbbs.vbsのDate:フィールドは適当なので、そのせいかもしれません。
というか、全部適当なんですけどね(^^;

> # 過去ログDL & メイラーの検索でログ検索もバッチリですね。

Datulaの本文検索機能は、ちょっと弱いので(でもヘッダフィールド検索は使える)、
私はAKiOSさんのHTAで検索しています。
こちらは正規表現が使えるし、ヒットした記事を一覧表示できるし便利です。
というか、MUAからは返信できないので、このHTAはとても手放せません(^^;
wshbbs.vbs(これ、声に出して読んだら噛みそうになるなあ)をこのHTAのダウンローダーとして
使えるようにしたのも、私が使うから、です(^^;


To: 松島 さん

> http://db.popup.org/matsushima/temp/20010110/sample.html
> を作ってみたのですが、まだまだ理想には遠いかな、といった感じです(^^;)。

HTAのメニューバーは、この掲示板で、何回かネタになっているテーマですね。
17-20 【おじさま】 さん 2000/07/14 10:46
17-22 管理人むたぐち さん 2000/07/15 03:58
17-32 Lib30 さん 2000/07/17 16:23

しかし、正直言って松島さんのメニューバーが、一番良くできています(^^;
ちゃんと階層構造も持っているし…。

> 標準でインストール済みのActiveX Controlか、HTCなどのみで実現させたい
> のですが、なにかよいサンプルをご存知でしたら、教えていただければ嬉しいです。

IE5.5から、popupオブジェクトというのが使えるようになったのですが、これは
どうでしょうか。(私もよく調べていないのですが)
標準のActiveXコントロールとしては、昔IEPopupというコントロールがあったんですが、
いつのまにか標準ではなくなってしまいました。(IE4まで?)
ただ、ダウンロードして導入することは可能です。このコントロール(といってもIEPopupとは
別物かもしれません)はLib30さんのページに詳しいです。

余談ですが、.NET Frameworkではメニューバーが当然普通に使えます。


To: Kenji Yamamoto さん

> Outlook Express 5 Mail Converter
> http://www02.so-net.ne.jp/~home/oe5conv/

このツールは私もよく紹介するんですが、OE5のdbxファイルをemlファイルに
切り分けるツールです。
OE5からDatulaに移行するとき、めちゃくちゃ重宝しました。
投稿済みニュース記事まで移行できましたし。

ちなみに、このページでは、dbxファイルのファイルフォーマットの解析結果が
公開されているので、自分でコンバーター等を作成することもできると思います。

> 可能なら、以下の私のメッセージは同一文面ですので、削除をお願いしたいのですが。
> 申し訳ありませんが、宜しくお願いいたします。m(__)m

すいません、削除は管理人ですらできないのです(^^;
できることはできるのですが、ちょっと理由がありまして(7-43参照)、よほどのことで
ない限り削除はしないことにしています。ご了承ください。

> 掲示板取得スクリプトが動作しませんでしたので、状況の情報を提供いたします。
> エラー状況:index.html/リスト1を取得した後、記事取得が出来ない。
> 環境:Windows2000 Professional SP1/Dell Optiplex GX110
> ネットワーク環境:LANからFirewall 越しの外部接続
> エラー状況:以下のメッセージが出ます。
> (ここから)
> スクリプト:(格納パス)\wshbbs.vbs
> 行:188
> 文字:4
> エラー:オブジェクトでサポートされていないプロパティまたはメソッドです。:'regEx.Execute(...)'

ありがとうございます。

その環境では、IE5.5はインストール済みでしょうか。あ、リスト1が取得できているということは、
インストール済みですよね。
となると、ダウンロードが失敗している可能性が高いです。
実はこのスクリプト、エラー処理をほとんどしていません(おい…)。
そのため、ダウンロードに失敗しても、無理やりデータ変換しようとします。
それでこけてるんだと思います。wshbbs.iniを削除してもう一度やってみてください。

タイムアウトとか、取り込んだ記事の完全性チェックとかすべきでした。
また気が向いたら(おいおい)、改善したいと思います。

# この掲示板にプロキシサーバーごしで接続すると、どうも変なことが起こるような…。


To: 寿 さん

> 現在、ダイヤルアップ接続エントリーを自動で作成するソフトを作ろうと、思っているのですが、VBで作ると長々となってしまうので、VBSで作ろうと思いましたが、どうして良いものか分かりません。VBSは普通に使えますが、その辺の知識がありません。良い案が、あったら是非お願いします。

高橋さんに該当ログをピックアップしていただいたので、そちらを参照してください。
(高橋さんどうもありがとうございます)

ダイヤルアップ接続の自動化に関しては、他に
21-47,12-41などもどうぞ。

高橋 さん 2001年 01月 11日 22時 39分 05秒

Sub:掲示板取得スクリプト
とり急ぎ、ご報告までに。

>Kenji Yamamotoさん
私もでました。
職場では問題なかったのですが、自宅で出てしまいました。
職場:Windows95 OSR2.1、LAN-Firewall-Internet
自宅:Win2000 Pro SP1、ダイアルアップ
エラー状況は同じです。

VBSヘルプを眺めて思ったのですが、SubMatchesオブジェクトは
「バージョン 5,5」となっています。
私のスクリプト環境は、
職場のVBSバージョンは「5.5」
自宅のVBSバージョンは「5.1」
なので、その辺りが原因かもしれません。

M$のページから5.5をDLしようにも、タイムアウトになってしまい、
確認も出来ません(DLページも表示されません…)。
http://www.microsoft.com/msdownload/vbscript/scripting.asp?id=25


'このスクリプトでVBSのバージョンをチェックできます。
WScript.Echo "VBS : " & ScriptEngineMajorVersion & "." & ScriptEngineMinorVersion

Kenji Yamamoto さん (kenjiaxl01@geocities.co.jp) 2001年 01月 11日 18時 25分 04秒

掲示板取得スクリプトが動作しませんでしたので、状況の情報を提供いたします。
エラー状況:index.html/リスト1を取得した後、記事取得が出来ない。
環境:Windows2000 Professional SP1/Dell Optiplex GX110
ネットワーク環境:LANからFirewall 越しの外部接続
エラー状況:以下のメッセージが出ます。
(ここから)
スクリプト:(格納パス)\wshbbs.vbs
行:188
文字:4
エラー:オブジェクトでサポートされていないプロパティまたはメソッドです。:'regEx.Execute(...)'
コード:800A01B6
ソース:Microsoft VBScript 実行時エラー
(ここまで)

以上、ひとまずの情報提供まで。m(__)m

山本謙次

Kenji Yamamoto さん (kenjiaxl01@geocities.co.jp) 2001年 01月 11日 18時 02分 48秒

高橋さん:インポートの件ですが、テキスト形式からのコンバートですが、
私の場合はあんまり考えずにインポートできた記憶があります。
mget uf で拾ってきたメイリングリスト過去記事については、そのままインポートできましたし。
もしかしたら、Outlook Express5 に一度読み込ませてからインポートしていたのかもしれませんが。
どちらにせよ、トラブルなくいったので、あんまり詳しく覚えていないです。
すいません。m(__)m

高橋 さん 2001年 01月 11日 16時 51分 27秒

失礼しました。
高橋です。

>寿さん
過去ログは50件ずつになっていますので、それぞれのログから
下から48件目(上から3番目)、46番目、47番目になります。

# 過去ログDL & メイラーの検索でログ検索もバッチリですね。

高橋 さん 2001年 01月 11日 16時 45分 52秒

RE: ダイアルアップエントリー
高橋です。

ダイアルアップの設定をするなら 過去ログ8-48
ダイアルアップ接続を自動化するなら 過去ログ3の46、47
あたりが参考になると思います。

寿 さん (ahoahomax@mail.infoseek.co.jp) 2001年 01月 11日 16時 13分 34秒

初めまして。
寿と言います。

現在、ダイヤルアップ接続エントリーを自動で作成するソフトを作ろうと、思っているのですが、VBで作ると長々となってしまうので、VBSで作ろうと思いましたが、どうして良いものか分かりません。VBSは普通に使えますが、その辺の知識がありません。良い案が、あったら是非お願いします。

それでは、よろしくお願いします。

Return