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


To: Decorative さん

MSのサイトにあるヘルプの、エラーの記述、見てみたところ確かに変わって
いました。
私の持っているHTMLヘルプは、ちょっと古い(ver5.0対応)みたいです。
でも、5.0と5.1はそれほど変わらないので、わざわざDLするほどでもないですね。
#というか、GetFileVersionの追加以外に変わったところってあります?

To: NashiWater さん

>今この方法でやっていますが、オブジェクトにする弱点として、
>プロパティの参照の度に、トラフィックが発生してしまうんですね(T-T

そういうものなのですか。
FileSystemObjectも、Filesコレクションを取得して、各Fileオブジェクトの
プロパティを参照すると遅いですが、それと同じようなものなんでしょうね。
私は、作るのではなく使うだけなので、設計に関してはどうもピンときません(^^;

NashiWater さん 2000年 01月 19日 09時 57分 12秒

to: 管理人むたぐち

コメントありがとうございました。
やはり無理ですか。

>GetLog(index)メソッドは、Logオブジェクトを返し、Logオブジェクトは
>Msgプロパティ、AppNameプロパティなどを持つ、というのは
>「それらしい」感じがします。

今この方法でやっていますが、オブジェクトにする弱点として、
プロパティの参照の度に、トラフィックが発生してしまうんですね(T-T
と思ってこれを避けようとおもっていたんです。

イベントで...というのも、結構めんどくですね(^^
おっしゃるとおりに、配列で実現するのがよいのでしょう。

ありがとうございました。
失礼します。


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

To: Decorative さん

>(以前に記述されていた)確認用スクリプトから *想像* しますと・・・・・・
>MsgBox WSHEnv("PROCESSOR_ARCHITECTURE")
>の(前の行でなく)次の行で Err オブジェクトを確認されていませんか?

あっ! そうか!
たぶん、そうです(^^;
WshEnvという変数は、何も入っていないことになるので、このエラーは
当然ですね。失礼しました。

>ちなみに旧ヘルプでは、「書き込みできません。」となっています。
>cf. http://www.asia.microsoft.com/japan/developer/library/psdk/vbscrip5/vsidxErrorMessages.htm

あれ?
ヘルプって新しくなったのですか。後で見ておきます…。

To: ぼんじょびーの さん

>私的には、満足な回答(おかげさまで処理がうまく作れました。)でしたので、
>お忙しいところでしたらかまいません。

調べてみました。
Win98では、例の方法でシステム/ユーザー/揮発性環境変数を設定しようとすると、
対応するレジストリキー(オブジェクト解説-WshShellオブジェクト参照)
に値が書き込まれますが、それはDOSプロンプトで環境変数としては認識されませんでした。

つまり、Win9xでは、ただ意味のないレジストリ項目が書き込まれるだけです。
Removeメソッドも、対応するレジストリの値が消されるだけです。
まあ、当然といえば当然の結果ですが、何か間抜けな感じもします。
#OSくらい判断して欲しい…。

Win9xで環境変数を設定するには、Autoexec.batにSet行を書き込み、再起動
させてやるしかないのでしょう。

>しかし、その疑問に思ったところを即、解決する姿勢は、見習いたいです(^^;

ま、気分次第ですが(^^;

To: NashiWater さん

>調べてみたんですが、引数に結果をいれるというのは
>VBSでは不可能なのでしょうか?

たぶん無理だと思います。
VBSで引数に結果が入るのは、イベントの場合でしょうか。

メソッド実行→Doneイベント発生。Doneイベントの引数を参照する

というパターンは見たことがあります。

>1つのログには、いくつかの情報がぶら下がっているので
>レコード型で戻したいけど、VBSではレコードでうけとれない
>だろうから、引数に渡して戻そうという計画だったのですが...

配列を返すようにしてみてはいかがでしょうか。

もしくは、オブジェクトを返すようにしては?
GetLog(index)メソッドは、Logオブジェクトを返し、Logオブジェクトは
Msgプロパティ、AppNameプロパティなどを持つ、というのは
「それらしい」感じがします。

そんなことができるのか、知らないですが。
あまり詳しくないので、どなたかフォローしてください…。

NashiWater さん 2000年 01月 18日 10時 20分 27秒

はじめまして。
業務でバッチファイルの代わりに、VBSを使おうと勉強しています。
今、VBSから呼び出せるようにCOMオートメーションサーバー
を作成しているのですが、疑問があります。

ちょっと、ややこしいんですが
LogSystem.GetLogというメソッドがあるんですが
第一引数 [in] ログキー 整数
第二引数 [out] メッセージ 文字列
第三引数 [out] アプリケーション名 文字列
戻り値 [retval] 成功 Boolean
簡単にいうと
「ログキーを渡すと、そのログについて
メッセージとアプリケーション名を取り出すメソッドで、
正否をTrue/Falseで返す」


Dim LogSys
Set LogSys = CreateObject(....

Dim Msg,AppName
LogSys.GetLog(0,Msg,AppName)
とやるとエラーになります。(型が一致していません...)
調べてみたんですが、引数に結果をいれるというのは
VBSでは不可能なのでしょうか?

1つのログには、いくつかの情報がぶら下がっているので
レコード型で戻したいけど、VBSではレコードでうけとれない
だろうから、引数に渡して戻そうという計画だったのですが...

簡単なサンプルをみると、みんな戻り値以外に、
引数に結果がはいるパターンをみつけられませんでした。
よろしければ、御教え下さい。
失礼します。



ぼんじょびーの さん (trident@ceres.dti.ne.jp) 2000年 01月 18日 10時 12分 41秒

管理人さん。ありがとうございます。

>Win98では、どうなるのでしょう。あとでWin98を立ち上げて確かめてみます。
私的には、満足な回答(おかげさまで処理がうまく作れました。)でしたので、
お忙しいところでしたらかまいません。
しかし、その疑問に思ったところを即、解決する姿勢は、見習いたいです(^^;

ではでは。



Decorative さん 2000年 01月 18日 04時 56分 07秒

管理人むたぐち さん こんにちは。

>エラーを確認してみました。
> Err.Number=13
> Err.Description="型が一致しません。"
(以前に記述されていた)確認用スクリプトから *想像* しますと・・・・・・
MsgBox WSHEnv("PROCESSOR_ARCHITECTURE")
の(前の行でなく)次の行で Err オブジェクトを確認されていませんか?


Sido Muller さん こんにちは。

>私がスクリプトを実行したのは一般ユーザでした。
>そして原因は、「パーミッション」のエラーでした。
お忙しいところ、詳細な結果をご報告頂きまして、ありがとうございます。
どのような条件のアカウントで実行されていたのか知りたかったため、大いに参考になりました。

>原因の突き止め方
言い訳をさせて下さい。
原因を調べるために、Err.Number からヘルプを参照するよう提案しましたが、
通常、このようなことをする必要はありません。実行時エラーの際に表示される
ポップアップに記された内容がそのままエラー内容だからです。(当然か)
ただ今回は、当初予想していた(権限上の)原因が、実行時エラーメッセージから分かりづらく、
ヘルプの記述の方がより適当な内容に思えたため、ヘルプを参照するよう提案しました。
同じエラー番号で、実行時エラーメッセージとヘルプの記述が異なることがヘンだと思います。
ちなみに旧ヘルプでは、「書き込みできません。」となっています。
cf. http://www.asia.microsoft.com/japan/developer/library/psdk/vbscrip5/vsidxErrorMessages.htm

管理人むたぐち さん 2000年 01月 17日 20時 40分 06秒

環境変数関係の記述を、一気に更新しました。

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

また投稿が前後してしまいました。
#この書き込みもまた、そうなるかも。

To: Decorative さん

今Win2000を立ち上げて、エラーを確認してみました。
Err.Number=13
Err.Description="型が一致しません。"
だそうです。なんだかますますわからなくなってきました。

To: Sido Muller さん
>MSのヘルプにもう少し詳しい説明が欲しいところです。

ですね。ちょっとあのWSH2.0のヘルプはダメすぎます。
記述漏れが多いし、間違いだらけだし…。

AppActivateの説明なんて酷いですね。Shell関数なんてVBSにないって(^^;
VBのヘルプをそのままコピーするからこうなるんですね。

WScript.WshShellなんてProgIDはないぞ!<ニュースグループでFAQ化しています(笑)

WshSpecialFolders オブジェクトのItemプロパティの引数の説明にある、
StartupB…。対応バージョンWindows2000と書いてあるが出鱈目もいいところです。
これは、日本語版オリジナルの誤植らしい?(正解はStartup。SpecialFolders
プロパティでは正しく記載されている。)
WSH1.0のヘルプのミスが直っていないのがなんとも…。

VBS+FileSystemObjectのヘルプはなかなかいいだけに、惜しいです。

>二回も二重投稿してしまいました。

えっと、本来ならだぶった投稿は管理人が削除すべきなんですが、どうも
この掲示板では難しいので、あえてこのままにしておきます。すみません。

書き込みを修正するには、テキストをダウンロードし、手動で修正した後、
FTPソフトでアップし直すしかないようなのですが、これをやっている間に
書き込まれた記事は上書きされてしまうので、よっぽどのことがないと
できませんです。

To: ぼんじょびーの さん

>環境変数に値をセットするには、どうしたらよいのでしょうか?

そういえば、環境変数を消す、Removeメソッドはあるのに、セットする
メソッドはないようですね。セットするには、WshEnvironmentオブジェクトの
Itemプロパティに、作成する環境変数名を引数として与え、値を代入します。

Win2000では、
WshShell.Environment("USER").Item("hoge")="hogehoge"
で、ユーザー環境変数に値をセットすることができました。

WshShell.Environment("SYSTEM").Item("hoge")="hogehoge"
で、システム環境変数に値をセットすることができました。

先日から続いている議論でもわかるように、システム環境変数を
読み書きできるのは、Administratorだけです。

Win98では、どうなるのでしょう。あとでWin98を立ち上げて確かめてみます。
(って、忙しいなあ…)
Win9xでは、Autoexec.batをTextStreamで開いて書き直し、再起動させるしかない
のでしょうか?


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

To: ゲーム作成見習中 さん

>でも、ばっちり当たってましたよ。
>問題が解決しました。

良かったです。あれで正解だったのですね。

>管理人さんのようにできる男になれるようがんばります。

はは…(^^;

To: Decorative さん

>でも、ユーザの権利が原因なら、あの「書き込みできません」エラーメッセージは、意味が分かりづらいですネ。
>このエラーは、おそらくエラー番号 70 でしょうから、VBScript ヘルプのランタイムエラー 一覧内にある
>「パーミッションがありません」エラーメッセージの方が、まだ意味が分かるかも・・・って思います。

そういえば、エラー番号をチェックするのを忘れてました(^^;
WSH固有のエラーは、VBSランタイムのエラーと別にあるのではないかと
思います。(-214415416<←適当>とか、とんでもない番号が返されます)
でもWSH2.0のヘルプには、ごく一部のエラーしか載ってないですね。

「パーミッションがありません」は、スクリプティングランタイム(FileSystemObject)の
エラーだったような気がします。

えっと、次回Win2000立ち上げの際に、確認しておきます。
何となく立ち上げるのがおっくうなんですよね…。

ぼんじょびーの さん (trident@ceres.dti.ne.jp) 2000年 01月 17日 14時 53分 33秒

はじめまして。最近ウインドウズスクリプティングを勉強しているぼんじょびーのです。よろしくです。

質問です。環境変数に値をセットするには、どうしたらよいのでしょうか?
値を参照する方法は、このHPを見てわかったんですが。。

ではでは。

Sido Muller さん (kyx02150@nifty.ne.jp) 2000年 01月 17日 14時 47分 55秒

 管理人さん、すみません。

 二回も二重投稿してしまいました。
 私の所属するネットワークのプロキシーの調子が悪いみたいで、掲示板の書き換えが表示されません。
 大変申し訳有りません。

Sido Muller さん (kyx02150@nifty.ne.jp) 2000年 01月 17日 14時 45分 56秒

Decorativeさん、管理人さん

 こんにちは、Sido Mullerです。
 今回は、アドバイスをいただき大変ありがとうございます。
 Decorativeさんのプログラムを実行しエラーの原因を調べたところ、ご指摘の通りパーミッションでした。
 Win95/98,NT4.0で動くプログラムを目指すには、PROCESSを明示しておかなければならない、ということですね。
 書き忘れていましたが、ご指摘の通り、一般ユーザで実行していました。
 MSのヘルプにもう少し詳しい説明が欲しいところです。でないとサンプルをコピー&ペースとしたにもかかわらず動かないで「どうすればいいの」と途方に暮れるユーザが続出しちゃいますね。(^_^;)

 では、また。
 これからもよろしくお願いします。

Sido Muller さん (kyx02150@nifty.ne.jp) 2000年 01月 17日 14時 45分 49秒

Decorativeさん、管理人さん

 こんにちは、Sido Mullerです。
 今回は、アドバイスをいただき大変ありがとうございます。
 Decorativeさんのプログラムを実行しエラーの原因を調べたところ、ご指摘の通りパーミッションでした。
 Win95/98,NT4.0で動くプログラムを目指すには、PROCESSを明示しておかなければならない、ということですね。
 書き忘れていましたが、ご指摘の通り、一般ユーザで実行していました。
 MSのヘルプにもう少し詳しい説明が欲しいところです。でないとサンプルをコピー&ペースとしたにもかかわらず動かないで「どうすればいいの」と途方に暮れるユーザが続出しちゃいますね。(^_^;)

 では、また。
 これからもよろしくお願いします。

Sido Muller さん (kyx02150@nifty.ne.jp) 2000年 01月 17日 14時 40分 37秒

Decorative さん、管理人さん

 こんにちは、Sido Mullerです。
 私がスクリプトを実行したのは一般ユーザでした。
 そして原因は、Decorative さんの指摘されたとおり「パーミッション」のエラーでした。
 Win95/98,NTいずれの環境でも動くことを目指すので有れば、「PROCESS」を明示しておかなければならないわけですね。
 だとすると、ヘルプのプログラム例はちょっと不親切ですよね。
 ヘルプから引用すると、次の通りです。
 
>使用例
>次のコードは、NUMBER_OF_PROCESSORS システム環境変数を取得する例です。
>Set WshShell = WScript.CreateObject("WScript.Shell")
>Set WshSysEnv = WshShell.Environment("SYSTEM")
>WScript.Echo WshSysEnv("NUMBER_OF_PROCESSORS")

 きっと、動かなくて、原因の突き止め方もわからずに「こんなの使えねぇーや」と投げ出したユーザ(私もその一人)が、推定1万人はいるのでは。(^_^;)
 ここのみなさんには、いろいろ教えていただき大変ありがたいです。
 早く私も、スキルを身につけて、教えられるようになりたいです。

 これからも、よろしくお願いします。

Sido Muller さん (kyx02150@nifty.ne.jp) 2000年 01月 17日 14時 40分 24秒

Decorative さん、管理人さん

 こんにちは、Sido Mullerです。
 私がスクリプトを実行したのは一般ユーザでした。
 そして原因は、Decorative さんの指摘されたとおり「パーミッション」のエラーでした。
 Win95/98,NTいずれの環境でも動くことを目指すので有れば、「PROCESS」を明示しておかなければならないわけですね。
 だとすると、ヘルプのプログラム例はちょっと不親切ですよね。
 ヘルプから引用すると、次の通りです。
 
>使用例
>次のコードは、NUMBER_OF_PROCESSORS システム環境変数を取得する例です。
>Set WshShell = WScript.CreateObject("WScript.Shell")
>Set WshSysEnv = WshShell.Environment("SYSTEM")
>WScript.Echo WshSysEnv("NUMBER_OF_PROCESSORS")

 きっと、動かなくて、原因の突き止め方もわからずに「こんなの使えねぇーや」と投げ出したユーザ(私もその一人)が、推定1万人はいるのでは。(^_^;)
 ここのみなさんには、いろいろ教えていただき大変ありがたいです。
 早く私も、スキルを身につけて、教えられるようになりたいです。

 これからも、よろしくお願いします。

Sido Muller さん (kyx02150@nifty.ne.jp) 2000年 01月 17日 14時 40分 14秒

Decorative さん、管理人さん

 こんにちは、Sido Mullerです。
 私がスクリプトを実行したのは一般ユーザでした。
 そして原因は、Decorative さんの指摘されたとおり「パーミッション」のエラーでした。
 Win95/98,NTいずれの環境でも動くことを目指すので有れば、「PROCESS」を明示しておかなければならないわけですね。
 だとすると、ヘルプのプログラム例はちょっと不親切ですよね。
 ヘルプから引用すると、次の通りです。
 
>使用例
>次のコードは、NUMBER_OF_PROCESSORS システム環境変数を取得する例です。
>Set WshShell = WScript.CreateObject("WScript.Shell")
>Set WshSysEnv = WshShell.Environment("SYSTEM")
>WScript.Echo WshSysEnv("NUMBER_OF_PROCESSORS")

 きっと、動かなくて、原因の突き止め方もわからずに「こんなの使えねぇーや」と投げ出したユーザ(私もその一人)が、推定1万人はいるのでは。(^_^;)
 ここのみなさんには、いろいろ教えていただき大変ありがたいです。
 早く私も、スキルを身につけて、教えられるようになりたいです。

 これからも、よろしくお願いします。

Decorative さん 2000年 01月 17日 13時 21分 51秒

管理人むたぐち さん こんにちは。

WshEnvironment オブジェクトの生成について大いに参考になりました。

でも、ユーザの権利が原因なら、あの「書き込みできません」エラーメッセージは、意味が分かりづらいですネ。
このエラーは、おそらくエラー番号 70 でしょうから、VBScript ヘルプのランタイムエラー 一覧内にある
「パーミッションがありません」エラーメッセージの方が、まだ意味が分かるかも・・・って思います。

フォローありがとうございました。

ゲーム作成見習中 さん 2000年 01月 17日 12時 02分 39秒

言葉足らずだったもので・・・
がんばってください。m(・・)m
それでは仕事にとりかかります。
ありがとうございました。

ゲーム作成見習中 さん 2000年 01月 17日 11時 58分 58秒

管理人さんへ
質問がいまいち解らないのに答えて下さりありがとうございました。
でも、ばっちり当たってましたよ。
問題が解決しました。
本当にありがとうございました。
ここは、とってもいいサイトですね。
管理人さんのようにできる男になれるようがんばります。
管理人さんも、これからも、僕のような卵からかえった初心者を助けて
あげてください。

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

というわけで、例のスクリプトを作成しました。
良かったら使ってみてください。
Personalized Menuよりいい感じで使えるんじゃないでしょうか。
それにしても、久しぶりにまともなWSHのスクリプトを書いた気がする…。

To: Decorative さん

>恐らく、情報を取得する"権限"がナイと思います。
>しかし、Adiministrator アカウントで発生していましたら、私の勘違いですが・・・。

Windows2000において、Power Usersグループに属するユーザーを作成し、
以下のスクリプトを実行してみました。

Set WSHShell = WScript.CreateObject("Wscript.Shell")

MsgBox WSHEnv("PROCESSOR_ARCHITECTURE")

★=Set WSHEnv = WSHShell.Environment("PROCESS")の場合
正常に実行された
★=Set WSHEnv = WSHShell.Environment("SYSTEM")の場合
書き込みできませんというエラー(Administratorsアカウントなら正常に実行される)
★=Set WSHEnv = WSHShell.Environmentの場合
書き込みできませんというエラー(Administratorsアカウントなら正常に実行される)

まとめると、
Win9xの場合は、引数は"PROCESS"しか指定できず、省略時は"PROCESS"になる。

WinNTの場合は、引数は"PROCESS"、"SYSTEM"、"VOLATILE"、"USER"が指定でき、
省略時は"SYSTEM"になる。
一方、Administrators以外は、"PROCESS"しか指定できない。
そのため、Administrators以外が環境変数を取得する際は、"PROCESS"という引数を
明示的に記述しなければならない。

と、いうことです。今度このあたりの事情を加筆しておきます。

Decorative さん 2000年 01月 16日 04時 10分 44秒

Sido Muller さん こんにちは。

下記のスクリプトの2行目で実行時エラーが発生する件について。
Set WSHShell = WScript.CreateObject("Wscript.Shell")
Set WSHSysEnv = WSHShell.Environment("SYSTEM")

恐らく、情報を取得する"権限"がナイと思います。
しかし、Adiministrator アカウントで発生していましたら、私の勘違いですが・・・。

次のようなスクリプトで、エラー番号から原因を調べてみてはどうでしょうか。
エラー番号の意味は、ヘルプにて参照します。
' cf. オンラインヘルプ:VBScript 実行時エラー
' http://www.asia.microsoft.com/japan/developer/scripting/VBScript/doc/vsmscRunTimeErrors.htm
Set WSHShell = WScript.CreateObject("Wscript.Shell")
On Error Resume Next
Set WSHSysEnv = WSHShell.Environment("SYSTEM")
MsgBox Err.Number
On Error Goto 0

でも実は、ただの私の興味本位の"依頼"だったりします。
お手隙のときに宜しくお願いします。m(_ _)m

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

Shellオブジェクトの謎がまた一つ解けたので、書いておきます。
まずは、以下のスクリプトを実行してみてください。
Favoritesフォルダを詳細表示したときの情報が、テキストファイル化されます。
(C:\test.txtに出力)

Dim str
Set Fs = WScript.CreateObject("Scripting.FileSystemObject")
Set Win = WScript.CreateObject("Shell.Application")

Set objFolder=Win.NameSpace(6)

'ポイント!
For I=0 To 8
str=str & objFolder.GetDetailsOf(, I) & vbTab
Next
str=str & vbCrLf
'ここまで

For Each obj In objFolder.Items
For I=0 To 8
str=str & objFolder.GetDetailsOf(obj, I) & vbTab
Next
str=str & vbCrLf
Next

Set ts=Fs.CreateTextFile("C:\test.txt")
ts.Write str
ts.Close
msgbox "done"

で、今回の発見は、GetDetailsOfで、「属性」より後のカラムの情報を得る
方法です。
上のスクリプトの、ポイント!と書かれた範囲をコメントアウトして実行してみると、
「属性」より後の、「最終表示日時」などが取得できないことがわかります。
何故か、GetDetailsOf(, I)のように、一つ目の引数を省略してカラムのタイトルを
取得してからでないと、「属性」より後のカラムの情報を得られないのです。
今まで「最終表示日時」を取得しようといろいろ試行錯誤してたんですが、ついに
解決策が見えました。

#default.httをつらつらと眺めてようやく判明しました。

で、これの利用法ですが、もう考えてあります(笑)
長い間表示していないお気に入りを排除するスクリプトです。
今から書いてみます。

#「表示回数」は、お気に入りフォルダを詳細表示しても表示されないのは何故だろう。

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

To: VFR さん

> しかし、ここ一日くらい悩んでいたことが、セキュリティー設定の
>問題だったとは・・・。なんとも情けない思いです。

後で気づいてみれば、なんであんなことで…、ということは私もよくあります。
最近の大ボケは、あるスクリプトを作成中、いくらソースの書き直し→実行
を繰り返しても同じところでエラーが発生するという事態に陥ったときです。
何回書き直しても、ちっとも直らない。何でだー!と思って、よーく考えると、
編集中にそのスクリプトファイルをデスクトップから他のフォルダに移動し、
異動先のフォルダにあるスクリプトファイルを一生懸命実行していたためでした(笑)
何回も書き直したファイルは、デスクトップのファイルだったんですねえ。

VFR さん (kanekoken@geocities.co.jp) 2000年 01月 14日 13時 43分 36秒

abuku さん、むたぐち さん アドバイスありがとうございます。

IEのセキュリティー設定は、そのままにしておいて、
「信頼済みサイトゾーン」、htaの方法を取らせていただきます。
 htaの方法は、表示時にメニューバーなどが無くスッキリしてて
いい感じでした。メニュー画面などの作成にむいていますねぇ。

 しかし、ここ一日くらい悩んでいたことが、セキュリティー設定の
問題だったとは・・・。なんとも情けない思いです。

 皆様にもご迷惑をお掛けいたしました。そして、助けていただいて
ありがとうございました。

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

To: VFR さん

>セキュリティ設定は「中」だったのですが、
>・スクリプトファイルを実行しても安全だとマークさていないActiveコントロールの
> 初期化とスクリプトの実行
>・スクリプトファイルを実行しても安全だとマークさているActiveコントロールの
> とスクリプトの実行
>が、ともに「無効」にするになっていました。「有効」に
>設定すると動作いたしました。

この設定をするときは注意してくださいね。
私のページの、「WSH技術情報」にもありますが、セキュリティが激甘になってしま
うので。

ご自分のサイトだけ、「信頼済みサイトゾーン」にしておくなどの対策が必要だと
思います。

で、個人的な意見ですが、WebページにWshShellやFileSystemObjectを使うのは
どうかなあ…、と思います。ローカルで使う分には構わないんですが、世界中に
発信するものだけに、ActiveXの取り扱いには十分注意する必要があると思いますよ。

#ローカルで実行するときは、拡張子をhtaにするといい感じです。(IE5環境が必要)

> VCで"TEST.DOC"を実行するEXEファイルを作成してみました。
> ウインドウの無いアプリから立ち上げると、ハングってしまいました。

ということは、WSHのせいじゃなさそうですね。

>でも、Wordだけ変やなぁ〜。

ですね。

To: abuku さん

>しかし・・・僕の場合は上記2つを「無効にする」にしても動作
>するんですよ・・・

ここの設定は、あくまで「インターネット上のHTML」に適用される設定なので、
ローカルに作成したHTMLファイルのセキュリティとは関係しません。
ローカルのHTMLファイルには、事実上セキュリティが存在しません。(警告が出るだけ)

IEのWebBrowserコントロールを使ったメーラ(Becky!含む)では、このセキュリティホール
がかつて問題となりました。(OEはもともとIEのセキュリティ設定を引き継ぐので、
問題はなかった。なお、今は、多くのメーラでバグフィックスされているようです)

さらに余計なことを付け加えておくと、最近話題となった、(OEでさえも)メールを
開いただけで感染する「BubbleBoy」は、WSHやHTAやスクリプトレットなど、私に
とっておなじみの技術を悪用したものです。

To: Sido Muller さん

> WinNT4.0の場合、環境を「プロセス」ごとに作り出すから「PROCESS」なんでしょうか。でも、Microsoftのヘルプではわからないです。

私はNT4を持っていないので、この辺りのことはよくわからないのです。
#Lessonにも苦労の後が見えますね(^^;

今は、Win2000RC2をインストールしているので、確かめることはできると思います。
でも、私のWin2000はなかば封印状態だしなあ…。

ところで、
NTでは、GetObjectを使って、ユーザーやドメイン、コンピュータをオブジェクト
として扱い、いろいろできるようなんですが、どこかに資料はあるんでしょうか。


Sido Muller さん (kyx02150@nifty.ne.jp) 2000年 01月 14日 09時 52分 48秒

 管理人さん、みなさん、おはようございます。
 WSHのオブジェクトの件、管理人さんから教えていただいた通りにしたら動きました。

>Set WSHShell = WScript.CreateObject("Wscript.Shell")
>Set WSHSysEnv = WSHShell.Environment("PROCESS")
>MsgBox WSHSysEnv("NUMBER_OF_PROCESSORS")

 という形でで動きました。
 WinNT4.0の場合、環境を「プロセス」ごとに作り出すから「PROCESS」なんでしょうか。でも、Microsoftのヘルプではわからないです。
 初心者の場合、コピー&ペーストして覚えていくと思うので、NTの場合の注意も書いて手欲しいなぁ。(^_^;)>Microsoft

abuku さん 2000年 01月 13日 20時 27分 09秒
URL:http://www.geocities.co.jp/HeartLand-Gaien/6716/


VFRさん

>セキュリティ設定は「中」だったのですが、
>・スクリプトファイルを実行しても安全だとマークさていないActiveコントロールの
> 初期化とスクリプトの実行
>・スクリプトファイルを実行しても安全だとマークさているActiveコントロールの
> とスクリプトの実行
>が、ともに「無効」にするになっていました。「有効」に
>設定すると動作いたしました。

 動きましたか〜、それは良かったですね。

しかし・・・僕の場合は上記2つを「無効にする」にしても動作
するんですよ・・・
何故だろう・・・

VFR さん (kanekoken@geocities.co.jp) 2000年 01月 13日 19時 54分 18秒

むたぐち さん、abukuさん、たびたびのフォーローありがとうございます。
解決いたしました!

むたぐち さん曰く
>ActiveXということで一つ思い当たることがあるのですが、IEのセキュリティ設定は
>どうなっていますか? > VFRさん
>というか、例のHTMLは、ローカルで実行しているのか、Webページとして
>実行しているのか、どちらなんでしょう。

>セキュリティ設定が、「高」などになっていると(カスタマイズした場合はまた
>変わってきますが)、ActiveX関係は実行されず、スクリプトは、
>ActiveXオブジェクトを作成できないというエラーを出すと思います。


セキュリティ設定は「中」だったのですが、
・スクリプトファイルを実行しても安全だとマークさていないActiveコントロールの
 初期化とスクリプトの実行
・スクリプトファイルを実行しても安全だとマークさているActiveコントロールの
 とスクリプトの実行
が、ともに「無効」にするになっていました。「有効」に
設定すると動作いたしました。

コード云々の問題ではなかったんですね。お恥ずかしい限りです。
なにはともあれ、解決し、とてもすっきりしました。本当にどうも
ありがとうございました。


>> Set WSHShell = WScript.CreateObject("WScript.Shell")
>> WSHShell.Run "TEST.DOC"
>>
>>して、WORD98を立ち上げ、WORDを終了するとハングってしまいます。

abuku さん 曰く
> これは僕のマシンでも同様の現象が起こります。
>どうもWORDだけっぽいっすね。EXCEL,ACCESSでは普通に動作しまし
>たからねぇ・・・。

むたぐち さん曰く
>WSHShell.Runは、時々訳の分からないエラーを引き起こしますね。
>WSHShell.Run "nantoka.exe",,True
>とやったとき、「実行を待てません」とかいう謎のエラーが発生したことが
>あります。

>WSHShell.Run "winword.exe TEST.DOC"
>のようにした場合はどうでしょう?(もちろん両方ともフルパスで記述)

>また、WSHShell.Runではなく、
>Set WSHShell = WScript.CreateObject("Word.Application")



「WSHShell.Run "winword.exe TEST.DOC"」の方法もダメでした。
「Set WSHShell = WScript.CreateObject("Word.Application")」の方法は
うまく行きました。

 VCで"TEST.DOC"を実行するEXEファイルを作成してみました。
 ウインドウの無いアプリから立ち上げると、ハングってしまいました。
 さらにウインドウ有りのアプリから立ち上げても、元となったウインドウを、
Wordが完全に立ち上がる前に破棄してしまうと、ハングってしまうことが
分かりました。
 なお、"Word.Application"オブジェクトを作成して立ち上げる方法を使うと、
ウインドウ有り無し、どちらのアプリからでも正常に立ち上がり、ハングら
なかったです。

 やっぱり、"オブジェクトを作成して立ち上げるのが一番のようですね。
でも、Wordだけ変やなぁ〜。

 それでは、どうもお世話になりました。これからも、どうぞ
よろしくお願いします。

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

掲示板レス書きツールに手を加えて、古い記事からレスをつけられるように
しました。というか、最初からこうすべきだったですね…。

To: お悩みさん さん

>大変参考になりました。ありがとうございました。

【おじさま】さんに感謝!

To: VFR さん

> これらのことからで、WSHはインストールされていると踏んでいますが、
>どうでしょうか?

そうですね。間違いなくインストールされていますね。

>Set WshShell=CreateObject("WScript.Shell")
>は、動作しているのでしょうか?

HTMLでも、WSHでも動作しています。VFRさんのコードのこの部分だけを
変更したHTMLもちゃんと動作しました。
この話の続きは、abukuさんの書き込みに対するフォローで。

> Set WSHShell = WScript.CreateObject("WScript.Shell")
> WSHShell.Run "TEST.DOC"
>
>して、WORD98を立ち上げ、WORDを終了するとハングってしまいます。

WSHShell.Runは、時々訳の分からないエラーを引き起こしますね。
WSHShell.Run "nantoka.exe",,True
とやったとき、「実行を待てません」とかいう謎のエラーが発生したことが
あります。

WSHShell.Run "winword.exe TEST.DOC"
のようにした場合はどうでしょう?(もちろん両方ともフルパスで記述)

また、WSHShell.Runではなく、
Set WSHShell = WScript.CreateObject("Word.Application")
...
のように、Wordオブジェクトを利用してファイルを開いた方が確実だと思います。
具体的なやり方は、VBAのヘルプなどを見て考えてください(^^;

To: abuku さん

>でもActiveXって事はIEがらみのような気がするのですが
>どうでしょうか??

ActiveXということで一つ思い当たることがあるのですが、IEのセキュリティ設定は
どうなっていますか? > VFRさん
というか、例のHTMLは、ローカルで実行しているのか、Webページとして
実行しているのか、どちらなんでしょう。

セキュリティ設定が、「高」などになっていると(カスタマイズした場合はまた
変わってきますが)、ActiveX関係は実行されず、スクリプトは、
ActiveXオブジェクトを作成できないというエラーを出すと思います。

>>・私の環境は、Windows98で、「アプリケーションの追加と削除」の
>>「アクセサリ」の中には、「Windowsスクリプティングホスト」というのが
>>入っています。
>
> これは予想なのですが、この表示はあてにしない方がいいかも
>しれません。ファイル自体を消してしまってもこの表示は残ってい
>ますし、逆にこの表示だけを消してしまう事もできます。

これはたしかにそうです。当てになりません。
Outlook Expressが入っているのに、チェックがはずれていたりします。
OEやWSHのように、IEのバージョンアップでバージョンが更新されてしまう
アプリは、とくにそうです。

> この部分は恐らく無理です・・。すいません。

どうなんでしょう?
レジストリかどこかをいじればできそうな気もしますが、ここでは
関係ないのでこれ以上の追求はやめておきましょう(^^;
#ネットニュースで聞かれたら、一生懸命調べますが(笑)

To: VFR さん

>IE5.00でした。これが、原因だったのでしょうか?

まあ、私もIE5.0ですのでこれが原因とは考えにくいですが、

>早速、IE5.01にバージョンを上げてみます。

のがいいですね。WSHも最新版になりますし。

To: ゲーム作成見習中 さん

>下の階層のフォルダから上の階層のフォルダへ戻りたいのですが
>どうソースを書いたらいいか教えてください。

window.navigate "../nantoka.htm"
とかでしょうか。というか、質問の意味がいまいちよくわからないです…。

ゲーム作成見習中 さん 2000年 01月 13日 12時 39分 51秒

また解らなくなってしまいました。
下の階層のフォルダから上の階層のフォルダへ戻りたいのですが
どうソースを書いたらいいか教えてください。
このサイトは為になるのでGoodです。

abuku さん 2000年 01月 13日 10時 08分 28秒



>それから、これは通常のvbsファイルからの話なんですが、
>
> Set WSHShell = WScript.CreateObject("WScript.Shell")
> WSHShell.Run "TEST.DOC"
>
>して、WORD98を立ち上げ、WORDを終了するとハングってしまいます。

 これは僕のマシンでも同様の現象が起こります。
どうもWORDだけっぽいっすね。EXCEL,ACCESSでは普通に動作しまし
たからねぇ・・・。


abuku さん 2000年 01月 13日 10時 03分 23秒
URL:http://www.geocities.co.jp/HeartLand-Gaien/6716/



VFRさん

>IE5.00でした。これが、原因だったのでしょうか?

 あれ・・・おかしいなぁ・・・これは直接の原因では無いと思わ
れます。何故かと言いますと、むたぐちさん(管理人)はIE5.0だ
ったと認識しています。

VFR さん (kanekoken@geocities.co.jp) 2000年 01月 13日 09時 41分 46秒

abukuさん、むたぐち さん、フォーローありがとうございます。

>WIN98 + IE5.01ですけれども・・。

IE5.00でした。これが、原因だったのでしょうか?
あまり、バージョンを上げることを好んでませんでしたので・・・
早速、IE5.01にバージョンを上げてみます。

それから、報告いたします。

abuku さん 2000年 01月 13日 00時 02分 16秒
URL:http://www.geocities.co.jp/HeartLand-Gaien/6716/

> これは予想なのですが、この表示はあてにしない方がいいかも
>しれません。ファイル自体を消してしまってもこの表示は残ってい
>ますし、逆にこの表示だけを消してしまう事もできます。
>
>しかしながらこれが原因という訳ではないと思います・・・。
>これが原因だったら・・・すいません。

訂正致します・・。これはちょっと勘違い致しました。
>ファイル自体を消してしまってもこの表示は残ってい
>ますし、逆にこの表示だけを消してしまう事もできます。

 この部分は恐らく無理です・・。すいません。

abuku さん 2000年 01月 12日 23時 27分 45秒
URL:http://www.geocities.co.jp/HeartLand-Gaien/6716/




>むたぐちさん

>abukuさん、フォローどうもありがとうございました。

 とんでもございません・・・お役に立てずにすみません。


>VFRさん

> それから、皆様のところでは、
>Set WshShell=CreateObject("WScript.Shell")
>は、動作しているのでしょうか?

 動作しております。


IEのバージョンはどうなってますか??

ちなみに僕は

WIN98 + IE5.01ですけれども・・。

毎度の事ながら関係ありますかね??>むたぐちさん

でもActiveXって事はIEがらみのような気がするのですが
どうでしょうか??


>・私の環境は、Windows98で、「アプリケーションの追加と削除」の
>「アクセサリ」の中には、「Windowsスクリプティングホスト」というのが
>入っています。

 これは予想なのですが、この表示はあてにしない方がいいかも
しれません。ファイル自体を消してしまってもこの表示は残ってい
ますし、逆にこの表示だけを消してしまう事もできます。

しかしながらこれが原因という訳ではないと思います・・・。
これが原因だったら・・・すいません。



VFR さん (kanekoken@geocities.co.jp) 2000年 01月 12日 20時 14分 42秒

むたぐち さん、abukuさん フォーローありがとうございます。

>>「ActiveXコンポーネントはオブジェクトを作成できません。"WScript.Shell"」
>これは、WSHがインストールされていないときのエラーのような気がするのですが…?

・私の環境は、Windows98で、「アプリケーションの追加と削除」の
「アクセサリ」の中には、「Windowsスクリプティングホスト」というのが
入っています。
・「WSHテクニック集」の「アプリケーションの起動」のコードを、vbsファイルに
保存し、正常に動作しています。

 これらのことからで、WSHはインストールされていると踏んでいますが、
どうでしょうか?

 それから、皆様のところでは、
Set WshShell=CreateObject("WScript.Shell")
は、動作しているのでしょうか?

 質問ばかりで、申し訳ないですが、どうぞ、お助けください。


 それから、これは通常のvbsファイルからの話なんですが、

 Set WSHShell = WScript.CreateObject("WScript.Shell")
 WSHShell.Run "TEST.DOC"

して、WORD98を立ち上げ、WORDを終了するとハングってしまいます。
 もし、解決方法をご存知の方がいらっしゃいましたら、お教えください。
よろしくお願いします。
                          (VFR)

お悩みさん さん 2000年 01月 12日 20時 12分 08秒

大変参考になりました。ありがとうございました。

管理人むたぐち さん 2000年 01月 12日 19時 41分 14秒

abukuさん、フォローどうもありがとうございました。
#abukuさんと発言が前後してしまいました。

>「ActiveXコンポーネントはオブジェクトを作成できません。"WScript.Shell"」

これは、WSHがインストールされていないときのエラーのような気がするのですが…?


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

To: 【おじさま】 さん

>どうも内容としては「Windows がフォームやコントロールに送るメッセージ
>を横取りしてそれに処理を加える」ということのようで、横取りするんです
>からフックそのものなのでしょう。

なるほど、サブクラス化とはそういうことなんですか。
おぼろげながら正体が見えてきた気がします。
といっても、実際のコードを書くとなると、APIの知識が要求されるので
なかなか…。

実は以前、VBでメニューを選択したとき、ステータスバーにメニューの説明を
表示させる手法がわからず、ネットニュースで質問したことがあります。
すると、サブクラス化しては?という回答が返ってきて、すぐにあきらめました(^^;

To: VFR さん

> WScriptオブジェクトをブラウザで実行することは、不可能なのでしょうか?

そういうことです。WScriptは、WSHからしか使えません。
これはVBA・HTAなどでもいえます。
HTMLでは、VBSのCreateObject関数を使ってください。
Set WshShell=CreateObject("WScript.Shell")のように。

#ASPではServer.CreateObjectらしい… < よくわからずに書いているのでつっこみ不可

To: ゲーム作成見習中 さん

>憶えていますか?

覚えてます(^^;

>お二人の親切な解説のおかげで、問題が解決しました。

お役に立てて幸いです。
今後とも当サイトをよろしくm(_ _)m

VFR さん (kanekoken@geocities.co.jp) 2000年 01月 12日 19時 20分 51秒

abuku さん 早速のお答えありがとうございます。

試しましたが、今度は、
「ActiveXコンポーネントはオブジェクトを作成できません。"WScript.Shell"」
で、動作しませんでした。

うー! お手数をかけますが、フォーローよろしくお願いします。
(VFR)

abuku さん 2000年 01月 12日 18時 05分 57秒
URL:http://www.geocities.co.jp/HeartLand-Gaien/6716/

 もしかして、HTMLファイル内にWSHを記述する場合って、

>Set WSHShell = WScript.CreateObject("WScript.Shell")

 のようにせずに

>Dim WSHShell
>Set WSHShell = CreateObject("WScript.Shell")

 としなければいけないのでしょうか??>むたぐちさん

うう・・・WSHを忘れかけている・・・(爆)


abuku さん 2000年 01月 12日 17時 48分 14秒
URL:http://www.geocities.co.jp/HeartLand-Gaien/6716/

あれ??
でも何で出来たんだろう???

abuku さん 2000年 01月 12日 17時 34分 51秒
URL:http://www.geocities.co.jp/HeartLand-Gaien/6716/


VFRさん

<head>
<SCRIPT LANGUAGE = "VBScript">
<!--
Sub Button1_OnClick
Dim WSHShell
Set WSHShell = CreateObject("WScript.Shell")
WSHShell.Run "text.txt"
End Sub
-->
</SCRIPT>
</head>
<FORM>
<INPUT NAME = "Button1" TYPE = "button" VALUE = "押す">
</FORM>

ではどうでしょう???

【おじさま】 さん (tomiyama@seagreen.ocn.ne.jp) 2000年 01月 12日 16時 56分 50秒
URL:http://homepage1.nifty.com/~tomiyama/

管理人むたぐちさん

>サブクラス化!
>それは私にとって全くの未知の領域であり、参考資料を見てもよくわからなかった、
>悪夢のキーワード(って大げさな)。
>メッセージのフックとか、何がなにやら。

私にも良く分かりません。実際にそういうソースを書いたこともないので。

どうも内容としては「Windows がフォームやコントロールに送るメッセージ
を横取りしてそれに処理を加える」ということのようで、横取りするんです
からフックそのものなのでしょう。

例えば普通の Windows プログラムならばタイトルバー左のプログラムのアイ
コンをクリックすると「元のサイズに戻す」「移動」「サイズ変更」「最小化」
∈蚤膕宗廖嵎弔犬襦廚箸い辰織瓮縫紂爾サ个泙垢氈「海譴鯤未淵瓮縫紂爾吠ム
更したいなどという場合に使われます。秀丸エディタですと、これらのメニュ
ーに加えて「次の秀丸」「前の秀丸」というメニューが追加されていますので
多分この手法を使っているのだと思います。

これくらいしか知らないのですが、何となく今回のケースではこれが使えそう
な気がしたので知ったかぶりで書いてみただけです。

今回の場合には標準のポップアップメニューは MouseUp イベントの際に表示さ
れるようです。しかも MouseUp イベントに書かれたコードよりも優先するよう
で、MouseUp イベントが起こると標準のポップアップメニューが表示された後で
書いたコードが実行されます。

ですから標準のポップアップメニューそのものを加工するのでなければ

・テキストボックスで MouseUp イベントが生じないようにする。

例えば MouseUp の前にテキストボックスの Enabled を False にしてしまう。
これだとフォームが MouseUp イベントを認識するようです。勿論テキストボッ
クスがフォーム上ではなく何らかのコンテナ上にある場合にはそのコンテナが
認識するのかもしれませんが試していません。

・テキストボックスで MouseUp イベントが生じても標準のポップアップメニュ
ーが表示できない状態にしてしまう。

例えばその前に別なポップアップメニューが既に表示されているとか、メッセー
ジボックスが表示されている状態にする。

こんな方法が思い付いたのでソースを書いてみましたが、Microsoft のページに
書かれていたのも後者の方法を使ったものでした(しかも私が書いたのよりもず
っとスマート)。

VFR さん (kanekoken@geocities.co.jp) 2000年 01月 12日 15時 35分 19秒

 初心者のVFRというものです。
 少しお尋ねしたいことがございます。
 「WSHテクニック集」の「アプリケーションの起動」を
参考にさせていただいて、以下のようなHTMLソースを組み込み、
ブラウザにて立ち上げましたが、オブジェクト「WScript」が
ありませんというエラーが発生してしまい、動作しませんでした。

(ここからです。)
<SCRIPT LANGUAGE = "VBScript">
<!--
Sub Button1_OnClick
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "text.txt"
End Sub
-->
</SCRIPT>
<FORM>
<INPUT NAME = "Button1" TYPE = "button" VALUE = "押す">
</FORM>
(ここまでです。)

 WScriptオブジェクトをブラウザで実行することは、不可能なのでしょうか?
お手数をおかけしますが、どなたかお答えいただければ幸いです。

ゲーム作成見習中 さん 2000年 01月 12日 10時 08分 48秒

管理人さん。Xさん。
憶えていますか?
2000/01/06に投稿した、ゲーム作成見習中です。
お二人の親切な解説のおかげで、問題が解決しました。
ありがとうございました。
これからもお二人共々がんばってください。

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

昨日から公開している、デスクトップにショートカットスクリプトですが、
ちょっとバージョンアップしました。インストーラーを(笑)
いくら従来のアプリケーションに見た目を近づけることができるとはいえ、
ここまでこだわってどうするんでしょう(爆)

To: 【おじさま】 さん

>そうか IE5.5 だから Script が 5.5。そうかもしれませんね。

関係ないですけど、WindowsのバージョンとOfficeのバージョンとかも
合わせてありますね。
Office97はちょっと例外でしたが、Windows98は、もともとWindows97として出るはず
だったからいいのか(何が)
あと、Office98は日本語版だけだったような気が…。

>ここは WSH の掲示板なので VB についてお答えして良いものかどうか判断
>できませんが、一応こういうご質問であるとしてお答えしてしまいます。

お答えどうもありがとうございます。
この掲示板では、VBの話題は一応ありです。ただし、管理人の返答を期待しては
いけません(笑)
私はVBを持っているだけで、あまり活用してないので知識も少ないので(^^;

>多分この処理を本格的にやろうとすると、テキストボックスコントロールが
>持つ標準機能を無効にしなくてはならず、きっとサブクラス化のようなテク
>ニックが必要になると思うのですが私には経験がありません。

サブクラス化!
それは私にとって全くの未知の領域であり、参考資料を見てもよくわからなかった、
悪夢のキーワード(って大げさな)。
メッセージのフックとか、何がなにやら。

>「何も表示させない場合」については探した限りは記載を見つけら
>れませんでした。

勘違いでした(^^;

【おじさま】 さん (tomiyama@seagreen.ocn.ne.jp) 2000年 01月 11日 20時 39分 11秒
URL:http://homepage1.nifty.com/~tomiyama/

悩み者 さん

管理人むたぐち さんのおっしゃるように Microsoft のサイトに
「ご自分で作成されたポップアップメニューを表示する場合」に
ついては記載がありました。

Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbRightButton Then
Text1.Enabled = False
Text1.Enabled = True
Text1.SetFocus
PopupMenu ご自分で作成されたポップアップメニュー
End If
End Sub

こうなっています。私が書いたのよりも動きが自然ですね。ただし
「何も表示させない場合」については探した限りは記載を見つけら
れませんでした。上記のソースでもご自分で作成されたポップアッ
プメニューを表示させないと結局標準のポップアップメニューが表
示されてしまいます。

ちょっと動きが不自然ですし、右クリックの間隔が短いと(要する
に右ダブルクリックで)標準のポップアップメニューが表示されて
しまいますが、やはり

Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbRightButton Then
Text1.Enabled = False
End If
End Sub

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Text1.Enabled = False And Button = vbRightButton Then
Text1.Enabled = True
Text1.SetFocus
End If
End Sub

こんなのしか思い付きません。

【おじさま】 さん (tomiyama@seagreen.ocn.ne.jp) 2000年 01月 11日 20時 10分 27秒
URL:http://homepage1.nifty.com/~tomiyama/

管理人むたぐち さん

>ところで、IE5.5・Windows Script5.5でバージョンがそろうのでしょうか。

あっ、全然考えてもみませんでした(^^;)。
そうか IE5.5 だから Script が 5.5。そうかもしれませんね。

>#何でIE5.01・Windows Script5.1なんでしょう…。

なぜでしょう・・・って全くレスになっていませんが。

【おじさま】 さん (tomiyama@seagreen.ocn.ne.jp) 2000年 01月 11日 20時 03分 07秒
URL:http://homepage1.nifty.com/~tomiyama/

悩み者 さん

VBScript ではなく VB でのご質問なのですね?

またご質問の意味が良く理解できませんが、例えば Form1 というフォーム
の上に Text1 というテキストボックスがあって、この Text1 を右クリック
すると表示される標準のポップアップメニューを表示させずにご自分で作ら
れたポップアップメニューを表示させたい、または何も表示されないように
したいということでしょうか?

ここは WSH の掲示板なので VB についてお答えして良いものかどうか判断
できませんが、一応こういうご質問であるとしてお答えしてしまいます。

多分この処理を本格的にやろうとすると、テキストボックスコントロールが
持つ標準機能を無効にしなくてはならず、きっとサブクラス化のようなテク
ニックが必要になると思うのですが私には経験がありません。とりあえず標
準的な VB の機能で似たような動作にするには

1.ご自分で作成されたポップアップメニューを表示する場合
Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Button = vbRightButton Then
Text1.Enabled = False
PopupMenu ご自分で作成されたポップアップメニュー
Text1.Enabled = True
End If
End Sub

2.何も表示させない場合
Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Button = vbRightButton Then
Text1.Enabled = False
End If
End Sub

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Text1.Enabled = False And Button = vbRightButton Then
Text1.Enabled = True
End If
End Sub

あまり自信はありませんが、多分こんな感じではないでしょうか。

ご参考になりますか。

Return