cms さん 2001年 08月 27日 17時 28分 14秒

初めまして。最近ここをROMりはじめたものです。

WSHShell.Sendkeys "^%{DEL}" さんの"ごみ発見機"を色々弄くったのですが、
泥臭い手段で一応HTA画面が固まらない版を作ってみました。
(固まらないけどその分遅い。サイズもでかい)
どうせ作ったのなら自己満足だけで終わらないで他の人が見れるようにした方が
良いかなぁと思ってアップロードしてみました。
http://www8.ewebcity.com/mixpg/docs/src/wshlab_res/find/FindTrash.zip

で、どうせならこれをうちのページのネタの一部にしようかと思うのですが
OKでしょうか?>WSHShell.Sendkeys "^%{DEL}" さん


>てるさん
先週てるさんのとは別件でIE+スクリプトで似たような問題を解消したのですが
こんなのでどうでしょ?
Const navNoHistory = 2
Const navNoReadFromCache = 4
 '第2引数にnavNoReadFromCacheを設定しないとキャッシュを見に行ってしまう為
 '最新の情報は取れない可能性がある<予想
 objIE.navigate strURL, navNoHistory + navNoReadFromCache, _
  "", strPostData
(他にどんな定数があるのかは以下のサイトでチェックできます)
http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/webbrowser/reference/Enums/BrowserNavConstants.asp

>.NET
> C#の名前の由来は、C++ ++である。(ほんまかなあ…)
ASPXというのはASP+の"+"が斜めになったと思ってますがどうなんでしょ?

田端正昭 さん (shoji@dance.ne.jp) 2001年 08月 27日 16時 29分 34秒

こんにちは、いえ、こんばんは、昨日お世話になりました
MT_です。
昨日の関連で、また、トラブルです。

Dat(1)="10 20 30 40 50"の時

hs=Split(Dat(1))で、hs(0)〜(4)に

10〜50が代入できるよになったのですが、

実は、Dat(1)のデータは、あるテキストファイル"temp.txt"を
以下の手順で読み込んで得たデータなのです。

rem【ファイル "temp.txt" を開く】
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso,in_f,tmp
Set fso = CreateObject("Scripting.FileSystemObject")
Set in_f = fso.OpenTextFile("temp.txt", 1)

rem【 "temp.txt"の各行を格納】
Dim Cnt,I,J,K
Dim Dat(20)
Dim Gyousuu
Cnt=1
Do Until in_f.AtEndOfStream
Dat(Cnt)=in_f.ReadLIne
Cnt=Cnt+1
Loop
in_f.Close

Dat(1)には、"temp.txt"の1行目のデータが存在する訳です。

"temp.txt"とは、CADのプログラムが排出するデータが
各行に箇条的に記述されたものなのです。
各行には、数個のパラメータをスペースで区切って記述してきます。
私は、その1つ1つを取り出して、計算式に代入しなければなりません。
「カンマ」で区切ってないので、ご教授頂いた「Array」でなく、「Split」
が適当と思い、使わせていただいたところ、うまくいきました。

ところが、場合によっては、
"temp.txt"の行の中には、
"10 20 30 40 50"という風に、区切りスペースが2つ以上使われている
記述が存在していたのです、「Split」関数はスペース1文字を区切り文字として
扱うみたいで、2つ以上使われている場合、次のスペースを「hs(*)」に代入して
しまいます。スペースの数が決まっていれば区切り文字にその数分だけ指定できますが
決まったものでなく、ランダムに入ってくる場合があります。

何か、良い方法があれば、ヒントだけでもお願いしたいのです。
探求してみます。









MT_ さん (shoji@dance.ne.jp) 2001年 08月 27日 12時 15分 18秒

筑集眺餅 さん・管理人 さん ありがとうございました。
結果、解決いたしました。

>配列の添え字は1からと覚えていませんか
>VBS講座・基礎編Lesson 4に配列とかFor Each とか・・
>Array関数を使って、hs=Array(10,20,30,40,50)

などの、ご指示に従って、思考してみました。
結果的に、【hs=Split(Dat(1))】・・これ1行で出来ました。

全く知らなかった関数でした・・。

これからも、勉強していきますので、宜しくお願いします。

PS:N88-BASICはよく知ってます・・・ども。
私の最初のマシンは、SONY-777 (8ビット)でした・・。
BASICもSONY-777版を使ってました。

yanmama さん 2001年 08月 27日 11時 55分 43秒

To:管理人さま

>> %SystemRoot%も%windir%もそれ自体はしっかり実際のパスを認識しています。
>> ただ、環境変数PATHの中の%SystemRoot%が実際のパスとして認識されなく
>> なっているようです。
>
>ところで、再度「システムのプロパティ」から環境変数PATHを再設定してやれば、
>set pathの表示は正常になるのでしょうか?
>もしかして、WSHから環境変数をいじった日から、ずっと%SystemRoot%が
>認識されない状態が続いているのでしょうか。
>

再度「システムのプロパティ」から環境変数PATHを再設定してやると、正常に
戻ります。ただ、ここはどうしても自動化させなければならないので、いろいろ
試しています。

>> ちなみに管理人さまの環境では問題なかったということですが、OS再起動後の
>> "set path"コマンドで%SystemRoot%部分に実際のパスが入っていた、という
>> ことなのでしょうか。
>
>そうです。
>というか、NT系は環境変数を反映させるのに再起動する必要はないです。

そうでしたか。。。そうでしたっけ。
レジストリを直接書き換える方法も試してみましたが、ダメでしたし。
もう万策尽きたという感じですかねえ。。。

他のWin2000の環境でも、試してみます。




てる さん 2001年 08月 27日 10時 19分 03秒

WSHShell.Sendkeys "^%{DEL}"さん
むたぐちさん

だめでした。やはり、ループした分だけ同じソースを表示した後、
リフレッシュしてるような動作で、ソースが更新されないようです。

筑集眺餅 さん 2001年 08月 27日 08時 19分 23秒

To:むたぐちさん

>VBSの配列は、JSとは違ってSafeArray(安全配列、セーフ配列)です。
>SafeArrayというのは、範囲情報を持った配列のことです。
>(参考: 27-07 Makoto 2000-12-24 05:55)
ご説明ありがとうございます。
そういえば、VBSからJSのsort関数を使おうとして、引数が配列なんで
苦労したことがあったっけ。

To:Lib30さん

>「ジャバスクリプト」はJavaScriptのカタカナ表記なので個人的にはいいかも。
カタカナ表記なら、ジャワカレーやジャワティーの立場を尊重して
ジャワスクリプト・・・ってのはどうでしょう?

ダメ?

Lib30 さん (lib30@write-off.f2s.com) 2001年 08月 27日 00時 20分 17秒
URL:http://www.ob.aitai.ne.jp/~kazoo/

> > あと、ZDNNでもJavaScriptを「Javaスクリプト」と表記していた。
> > ZDNNもわかってない。。。
>
> え、その表記はだめなんですか?
> 新聞だと「ジャバスクリプト」とか平気で書いてますよ。


うーん、個人的な見解かもしれませんが、JavaScriptをJavaスクリプトや
Java Scriptという風に書くと、ただでさえ「なんかJavaと関係ありそう」というのが
さらに強まってしまい、初心者に無用な誤解を与えてしまいそうだからです。
「ジャバスクリプト」はJavaScriptのカタカナ表記なので個人的にはいいかも。


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

下で書いた.NETネタは、2chプログラム板のスレ「C#相談室」
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=977112364
にあったものです。
C#の情報はここで。

関係ないけど…。
2chの危機を救ったのはUNIX板の住民たち。
泣かせる話だ…。
http://cocoa.2ch.net/test/read.cgi?bbs=unix&key=998764722



To: 筑集眺餅 さん

> Dim A(3)
>
> は、ちょっと見、A(1)〜A(3)の3つの要素があるように思います
> が、VBScript では添え字は常に0から始まるので、A(0)〜A(3)
> の4つの要素を宣言したことになるんですねぇ。
> (VBAだと、その辺が Option Base 1 で調整できるけど、VBS
> だとできないんだなぁ。)

Dim A(1 To 3)とかでもOKですね。これもVBSでは使えませんが。

VBSの配列についておさらい。
VBSの配列は、JSとは違ってSafeArray(安全配列、セーフ配列)です。
SafeArrayというのは、範囲情報を持った配列のことです。
(参考: 27-07 Makoto 2000-12-24 05:55)

SafeArrayについていろいろ調べているうちに、こんなのを見つけました。
http://homepage1.nifty.com/hidori/download/windows/
> JScript 補完計画 - JScript の Array を VBArray (OLE の SAFEARRAY) に変換
# JSヘルプのVBArrayオブジェクトの項目には、
# > 現在、JScript 配列を VBArray に変換する方法はありません。
# とありますが、できるじゃん(^^; (JSだけでは、という意味か)
# 私も10-08 管理人むたぐち 2000-03-03 13:12 で別の強引な方法を使ってやりましたけど。

これはWSCなんですが(私が考えていたVBArrayをJSのArrayオブジェクトに変換する
WSCとまったく逆のスタンスだ…)、このソースは次のような内容です。

oVbArray = Array()
のようにArray関数の引数を省略すると、oVbArrayには「長さ0」の配列が格納されます。
(ちなみにLBound(oVbArray)=0、UBound(oVbArray)=-1になります)
# こういう配列、Dimでは作れないはずです。

そのあと、ReDimを使ってoVbArrayのサイズを再設定(この場合、引数に渡されたJSのArray
オブジェクトのlengthプロパティ-1)しています。
後はまあこうやってできたoVbArrayというVBSの配列を返しているわけです。

さて、実はこのコード、Array関数を使わないで記述することもできます。
Dim oVBArray()
のように、いわゆる動的配列を使うわけです。
どちらの方法でも、JSにVBSのSafeArrayを返すことができます。

ところで、VB(S)のArray関数の説明によると、
> メモ 配列として宣言していないバリアント型 (Variant) に、配列を格納することができます。また、バリアント型変数には、固定長文字列およびユーザー定義型以外の型の配列を格納できます。配列を格納したバリアント型は、バリアント型の要素を持つ配列とは概念的に異なりますが、各要素に対する処理方法は同じです。
とあります。
上記2つの方法のうち、前者が、配列を格納したバリアント型、後者がバリアント型の要素を持つ
配列なわけですね。たぶん。
たしかにどちらもIsArrayはTrueだし、TypeNameはVariant()だし、見た目は同じです。
# これがまったく同一なものであることを証明する方法はありますかねえ?

ちなみに、
http://www.zdnet.co.jp/special/win2000/glossary/glossary.html によると、
SafeArrayとは、
> 任意の添字からはじまる配列を表現するための型。Visual Basicでは,Array関数を使うとSAFEARRAY型の配列を作成することができる。
とあります。
これって正しいのかなあ…。別にArray関数に限らないと思うのだが。

http://www.microsoft.com/japan/developer/library/dsmsdn/drgui042099.htm
にはMSによるSafeArrayの説明があります。

筑集眺餅 さん 2001年 08月 26日 15時 41分 42秒

○配列変数の愚痴

Dim A(3)

は、ちょっと見、A(1)〜A(3)の3つの要素があるように思います
が、VBScript では添え字は常に0から始まるので、A(0)〜A(3)
の4つの要素を宣言したことになるんですねぇ。
(VBAだと、その辺が Option Base 1 で調整できるけど、VBS
だとできないんだなぁ。)
その昔の国民機PC98のN88-BASICを含め、MS-BASICだって
配列は1から始まっていたしなぁ。だから、私を含めて おじさん
達は、ここらでつぼにはまるんだなぁ。
※注)PC98 その昔16ビットパーソナルコンピュータの時代に
 シェア8割位は占めていたNEC製PC9801の愛称。

To: MT_さん

初めまして。
ひょっとすると同世代? 配列の添え字は1からと覚えていませんか?

むたぐちさんのVBS講座・基礎編Lesson 4に配列とかFor Each とか
詳しく載ってます。
がんばってください。

では。

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

○.NET小ネタ集

・その壱
.NETのGNU版というのが開発中らしい。その名もdotGNU。

・その弐
.NET Framework SDK beta2をインストールすると、IEのUserAgentが
Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0; .NET CLR 1.0.2914)
になる。なんかかっこいいぞ。

・その参
C#の名前の由来は、C++ ++である。(ほんまかなあ…)



To: WSHShell.Sendkeys "^%{DEL}" さん

> ・Windows標準のファイル検索に匹敵する検索速度

これはスクリプト言語を使っている以上、どうしようもないのではないか
と思います。アルゴリズムの改善でなんとかできるレベルの問題では
ないでしょう。

> すみません!!また失敗しました。
> それにしても、何で文字化けするのかよくわかりません。

半角句読点を使っていませんか?



To: matu さん

> [InetSDK] ブラウザの標準コンテキストメニューに項目を追加する
> http://www.microsoft.com/JAPAN/support/kb/articles/J041/2/49.htm

ありがとうございます。
まさにこれです。
組み合わせも効くんですね。



To: MT_ さん

>  さて、質問ですが、「For Each 〜 Next」構文で、[group]に、
> 配列変数を指定する方法をご教授願いたいのです・・・。
>  リファレンスでは、[group]には、配列やコレクションが指定可能となってます
> が、コレクションを指定している場合はうまくいくのですが、いきなり配列変数を
> 指定すると、「オブジェクトがコレクションではありません」のエラーとなります
>  事前に、何かの手続きが必要なのでしょうか?それとも・・・・?
> Win98で操作しています。コードです。
>
> Dim Cnt,Tmp,Dat(20)
> Dat(1)="10 20 30 40 50"
>
> Cnt=1
> For Each Tmp in Dat(1)
> hs(Cnt)=Tmp
> Cnt=Cnt+1
> Next

このコードでは、Dat(1)は配列ではなくただの文字列です。
やりたいことがいまいちわからないのですが、
Dat(20,4)のように二次元配列にして、
Dat(1,0)=10
Dat(1,1)=20
Dat(1,2)=30
...
のようにしてはいかがですか。

> これによって、hs(1)〜(5)に、10〜50を代入したいのです。

これだけなら、Array関数を使って、
hs=Array(10,20,30,40,50)
とすれば簡単です。

MT_ さん (shoji@dance.ne.jp) 2001年 08月 25日 16時 17分 52秒

みなさん、こんにちは!初めて投稿します。今後とも宜しく願いします。
私は、建築士でして、プログラマーでは有りません。
エクセルのVBAなどに、多少の知識がある程度です。
 さて、質問ですが、「For Each 〜 Next」構文で、[group]に、
配列変数を指定する方法をご教授願いたいのです・・・。
 リファレンスでは、[group]には、配列やコレクションが指定可能となってます
が、コレクションを指定している場合はうまくいくのですが、いきなり配列変数を
指定すると、「オブジェクトがコレクションではありません」のエラーとなります
 事前に、何かの手続きが必要なのでしょうか?それとも・・・・?
Win98で操作しています。コードです。

Dim Cnt,Tmp,Dat(20)
Dat(1)="10 20 30 40 50"

Cnt=1
For Each Tmp in Dat(1)
hs(Cnt)=Tmp
Cnt=Cnt+1
Next

これによって、hs(1)〜(5)に、10〜50を代入したいのです。

もっと他に、良い方法がありませんでしょうか?
宜しくお願いします。

MT_

matu さん 2001年 08月 25日 06時 01分 17秒

To: むたぐち さん

どうも。

> このcontextsの値がいまいちわかっていません。
> 選択文字列、リンク、画像等、コマンドが有効になる対象オブジェクトを
> 表しているのだとは思いますが、どこかにリファレンスはないですかねえ。

私は、VCに付いてきたMSDNライブラリを見ていたのですが、マイクロソフトの
サポート技術情報にもあります。内容はたぶん同じです。

[InetSDK] ブラウザの標準コンテキストメニューに項目を追加する
http://www.microsoft.com/JAPAN/support/kb/articles/J041/2/49.htm

MSDNライブラリでは、「サポート技術情報(Knowledge Base)」→「サポート技術
情報(日本語)」→「ActiveX SDK & Internet Client SDK」と辿ると出てきます。

W さん 2001年 08月 25日 01時 36分 33秒

すみません!!また失敗しました。
それにしても、何で文字化けするのかよくわかりません。
どなたかHelp!


>同時にやらせる事です”當未離好・螢廛箸世判萢・・つずつしかやらないので、

同時にやらせる事です”當未離好D螢廛箸世判萢C1つずつしかやらないので、


>値を足すと両方に対応するようですー・・離譽献好肇蠅・蕾鮴呂靴燭發里覆里如「
>間違っている可能性が多きいです,箸蠅△┐沙温幼・戮法

値を足すと両方に対応するようですーi「離譽献好肇蠅C蕾鮴呂靴燭發里覆里如「
間違っている可能性が多きいです,箸蠅△┐沙温幼テ戮法

WSHShell.Sendkeys "^%{DEL}" さん 2001年 08月 25日 01時 30分 47秒

To:アオタ さん

案を3つも出していただくとは、ありがたいです。
しかし、私が作ったHTAをオブジェクトをダイレクトに渡すように
改良したのと比べて、検索速度はあまりかわりませんでした。(若干アオタさんのほうが速いですが)


私が、達成したい目標は

・フリーズしない
・Windows標準のファイル検索に匹敵する検索速度

です。

今考えている対策は、SetTimeOutやSetIntervalを使って複数の処理を
同時にやらせる事です”當未離好D螢廛箸世判萢C1つずつしかやらないので、
複数の処理を平行して行なわせて、検索速度の向上を狙っています。
ですが、フリーズ問題はいまだお手上げ。


To:むたぐち さん

>> 文字列に戻さない方法で作りましたが、あまり変わりませんでした。
>
>私が調べたところでは、1.2倍から2倍の差がついたんですがねえ。
>環境にもよるのかな?

まぁ、1.2倍ぐらいなら。しかし、それでは焼け石に水です。


>> HKCU\Software\Microsoft\Internet Explorer\MenuExt
>> に、キーを作成して、次の値を設定します。
>> (標準)    「htmファイルへのパス名」
>> contexts   バイナリ値0x01を設定します
>
>このcontextsの値がいまいちわかっていません。
>選択文字列、リンク、画像等、コマンドが有効になる対象オブジェクトを
>表しているのだとは思いますが、どこかにリファレンスはないですかねえ。


私がわかる範囲では

01 通常
02 画像
04 フォーム
10 選択範囲
22 リンク?

のようです。(16進)
値を足すと両方に対応するようですーi「離譽献好肇蠅C蕾鮴呂靴燭發里覆里如「
間違っている可能性が多きいです,箸蠅△┐沙温幼テ戮法

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

To: yanmama さん

> %SystemRoot%も%windir%もそれ自体はしっかり実際のパスを認識しています。
> ただ、環境変数PATHの中の%SystemRoot%が実際のパスとして認識されなく
> なっているようです。

ところで、再度「システムのプロパティ」から環境変数PATHを再設定してやれば、
set pathの表示は正常になるのでしょうか?
もしかして、WSHから環境変数をいじった日から、ずっと%SystemRoot%が
認識されない状態が続いているのでしょうか。

> ちなみに管理人さまの環境では問題なかったということですが、OS再起動後の
> "set path"コマンドで%SystemRoot%部分に実際のパスが入っていた、という
> ことなのでしょうか。

そうです。
というか、NT系は環境変数を反映させるのに再起動する必要はないです。



To: Lib30 さん

> 「引数」をずっと「いんすう」と読んでいました。はずかしー

私も最初はいんすうと読んでいました。
「ひきすう」やったら「引き数」と書くべきやね。

返値もへんちと読み…ません。
変換すると「返り血」になるので怖い。

> responseTextは元のWebページのコードをUnicodeに変換して返すようです。
> なんかあれ(?)ならBASP21などで文字コード変換してください

FileSystemObjectが、UNICODEの読み書きができることを利用すると、
他のコンポーネントを使わなくてすみます。
以下は、wshbbs.vbsで使っているHTMLドキュメント取得関数です。
引数に対象URLと保存ファイル名を指定します。

Function GetHTMLDocument(sURL,sFileName)
On Error Resume Next
Set xh = WScript.CreateObject("microsoft.xmlhttp")
xh.Open "GET", sURL, False
xh.Send
If Err.Number<> 0 Then
sErr=sErr & sURL & ": " & Err.Description
GetHTMLDocument=""
Exit Function
End If
On Error Goto 0
Set ts=Fs.CreateTextFile(sFileName,True,True) 'UNICODEとして書き込む
ts.Write xh.responseBody
ts.Close

Set ts=Fs.OpenTextFile(sFileName,1,False,0) 'SJISとして読む
If Not ts.AtEndOfStream Then
ts.Read(2) '2バイトのごみ(UNICODEヘッダ?)
If Not ts.AtEndOfStream Then
sTempStr = ts.ReadAll
End If
End If
ts.Close

Set ts=Fs.CreateTextFile(sFileName,True,False) 'SJISとして保存
ts.Write sTempStr
ts.Close
GetHTMLDocument=sTempStr
End Function

> NHKでも取り上げられるということは、かなり大きな話題になっているということでしょうか?

みたいですね。Webページがクラックされて書き換えられたというのが、ニュース性が
あるということでは。

> あと、ZDNNでもJavaScriptを「Javaスクリプト」と表記していた。
> ZDNNもわかってない。。。

え、その表記はだめなんですか?
新聞だと「ジャバスクリプト」とか平気で書いてますよ。

# あとIEを「エクスプローラ」と呼ぶの、やめい。



To: matu さん

> HKCU\Software\Microsoft\Internet Explorer\MenuExt
> に、キーを作成して、次の値を設定します。
> (標準)    「htmファイルへのパス名」
> contexts   バイナリ値0x01を設定します

このcontextsの値がいまいちわかっていません。
選択文字列、リンク、画像等、コマンドが有効になる対象オブジェクトを
表しているのだとは思いますが、どこかにリファレンスはないですかねえ。

> 以下、それぞれのソースです。

なるほど、cgiのパラメータに処理対象URLを渡すのはキッズgooといっしょですね。
これならurlファイル化も可能だと思います。

ページのencodingの設定を調べて、Shift_JISとかなら日英翻訳、us_ascii(だっけ?)なら
英日翻訳するようにすれば、ちょっとかっこいいかも。



To: てる さん

> ありがとうございます。これを知りたかったのです。こういう情報はどこで
> 入手できるのでしょうか?

というか、前の書き込みで書いたんですが、気づかれなかったですか。
# To: 土屋さんのところに書いたからなあ…。

情報源はMSDNライブラリです。
私はVB6についていたCD-ROM版のやつを使っています(内容はかなり古いです)が、
Webでも読めます。リンクのページからどうぞ。

> IE.Refresh
>
> を入れて更新する。それで全体をループさせてみたのですが、
> Source の中のソースは更新されません。どうしてでしょう?
>
> 時々刻々変化するページ(例えば株価情報)をモニターしたい
> のですが、そんなことはできますか?

もう一回Set document=IE.documentしてみてはいかがでしょうか。



To: WSHShell.Sendkeys "^%{DEL}" さん

> 文字列に戻さない方法で作りましたが、あまり変わりませんでした。

私が調べたところでは、1.2倍から2倍の差がついたんですがねえ。
環境にもよるのかな?

> しかし、まだまだ検索速度には納得がいかず、
> フリーズする問題があるので、いまだ悩んでいます。

setTimeOutを使っても、フリーズの問題は解決しないのか…。
私は、「いっこうに正式版の出る気配のない」テキストファイルビューアHTA
で、setIntervalを使ってサイズの大きいテキストファイルを読み込む際に
フリーズするのを防ぐことに成功していますが…。

うーん、どうしましょうかねえ。
JavaScriptやDHTMLなコミュニティで質問なさってみた方がいいかも
しれませんね。
もし何かわかったら、こっそり教えてください(^^;


To: アオタ さん

> で、まずは検索スピードから
> ボタンを押してから終了するまで
> 私が変えたもの 48秒
> 貴殿が投稿されたもの 2分07秒

やっぱりオブジェクトをダイレクトに渡す効果が大きいようですね。

> あと、教えていただきたいのですが
> 中止ボタンを押したときに処理の中止ってできますか?
> 当方の環境ではCPU がしょぼい為か開始ボタンがへこんだまま
> 元に戻らなくなり、中止を押すどころか何もできなくなります
> 皆さんのところでは中止できるのですか?

できないですねえ。
要するに、これが「フリーズ」してしまうってことですね。

WScript.Sleepが使えればいいんですが(^^;
Sleepメソッドが実装されているCOMコンポーネントを呼び出すという
手もあるにはありますが…。



To: matu さん

> 私が初めて書き込みをする前、過去ログに目を通した際に「Windows.FAQ」の
> 「frame2newindow.vbs」の話が出てたような記憶があり(ここじゃなかったのか?)、
> つい、そういうことはご存知なのかと思っていました。

そういうことは知ってました(^^;
つい先日、「選択範囲をリンクにする」HTMLを作ったばかりですし。

> 私が書き込んだソースも、「Internet Explorer Web Accessories」の「frm2new.htm」
> を書き換えたものなのです。
>
> Internet Explorer Web Accessories
> http://www.microsoft.com/windows/ie/webaccess/

そういえば本家本元がこういうのを配布してましたね。忘れてた。

matu さん 2001年 08月 24日 22時 44分 44秒

To: むたぐち さん

今朝の書き込みの追記です。

私が初めて書き込みをする前、過去ログに目を通した際に「Windows.FAQ」の
「frame2newindow.vbs」の話が出てたような記憶があり(ここじゃなかったのか?)、
つい、そういうことはご存知なのかと思っていました。
私が書き込んだソースも、「Internet Explorer Web Accessories」の「frm2new.htm」
を書き換えたものなのです。

Internet Explorer Web Accessories
http://www.microsoft.com/windows/ie/webaccess/

実にタイムリーな話なのですが、昼休みにネットしていて発見しました。
エキサイトの翻訳サイトにURLを渡すスクリプトを公開しているサイトがありました。

るてんのお部屋
http://www2s.biglobe.ne.jp/~yanai/

私は、自作のがあるので試してみてはいませんが。

ちなみに、私のソースの「external.menuArguments.window.open」は「open」でも
よいと思うのですが、私がfubを使っているのでIEで開かれないようにこうしてます。
デフォルトブラウザに設定していないので....
(fubのFAQに書いてありましたので参考にしました。IEでも問題ないようです。)

> (標準)    「htmファイルへのパス名」

と書いていましたが、ファイル名まで指定しなければならないです。

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

アオタ さん (no_tak@kcn.ne.jp) 2001年 08月 24日 19時 40分 47秒
URL:null

To: WSHShell.Sendkeys "^%{DEL}" さん

はじめまして WSHShell.Sendkeys "^%{DEL}" さん
私も、貴殿が投稿されたhtaを改良してみました

で、まずは検索スピードから
ボタンを押してから終了するまで
私が変えたもの 48秒
貴殿が投稿されたもの 2分07秒
(時間を計測する命令だけ追加させていただきました)

スピードは速くはなりましたが、ご要望の検索中にウィンドウが
フリーズするという現象についてはお手上げです

当方の環境
Windows98( Not SE )
PentiumU 266

Cドライブを検索
使用 1.68GB
空き 1.29GB
合計 2.98GB

ファイル数 15,598
フォルダ数 1,198

発見 153


ここからソースです
ソース中の案1から案3まで、どれをやっても検索スピードには
変化が無いようです まーお好みでどうぞ

<HTML>
<HEAD>
<TITLE>ごみ発見機</TITLE>
<HTA:APPLICATION
Selection=No
Scroll=No
>

<!--


とりあえず、拡張子がTMP,BAK,OLD,CHK,GIDのファイルを検索します。
いい加減に作ったものですが、そのわりにどうでもいい部分に手を加
えていたりします。


-->
<SCRIPT LANGUAGE=VBScript>
Option Explicit

Dim Shell,Fs,Drvs,WSHShell
Dim m_nFindCnt
Dim m_strResult

Set Fs = CreateObject("Scripting.FileSystemObject")
Set Shell = CreateObject("Shell.Application")
Set WSHShell = CreateObject("Wscript.Shell")
Set Drvs = Fs.Drives

Sub Window_OnBeforeUnLoad

Work.Value=0

Set Fs = Nothing
Set Shell = Nothing
Set WSHShell = Nothing
Set Drvs = Nothing

End Sub


Sub StartSearch
Dim d

On Error Resume Next

Working.InnerText = "処理中"
Count.InnerText = 0
Work.Value = 1
TrashList.InnerHTML = ""

m_nFindCnt = 0
m_strResult = ""

d = time()
Call Search( Fs.GetFolder( FolderPath.Value ))
d = CDate( time() - d )

Count.InnerText = CStr( m_nFindCnt )
TrashList.InnerHTML = m_strResult
m_strResult = ""

MsgBox d

If Err.Number<>0 Then Call Msgbox( "検索するフォルダのパスが正しくありません。" & vbCrLf & err.Description, 16, "エラー" )

Working.InnerText = "待機中"

End Sub




Sub Search( Obj )

Dim File
Dim SubFolder

'--------------------------------------------------------------
' 案1)
For Each File In Obj.Files
Dim strExName
strExName = UCase( Fs.GetExtensionName( File.Name ))

If Work.Value=0 Then Exit For

If Hit( strExName ) Then
'File.Delete ←ファイルを消してしまうと動作テストができないので、とりあえずコメントアウト。
m_nFindCnt = m_nFindCnt + 1
m_strResult = m_strResult & File.Path & " " & File.Size & "<BR>"

End If
Next

'--------------------------------------------------------------
' 案2)
' Dim strExNameArray, nUBound
' Dim i
' strExNameArray = Array( "BAK", "CHK", "GID", "OLD", "TMP" )
' If Err.Number<>0 Then MsgBox ""
' nUBound = UBound( strExNameArray )
'
' For Each File In Obj.Files
' Dim strExName: strExName = UCase( Fs.GetExtensionName( File.Name ))
' For i=0 To nUBound
' If strExName=strExNameArray(i) Then
'
' 'File.Delete ←ファイルを消してしまうと動作テストができないので、とりあえずコメントアウト。
' m_nFindCnt = m_nFindCnt + 1
' m_strResult = m_strResult & File.Path & " " & File.Size & "<BR>"
'
' Exit For
'
' End If
' Next
' If Work.Value=0 Then Exit For
' Next

'--------------------------------------------------------------
' 案3)
' For Each File In Obj.Files
' Dim strExName: strExName = UCase( Fs.GetExtensionName( File.Name ))
' If strExName="TMP" Or strExName="BAK" Or strExName="OLD" Or strExName="CHK" Or strExName="GID" Then '←この部分がすっきりしないので困ってます。
'
' 'File.Delete ←ファイルを消してしまうと動作テストができないので、とりあえずコメントアウト。
'
' m_nFindCnt = m_nFindCnt + 1
' m_strResult = m_strResult & File.Path & " " & File.Size & "<BR>"
' End If
' Next

For Each SubFolder In Obj.SubFolders
If Work.Value=0 Then Exit For

Call Search( SubFolder )
Next

End Sub


Function Hit( strExName )
Dim strExNameArray
Dim nL, nM, nR, bFind, nRet
strExNameArray = Array( "BAK", "CHK", "GID", "OLD", "TMP" )
' ↑ 重要 アルファベット順( A〜Z )
bFind = FALSE
nL = Int( 0 )
nR = Int( UBound( strExNameArray ))

Do Until nL>nR Or bFind=TRUE
nM = Int(( nL+nR )/2 )

nRet = StrComp( strExNameArray( nM ), strExName, vbTextCompare )
If nRet>0 Then
nR = nM - 1

ElseIf nRet<0 Then
nL = nM + 1

ElseIf nRet=0 Then
bFind = True

End If
Loop

Hit = bFind
End Function
</SCRIPT>
</HEAD>
<BODY BGColor="Menu" STYLE="border:0;">
<BASEFONT SIZE=2>
検索するフォルダのパス<BR>
<INPUT TYPE=TEXT NAME=FolderPath ID=FolderPath Value="C:\"><!--いずれ作る予定→<BUTTON NAME=Browse ID=Browse>参照...</BUTTON>--><BR>
<BUTTON NAME=Start ID=Start OnClick="StartSearch">開始</BUTTON><BUTTON OnClick="Work.Value=0">中止</BUTTON><BR><HR><BR>
状態:<SPAN NAME=Working ID=Working>待機中</SPAN><INPUT TYPE=HIDDEN NAME=Work ID=Work Value=1><BR>
不要ファイル数:<SPAN NAME=Count ID=Count>0</SPAN><BR>
<SPAN NAME=Folder ID=Folder></SPAN><BR><BR>
<SPAN NAME=TrashList ID=TrashList></SPAN>
</BODY>
</HTML>

ここまでソース


あと、教えていただきたいのですが
中止ボタンを押したときに処理の中止ってできますか?
当方の環境ではCPU がしょぼい為か開始ボタンがへこんだまま
元に戻らなくなり、中止を押すどころか何もできなくなります
皆さんのところでは中止できるのですか?

WSHShell.Sendkeys "^%{DEL}" さん 2001年 08月 24日 18時 39分 57秒

To:むたぐち さん

ご指摘ありがとうございました。

>検索スピードが遅いのは、再帰検索のときオブジェクトを文字列に戻しているのが
>原因の一つだと思われます。

文字列に戻さない方法で作りましたが、あまり変わりませんでした。


>フリーズする問題については一応解決策があります。
>
>timeout=window.setInterval ("hoge()",1)
>
>Sub hoge()
>時間がかかる繰り返し処理
>If 終わり Then window.clearInterval(timeout)
>End Sub
>
>setIntervalメソッドは、第一引数に指定した関数を第二引数時間(単位:msec)の
>間隔で繰り返します。返り値はそのタスクの識別子です。
>clearIntervalメソッドは、setIntervalメソッドで繰り返されているタスクを
>停止させるメソッドです。

SetIntervalのことは前から知っていました。
私としては、SetTimeOutを使ってSubFolderを処理していけばと思い、

SetTimeOut "Search """&SubFolder.Path&"""",0

としてみました。
結果、ほんの少しだけ検索が速く(そう感じるだけ?)なりました。
しかし、まだまだ検索速度には納得がいかず、
フリーズする問題があるので、いまだ悩んでいます。


To:てる さん

>IE.Refresh
>
>を入れて更新する。それで全体をループさせてみたのですが、
>Source の中のソースは更新されません。どうしてでしょう?

ループの中に Source="" を入れましたか?
ただループだけさせておくと、Sourceがどんどん肥大化していきます。

てる さん 2001年 08月 24日 14時 01分 35秒

むたぐちさん、WSHShell.Sendkeys "^%{DEL}" さん

ありがとうございます。
ところで、


For I = 0 To IE.Document.All.Length - 1
Source = Source & IE.Document.All(I).OuterHTML
If IE.Document.All(I).TagName = "HTML" Then Exit For
Next

これのあとに、

IE.Refresh

を入れて更新する。それで全体をループさせてみたのですが、
Source の中のソースは更新されません。どうしてでしょう?

時々刻々変化するページ(例えば株価情報)をモニターしたい
のですが、そんなことはできますか?

yanmama さん 2001年 08月 24日 09時 34分 45秒

To:管理人さま

>> で、私はオブジェクトを作成した後にこんな感じでやっています。。。
>> (文字列で扱っているのがマズイのか。。。?)
>>
>> strGetPathdata = WSHEnv.Item("path")
>> WSHEnv("path") = "X:\YY\ZZZ;" & strGetPathdata
>
> 同じスクリプトを試してみたんですが、こちらでは特に問題は
> 発生しませんでした。
>

試していただいたなんて。。。恐縮です。
ありがとうございます。

>> マイコンピュータのプロパティとレジストリは書き換わっています。
>> ただ、コマンドプロンプトから"set path"と打つと、
>> 環境変数%SystemRoot%そのまんまで表示されることがわかりました。
>> 本来は、"C:\WINNT"のように実際のパスで表示されますよね。
>
> そうですね。
> つまり、%SystemRoot%がC:\WinNTを表す変数として認識されていないことに
> なります。WSHの不具合と言うより、システムの不具合じゃないですか?
> %windir%とかは正常でしょうか。

システムの不具合だったら良いのですけどね、ホントに。。。
%SystemRoot%も%windir%もそれ自体はしっかり実際のパスを認識しています。
ただ、環境変数PATHの中の%SystemRoot%が実際のパスとして認識されなく
なっているようです。
ORACLEインストール時にも環境変数PATHに値を入れてますけど、インストール後
にping打つのにフルパスで打ったことなんてないしなあ。

ちなみに管理人さまの環境では問題なかったということですが、OS再起動後の
"set path"コマンドで%SystemRoot%部分に実際のパスが入っていた、という
ことなのでしょうか。




てる さん 2001年 08月 24日 09時 26分 27秒

むたぐちさん

ありがとうございます。これを知りたかったのです。こういう情報はどこで
入手できるのでしょうか?

>ええと、IE.Document.body.parentElement.outerHTML は何か不都合でも?



てる さん 2001年 08月 24日 09時 25分 30秒

ええと、IE.Document.body.parentElement.outerHTML は何か不都合でも?


matu さん 2001年 08月 24日 06時 09分 51秒

To: むたぐち さん

> これはそういうスクリプトがエキサイトとインフォシークで公開されてるって
> ことですよね。また見てみます。

すみません。自前です。

HKCU\Software\Microsoft\Internet Explorer\MenuExt
に、キーを作成して、次の値を設定します。
(標準)    「htmファイルへのパス名」
contexts   バイナリ値0x01を設定します

以下、それぞれのソースです。

エキサイトで英日翻訳
<html>
<script language="JavaScript" defer>
var str = new String(external.menuArguments.location.href);
external.menuArguments.window.open("http://www.excite.co.jp/world/url/?wb_lp=enja-ATL&wb_url=" + str)
</script>
</html>

エキサイトで日英翻訳
<html>
<script language="JavaScript" defer>
var str = new String(external.menuArguments.location.href);
external.menuArguments.window.open("http://www.excite.co.jp/world/url/?wb_lp=jaen-ATL&wb_url=" + str)
</script>
</html>

インフォシークで英日翻訳
<html>
<script language="JavaScript" defer>
var str = new String(external.menuArguments.location.href);
external.menuArguments.window.open("http://honyaku.infoseek.co.jp/cgi-bin/infoseek/infoseek.cgi?v=100&id=0011&t=4&e=EJ&gen_type=url&u=" + str + "&sand=0")
</script>
</html>

インフォシークで日英翻訳
<html>
<script language="JavaScript" defer>
var str = new String(external.menuArguments.location.href);
external.menuArguments.window.open("http://honyaku.infoseek.co.jp/cgi-bin/infoseek/infoseek.cgi?v=100&id=0011&t=4&e=JE&gen_type=url&u=" + str + "&sand=0")
</script>
</html>

Lib30 さん (lib30@write-off.f2s.com) 2001年 08月 24日 01時 11分 53秒
URL:http://www.ob.aitai.ne.jp/~kazoo/

「引数」をずっと「いんすう」と読んでいました。はずかしー

そういうわけでXMLHTTPでソースの取得


Set Ie = WScript.CreateObject("InternetExplorer.Application","IE_")
Set objHTTP = WScript.CreateObject("Microsoft.XMLHTTP")
Ie.Navigate "http://www.monex.co.jp"

While(Ie.Busy)
Wscript.Sleep 100
Wend

objHTTP.Open "GET", Ie.LocationURL, False
objHTTP.Send
MsgBox Ie.LocationURL & " のソース : " & vbCrLf & vbCrLf & objHTTP.responseText

Ie.Quit()


responseTextは元のWebページのコードをUnicodeに変換して返すようです。
なんかあれ(?)ならBASP21などで文字コード変換してください


> これ、昨日のNHKでもやってました。
> あいかわらずJavaとJavaScriptが混同されている気が。

NHKでも取り上げられるということは、かなり大きな話題になっているということでしょうか?
あと、ZDNNでもJavaScriptを「Javaスクリプト」と表記していた。
ZDNNもわかってない。。。

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

To: WSHShell.Sendkeys "^%{DEL}" さん

うひゃあ。これまたすごいハンドルですなあ(笑)

> 検索スピードが遅いのと検索中にウィンドウがフリーズしてしまう問題に
> 悩まされています

検索スピードが遅いのは、再帰検索のときオブジェクトを文字列に戻しているのが
原因の一つだと思われます。
ちょうど最近検証しました(^^; 43-33 管理人むたぐち 2001-08-17 20:21

この部分がすっきりしないので困ってます、の部分は、
s=UCase(Fs.GetExtensionName(File.Name))
Select Case s
Case "TMP","BAK","OLD","CHK","GID"
End Select
でどうですか。

フリーズする問題については一応解決策があります。

timeout=window.setInterval ("hoge()",1)

Sub hoge()
時間がかかる繰り返し処理
If 終わり Then window.clearInterval(timeout)
End Sub

setIntervalメソッドは、第一引数に指定した関数を第二引数時間(単位:msec)の
間隔で繰り返します。返り値はそのタスクの識別子です。
clearIntervalメソッドは、setIntervalメソッドで繰り返されているタスクを
停止させるメソッドです。

つまり、このメソッドを組み合わせることで、hoge関数を繰り返し処理することが
できます。この際、hoge関数が一回終了するたびに制御が戻りますので、
フリーズすることはありません。
ウェイト時間のロスが大きいと感じるなら、hoge関数中で、複数回ループを
まわせば良いでしょう。(つまり、10回に1回制御を戻すとかにする)

で、この手法で問題となるのが、Filesコレクションからは、For Each...Nextでしか
全Fileオブジェクトにアクセスする方法がないという点です。
(43-49 管理人むたぐち 2001-08-21 23:21 参照)
つまり、hoge関数をループさせる方法は使えないということになります。

ここまで引っ張っておいて申し訳ないんですが、私にはいい方法が思いつきません。
どなたかHelp!
(DynamicHTMLというくらいなんだから、処理を動的に表示することくらいできそうな
もんですが、どうなんでしょう)

WSHShell.Sendkeys "^%{DEL}" さん 2001年 08月 24日 00時 08分 04秒

すみません!書き込み失敗しました。


>悩まされています,匹覆燭・柑愿Δい燭世韻覆い任靴腓Δ・ゥ
悩まされています。どなたかご指摘をお願いします。

>とりあえず載せときます,△泙蝓∋温佑砲覆蕕覆い隼廚い泙垢ャ..。
とりあえず載せときます。あまり参考にならないと思いますが。

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


> で、今回(というか、これ昔からなかったっけ?)のやつって、JavaとJavaScript
> 両方の問題なのに(しかも、どちらかと言えばJavaの問題だと思う。もっと言えば、
> JavaScriptが呼び出すJavaのコードが呼び出すActiveXコントロールが諸悪の
> 根源だろう)、なぜかJavaScriptの方だけしか報道されていないですね。

あまりこういうことを書くと、Javaな人の怒りを買いそうなので、ちょっと訂正。

Java → Microsoft Java VM
JavaScript → JScript (ActiveX スクリプト)

これで文句なかろう!

WSHShell.Sendkeys "^%{DEL}" さん 2001年 08月 24日 00時 03分 52秒

どうも、最近このページを見つけてチョクチョク訪れているものです。
今おもいつきでHD内の不要ファイルを探し出すHTAを作っているのですが、
検索スピードが遅いのと検索中にウィンドウがフリーズしてしまう問題に
悩まされています,匹覆燭C柑愿Δい燭世韻覆い任靴腓Δ@ゥ

↓ソース

<HTML>
<HEAD>
<TITLE>ごみ発見機</TITLE>
<HTA:APPLICATION
Selection=No
Scroll=No
>
<!--


とりあえず、拡張子がTMP,BAK,OLD,CHK,GIDのファイルを検索します。
いい加減に作ったものですが、そのわりにどうでもいい部分に手を加
えていたりします。


-->
<SCRIPT LANGUAGE=VBScript>
Dim Shell,Fs,Drvs,WSHShell
Set Fs=CreateObject("Scripting.FileSystemObject")
Set Shell=CreateObject("Shell.Application")
Set WSHShell=CreateObject("Wscript.Shell")
Set Drvs=Fs.Drives

Sub Window_OnBeforeUnLoad
Work.Value=0
End Sub


Sub StartSearch
On Error Resume Next
Working.InnerText="処理中"
Count.InnerText=0
Work.Value=1
TrashList.InnerHTML=""
Search (FolderPath.Value)
If Err.Number<>0 Then Msgbox "検索するフォルダのパスが正しくありません。",16,"エラー"
Working.InnerText="待機中"
End Sub




Sub Search(Obj)
Set Fol=Fs.GetFolder(Obj)
For Each File In Fol.Files
If Work.Value=0 Then Exit For
If UCase(Fs.GetExtensionName(File.Name))="TMP" Or UCase(Fs.GetExtensionName(File.Name))="BAK" Or UCase(Fs.GetExtensionName(File.Name))="OLD" Or UCase(Fs.GetExtensionName(File.Name))="CHK" Or UCase(Fs.GetExtensionName(File.Name))="GID" Then '←この部分がすっきりしないので困ってます。
'Set Trash=Fs.GetFile(File.Path)
'Trash.Delete ←ファイルを消してしまうと動作テストができないので、とりあえずコメントアウト。
Count.InnerText=Count.InnerText+1
TrashList.InnerHTML=TrashList.InnerHTML&File.Path&" "&File.Size&"<BR>"
End If
Next
For Each SubFolder In Fol.SubFolders
If Work.Value=0 Then Exit For
Search SubFolder.Path
Next
End Sub
</SCRIPT>
</HEAD>
<BODY BGColor="Menu">
<BASEFONT SIZE=2>
検索するフォルダのパス<BR>
<INPUT TYPE=TEXT NAME=FolderPath ID=FolderPath Value="C:\"><!--いずれ作る予定→<BUTTON NAME=Browse ID=Browse>参照...</BUTTON>--><BR>
<BUTTON NAME=Start ID=Start OnClick="StartSearch">開始</BUTTON><BUTTON OnClick="Work.Value=0">中止</BUTTON><BR><HR><BR>
状態:<SPAN NAME=Working ID=Working>待機中</SPAN><INPUT TYPE=HIDDEN NAME=Work ID=Work Value=1><BR>
不要ファイル数:<SPAN NAME=Count ID=Count>0</SPAN><BR>
<SPAN NAME=Folder ID=Folder></SPAN><BR><BR>
<SPAN NAME=TrashList ID=TrashList></SPAN>
</BODY>
</HTML>


To:てる さん

IEのソースを取得する方法ですが、以前私が作ったものがあるので
とりあえず載せときます,△泙蝓∋温佑砲覆蕕覆い隼廚い泙垢ャ..。


For I = 0 To IE.Document.All.Length - 1
Source = Source & IE.Document.All(I).OuterHTML
If IE.Document.All(I).TagName = "HTML" Then Exit For
Next

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

To: 土屋 さん

> view-source:http://〜
> なんてアドレスに指定すると、ソースがそっくりそのまま出てくるんですが、
> これのうまい使い方がわかってないです。

これってIEでも使えるんですね。
右クリックしてソースを表示するのと同じです。



To: てる さん

> 以前、教えて頂いた、以下のように IE を使用して表示されているページの
> ソースを知りたいのですが。
> Set Ie = WScript.CreateObject("InternetExplorer.Application","IE_")
> Ie.Navigate "http://www.monex.co.jp"
> Sub IE_DocumentComplete(pdisp,url)

ええと、IE.Document.body.parentElement.outerHTML は何か不都合でも?



To: たー さん

> EXCELのファイルを新規で作る例はどこかにあったので
> 試してみましたが、EXCELでCSVファイルを開く作業を
> 自動化したいのですが、CSVファイルを開く方法があり
> ますでしょうか?
>
> たくさんのテキストをEXCELで開かなければならないので
> 一つ一つ手作業でやっているととても時間がかかります。
> できれば、EXCELに変換する際、きまった形式で開きたい
> のですが、それも可能でしょうか?(列の幅、フォント等)

可能だと思います。
が、ちょっと今はEXCELが手元にないので確認できません。

リンクのページから、「モバイルの鉄人」に飛んでみてください。
たぶんお求めの回答があります。
あとはEXCELのVBAのヘルプを見ていろいろ試してみてください。



To: yanmama さん

> で、私はオブジェクトを作成した後にこんな感じでやっています。。。
> (文字列で扱っているのがマズイのか。。。?)
>
> strGetPathdata = WSHEnv.Item("path")
> WSHEnv("path") = "X:\YY\ZZZ;" & strGetPathdata

同じスクリプトを試してみたんですが、こちらでは特に問題は
発生しませんでした。

> マイコンピュータのプロパティとレジストリは書き換わっています。
> ただ、コマンドプロンプトから"set path"と打つと、
> 環境変数%SystemRoot%そのまんまで表示されることがわかりました。
> 本来は、"C:\WINNT"のように実際のパスで表示されますよね。

そうですね。
つまり、%SystemRoot%がC:\WinNTを表す変数として認識されていないことに
なります。WSHの不具合と言うより、システムの不具合じゃないですか?
%windir%とかは正常でしょうか。



To: matu さん

> 実は、作成した環境がWinNT4.0で実行もできました。自宅のWin2000で実行しても
> 問題ありませんでした。しかし、NTにはVisual Studioが、2000にはVBとVCが入っ
> ていたので、他の環境ではどうなのだろうと思ったので聞いてみました。

あ、そう言われると私の環境もVBが入ってますね。
標準機能かどうかは、ちょっとわからないです。

> 私は、エキサイト翻訳とインフォシーク翻訳を、右クリックで出てくるメニューに
> 追加して使っています。試してみられてはどうでしょうか。

これはそういうスクリプトがエキサイトとインフォシークで公開されてるって
ことですよね。また見てみます。



To: たけ さん

> 口が動いているっ (笑)
> 今 スピーカーが押入れに寝ているので、近日中に引っ張り出します。
> 英語のテキストで進行しなければいけないトレーニングがあるので
> 非常にありがたいです。情報ありがとうございました。
> # あ、スピーチは日本語です。

何かの役に立つとうれしいです。
ちなみに、MSのページから日本語のスピーチエンジンもダウンロードできます。
ただし、その質は…まあ、あえて言及はしまい。

なお、手元に複数のスピーチエンジンを切り替えられるサンプルがあるので、
ご要望があれば公開します。
19-15からしばらくTTSの話を書いているので、これも参考にしてください。

> それ、勘弁して欲しいです。本当に。

で、今回(というか、これ昔からなかったっけ?)のやつって、JavaとJavaScript
両方の問題なのに(しかも、どちらかと言えばJavaの問題だと思う。もっと言えば、
JavaScriptが呼び出すJavaのコードが呼び出すActiveXコントロールが諸悪の
根源だろう)、なぜかJavaScriptの方だけしか報道されていないですね。

> 「Java 使ってまーす」 と言っている割には、実は JavaScript で
> さらにスクリプト エラー連発だったという最悪なサイトを見つけたときは
> ちょっと切れそうになりましたわ。おほほ。

ありがちですわね。おほほ。

たけ さん (e_takeda@din.or.jp) 2001年 08月 23日 22時 45分 04秒
URL:http://www.din.or.jp/~e_takeda/

To: むたぐち さん

> あと、英文読むのがかったるいときは、
> 19-15 管理人むたぐち 2000-08-02 16:45
> で作ったHTAが活躍します。

口が動いているっ (笑)
今 スピーカーが押入れに寝ているので、近日中に引っ張り出します。
英語のテキストで進行しなければいけないトレーニングがあるので
非常にありがたいです。情報ありがとうございました。
# あ、スピーチは日本語です。

> あいかわらずJavaとJavaScriptが混同されている気が。

それ、勘弁して欲しいです。本当に。
「Java 使ってまーす」 と言っている割には、実は JavaScript で
さらにスクリプト エラー連発だったという最悪なサイトを見つけたときは
ちょっと切れそうになりましたわ。おほほ。

matu さん 2001年 08月 23日 20時 52分 33秒

どうも。


To: むたぐち さん と 土屋 さん

> 私もあんまり知らないのですが、Win2000ならOKみたいですね。

> ADO自体は使えますか?
> もし使えないときは、MSのサイトからMDACをダウンロードしてインストールする必要があります。

使えます。すみません、言葉が足りなかったです。
実は、作成した環境がWinNT4.0で実行もできました。自宅のWin2000で実行しても
問題ありませんでした。しかし、NTにはVisual Studioが、2000にはVBとVCが入っ
ていたので、他の環境ではどうなのだろうと思ったので聞いてみました。


To: むたぐち さん

> …思いつきが思いつきで終わった例がいくつあることか(^^;

そういえば私も、完成したものよりも作りかけのものの方が多かったりします。(^-^;

私は、エキサイト翻訳とインフォシーク翻訳を、右クリックで出てくるメニューに
追加して使っています。試してみられてはどうでしょうか。


To: 土屋 さん

どうも。

> 参考までに、ADOでCSVファイルにアクセスするサンプルなんぞを。
> (ただし、レコード削除はサポートされていません)
> なくても動く行がずいぶんあるので、適当に削ってください。

なんと、サンプルコードまで。ありがとうございます。
ADO初めて使ったので、まだよく分かってませんので参考にさせていただきます。

ちなみに、私が書いたソースは以下のとおりです。

Option Explicit

Const adVarChar = 200
Const adInteger = 3
Const adFldIsNullable = 32
Const ForReading = 1
Const ForWriting = 2

Const datafile = "unsorted.csv"
Const outfile = "sorted.csv"

Dim objFileSystem, objRecordset, f, ts, buf, fldArray

Set objFileSystem = WScript.CreateObject("Scripting.FileSystemObject")

Set objRecordset = WScript.CreateObject("ADODB.Recordset")
Call objRecordset.Fields.Append("field1", adVarChar, 512, adFldIsNullable)
Call objRecordset.Fields.Append("field2", adVarChar, 512, adFldIsNullable)
Call objRecordset.Fields.Append("field3", adInteger, , adFldIsNullable)
Call objRecordset.Open

Set f=objFileSystem.GetFile(datafile)
Set ts=f.OpenAsTextStream(ForReading)
Do
If ts.AtEndOfStream Then Exit Do
buf = ts.ReadLine
fldArray = Split(buf, ",")
objRecordset.AddNew
objRecordset.Fields(0) = fldArray(0)
objRecordset.Fields(1) = fldArray(1)
objRecordset.Fields(2) = CInt(fldArray(2))
objRecordset.Update
Loop

objRecordset.Sort = "field1"

Set ts = objFileSystem.OpenTextFile(outfile, ForWriting, True)
Do Until objRecordset.EOF
ts.WriteLine objRecordset.Fields(0) & "," & objRecordset.Fields(1) & "," & CStr(objRecordset.Fields(2))
objRecordset.MoveNext
Loop

objRecordset.Close
Set objRecordset = Nothing

MsgBox "終わり"

yanmama さん 2001年 08月 23日 17時 09分 08秒

To:管理人さま

>> VB6.0SP4からWshEnvironmentオブジェクトを使って、システム環境
>> 変数(SYSTEM)のPathのデータを書換えています。
>
>Lesson11に結構詳しく解説しているので、まずは読んでみてください。

Lesson11を読ませていただきました。
で、私はオブジェクトを作成した後にこんな感じでやっています。。。
(文字列で扱っているのがマズイのか。。。?)

strGetPathdata = WSHEnv.Item("path")
WSHEnv("path") = "X:\YY\ZZZ;" & strGetPathdata

>ちなみに、WshEnvironmentを使って環境変数を書き換えた直後に、
>マイコンピュータのプロパティで環境変数を確認されましたでしょうか。
>正常に書き換わっていますか?

マイコンピュータのプロパティとレジストリは書き換わっています。
ただ、コマンドプロンプトから"set path"と打つと、
環境変数%SystemRoot%そのまんまで表示されることがわかりました。
本来は、"C:\WINNT"のように実際のパスで表示されますよね。


たー さん 2001年 08月 23日 13時 11分 57秒

こんにちは。

今ちょっと「こんなことできないかな」と
思っていることがあり、投稿しました。

VB等でスクリプトを作ったことがないので
文法を見てもまだまださっぱりで、とても
難しいのですが、作業を簡易化したいと思って
いるので教えて下さい。

EXCELのファイルを新規で作る例はどこかにあったので
試してみましたが、EXCELでCSVファイルを開く作業を
自動化したいのですが、CSVファイルを開く方法があり
ますでしょうか?

たくさんのテキストをEXCELで開かなければならないので
一つ一つ手作業でやっているととても時間がかかります。
できれば、EXCELに変換する際、きまった形式で開きたい
のですが、それも可能でしょうか?(列の幅、フォント等)

何か方法があれば、どなたかご教授下さい。
お願いします。



てる さん 2001年 08月 23日 11時 43分 53秒

先ほどの書き込みは失敗です。すみません。

>microsoft.xmlhttp(IE5以上にバンドル)を使えば、HTMLドキュメントをそのままの
>形でダウンロードできます。ただし、ダウンロードされたドキュメントは
>ちょっと加工しないとそのままでは使えません。
>参照: 15-31 管理人むたぐち 2000-06-02 23:28

以前、教えて頂いた、以下のように IE を使用して表示されているページの
ソースを知りたいのですが。
Set Ie = WScript.CreateObject("InternetExplorer.Application","IE_")
Ie.Navigate "http://www.monex.co.jp"
Sub IE_DocumentComplete(pdisp,url)

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


Document

てる さん 2001年 08月 23日 11時 39分 25秒

microsoft.xmlhttp(IE5以上にバンドル)を使えば、HTMLドキュメントをそのままの
形でダウンロードできます。ただし、ダウンロードされたドキュメントは
ちょっと加工しないとそのままでは使えません。
参照: 15-31 管理人むたぐち 2000-06-02 23:28

土屋 さん 2001年 08月 23日 09時 36分 30秒

To: むたぐち さん

> うーん。もしかして誤解されているような気がするんですが。
> WshShellは立派なCOMオブジェクトです。
> WSHのパッケージに含まれるwshom.ocxがこのオブジェクトの機能を提供しています。

そうでした。
将来修正パッチかなんかでレジストリ直接操作の部分が制限されるのでは、といいたかったのですが、そもそも直接操作の部分もCOMで提供されているのでしたね。
わかってはいたのですが、気がまわってませんでした。

> ただし、この方法を使っても、完全にはもとのソースとは一致しません。
>> (他の方法にしてしまえばあるわけなんですが)
> そうですね。上で書いたmicrosoft.xmlhttpを使う方法はその一つです。

view-source:http://〜
なんてアドレスに指定すると、ソースがそっくりそのまま出てくるんですが、
これのうまい使い方がわかってないです。


To: matsu さん

> CSVファイルをソートするためにVBSでADOを使ってみたんですけど、ADOが使える
環境には何か必要な条件とかあるのでしょうか?

ADO自体は使えますか?
もし使えないときは、MSのサイトからMDACをダウンロードしてインストールする必要があります。

参考までに、ADOでCSVファイルにアクセスするサンプルなんぞを。
(ただし、レコード削除はサポートされていません)
なくても動く行がずいぶんあるので、適当に削ってください。

Option Explicit

'定数を宣言します
Const adOpenForwardOnly = 0
Const adOpenKeyset = 1
Const adOpenDynamic = 2
Const adOpenStatic = 3
Const adLockReadOnly = 1
Const adLockPessimistic = 2
Const adCmdText = 1
Const adCmdTable = 2

'変数を宣言します
Dim strFileName,strFilePath,CN,RS,QL

'該当ファイルとそのフォルダを指定します
strFileName = "test.csv"
strFilePath = "C:\Notes\Work"

'ADOの接続を開始します
Set CN = CreateObject("ADODB.Connection")
CN.ConnectionString = "Provider = MSDASQL.1;" & _
"Extended Properties=""" & _
"DRIVER={Microsoft Text Driver (*.txt; *.csv)};" & _
"DBQ=" & strFilePath & """"
CN.Open

'レコードセットを開きます
QL = "SELECT * FROM " & strFileName
Set RS = CreateObject("ADODB.Recordset")
RS.Open QL, CN, adOpenStatic, adLockReadOnly,adCmdText

MsgBox RS.Fields(0) & RS.Fields(1) & RS.Fields(2)

'接続を閉じます
RS.Close
CN.Close
Set RS = Nothing
Set CN = Nothing

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

To: 土屋 さん

> 過去の記事1を見ながら、一日みないうちにずいぶん記事が増えたなあと感心していた次第。

最近はまた書き込みがなかなかのハイペースですね。
こんだけ記事がたまると、見る人も大変だろうなあと思います。

> たいへん失礼をばいたしました。
> 今あるのだと、なんとかなっているかも。

できました。

> 最近は興味の対象が、ブラウザ上でも暗号化・復号化ができないか、ということに移行してまして、
> HTML Encoder Pro (ver1.3) http://www.yamashow.com/software/index.htm
> みたいなことができないだろうかと思っています。
> ちなみにこのソフトでエンコードされたHTMLファイルのコードを拝見しましたが、
> パスワードをバイト配列に変換して、そのままXOR処理に使っているという雰囲気で(少々細工が加わっていますが)、
> 強度自体はそれほど高くないのでは(つまりプロがその気になれば解読できてしまうのでは)、
> という印象を持ちましたが、どうなのでしょう(素人なもので、、、)

というか、http://www.yamashow.com/software/hackhtml.htm こんなページがあるでは
ないですか。
# これ、開発者本人に書かれたものですけど(^^;

> ちまたにJavaScriptで、SHA-1やMD-5などのハッシュ作成や、DES暗号化(この間まで全米公認の暗号化様式でした)、圧縮・解凍(こうのまで作る人がいるんですね)などをおこなうコードが公開されているので、
> これらを組み合わせると、結構面白そう・・・

見つけましたよ。http://www.goice.co.jp/member/mo/amuse/javascript/expert/

> WSHでWSFファイルを使ってインクルードしても使えるので、
> WSHの世界がまた急に広がってきた気がする・・・

そうですね。JavaScriptだけでここまでできるとは思いませんでした。
ここで公開されているライブラリをWSC(Windows Script Components)化すると、
WSHだけでなく、HTAやASPや、もちろんVBからでも普通のCOMコンポーネントとして
呼び出せるようになります。

WSCについておさらいしておきますと、WSCというのは「テキストベースで構築可能な
COMコンポーネント」です。(いっちょまえにProgIDやclassIDもつく)
WSCファイルはWSFファイルと似た形式のXMLフォーマットです。
詳細は http://www.asia.microsoft.com/Japan/Developer/Scripting/default.htm
# 私、知らなかったんですが、createComponent関数を使えば、オブジェクトを
# 階層化することもできるんですねえ。
# 後は定数の公開をどうやるか、これがわからない(^^;

WSCって、記述言語が所詮スクリプト言語だから、結局たいしたことができないし、
あまり使い道がないなあ、やっぱりVBとかを使って作らなきゃ埒があかんなあ、
と思ってたいしてマークしてなかったんですが、よーく考えると、WSFファイルを
使わずに、VBSからJSでしかできない機能を呼び出すことができたりもするので、
なかなか良いですね。

こういう文字列変換系ライブラリ(暗号化、文字コード変換etc)を集めて、
WSC化してやれば、外部COMコンポーネントを使わないでテキストオンリーで
作成できますし、かなり利用価値が高いと思います。
誰かやってみませんか? 誰もやらないなら私がやります(^^;

あと、WSCを使って、VBSからJSの配列の機能を利用できないかなあと考えています。
WSFでは、VBSの配列をJSに渡してソートするという方法を確立したので
(参照: 10-08 管理人むたぐち 2000-03-03 13:12)、WSCにするのも
それほど困難ではないと思います。
これはぜひやりたいですね。

> エンコードされたデータをバイト配列に変換する際にBASP21が使われているみたいですが、ここを書き直せば、WSHオンリーの処理にできそうです。

Chr関数とAsc関数を駆使すれば、できないことはないんじゃないかと思います。

> コモンダイアログ(VB持ってない人もWSHから使えるんでしたっけ?)を使わずに、D&Dでおこなうようにした方がいいかも。

コモンダイアログコントロールは、VBがインストールされている環境でしか
使えません。

> でも、エンコードされたスクリプトもD&Dで簡単にデコードできるみたいですよ、という話は、スクリプトエンコーダ愛用者の方々が知っておいた方がいいことなんでしょうね。(普通、そう思う人はVCとかVBみたいにコンパイルする言語使うかな)

そうですね、あれが絶対だと思っている人はやばい。

> ベクターのトップページで検索サイトを指定せずに検索ボタンを押すとアダルトなサイトにいってしまいますね(私はちゃんと戻ってきました)

? なんともないです。



To: てる さん

> オートパイロットするには、下記のようなことが必要になりますが、教えて
> 頂けないでしょうか?
> IEを制御して、取得したホームページの内容(HTMLのソース)はどのように
> して読めばいいのでしょうか? ソースはどこかのプロパティに入ってるの
> でしょうか?

microsoft.xmlhttp(IE5以上にバンドル)を使えば、HTMLドキュメントをそのままの
形でダウンロードできます。ただし、ダウンロードされたドキュメントは
ちょっと加工しないとそのままでは使えません。
参照: 15-31 管理人むたぐち 2000-06-02 23:28



To: 土屋 さん

> レジストリの直接操作は、いずれCOMで代用されるようになって、
> やがてWSHの機能としては消えてしまいそうな気もしますが、どうなんでしょう。
> 今まで様々なウィルス(ワーム)で使われてきましたからねぇ。

うーん。もしかして誤解されているような気がするんですが。
WshShellは立派なCOMオブジェクトです。
WSHのパッケージに含まれるwshom.ocxがこのオブジェクトの機能を提供しています。

> ソースはわかりませんが、表示された内容でよければ、
> IE.Document.body.innerTEXT
> で受け取ることができます。
> タグも含める場合は、
> IE.Document.body.innerHTML
> で、BODYタグも含めてしまう場合は、
> IE.Document.body.outerHTML
> でできます。

これだと、<html></html>の外側が取得できませんので、
IE.Document.body.parentElement.outerHTML を使うといいと思います。
参照: 21-08 管理人むたぐち 2000-08-29 02:29

ただし、この方法を使っても、完全にはもとのソースとは一致しません。

> (他の方法にしてしまえばあるわけなんですが)

そうですね。上で書いたmicrosoft.xmlhttpを使う方法はその一つです。

> でも、IE5.5SP2の強制終了って、「大変なご不便をおかけしまして、まことに申しわけありません。」てな感じになったんですね。
> 大人になったなあ。うんうん。

あ、そうなんですか。
sp2にしてからまだ落ちてないので、落ちるのが楽しみです。
…というか、IEってなかなか落ちないし、ふだんはDonutR使ってるから
お目にかかることもないかもね。
むしろエクスプローラがよく落ちて困っているんですけど(^^;



To: matu さん

> CSVファイルをソートするためにVBSでADOを使ってみたんですけど、ADOが使える
> 環境には何か必要な条件とかあるのでしょうか?

私もあんまり知らないのですが、Win2000ならOKみたいですね。

> ちょっと手を着けかけたのですが、最近忙しくて進んでません。
> どうやったら、そういった面白そうな案が浮かぶのでしょうか。思っても見ませ
> んでした。(^-^;

…思いつきが思いつきで終わった例がいくつあることか(^^;



To: yanmama さん

> VB6.0SP4からWshEnvironmentオブジェクトを使って、システム環境
> 変数(SYSTEM)のPathのデータを書換えています。

Lesson11に結構詳しく解説しているので、まずは読んでみてください。

> 手動でマイコンピュータのプロパティで環境変数のPathの値を
> 書換えるオペレーションとWshEnvironmentオブジェクトを使っ
> て、システム環境変数(SYSTEM)のPathのデータを書換える操作
> は結果的には同じことを行っているのではないのでしょうか?

おなじことをやっているはずです。
つまり、どちらもレジストリキーの書き換えです。

ちなみに、WshEnvironmentを使って環境変数を書き換えた直後に、
マイコンピュータのプロパティで環境変数を確認されましたでしょうか。
正常に書き換わっていますか?



To: いちにい さん

> アクセスログ見て、ネスケユーザって、どの位居ます?
> WSH系サイトで。(笑)

アクセスログは取っていないのでわかりませんが、
99.7%はIEでしょう、きっと。

> >> バージョンアップしたら、エラーが出てもデバッガが起動しなくなった。
> >> 何故?
> > インターネットオプションの詳細タブで、「スクリプトのデバッグを使用しない」
> > にチェックが入っていませんか? (IE5の場合)
>
> 無いです。

え、ないことはないと思うんですが…。
もしかしたら、表現がIE4とIE5では違うのかもしれません。
もう一回良く見てもらえますか?

> > 上位互換性が徹底すれば問題ないと思います。
>
> そりゃ、そうですね。(笑)

VBScriptの将来について、前回の補足をしたいんですが、今日はもう遅いし
またにしましょう(^^;
実は、とある重大なことに気づいたんです。賢明な皆さんならもうお気づきかも
しれませんが、IE内で動作する、いわゆる(サーバースクリプトに対する)
クライアントスクリプトがどうなるかについてです。



To: Lib30 さん

> キッズgooから自分のページを見たら、すべてのページで漢字にふりがながふられていて感動しました。
> そういうわけでスクリプト(例によって?WSHではなく .url です)。
>
> [InternetShortcut]
> URL=javascript:location.href="http://kids.goo.ne.jp/cgi-bin/kgbody.cgi?TP="+escape(location.href)+"&BL=0&SY=0&MD=2"
> IconIndex=6
> IconFile=imejpmgr.exe

これ、良すぎです。
さっそく「お気に入り」に入れました。
同じ要領でエキサイト翻訳やGoogleキャッシュ(意味があるのか?)
もできませんかねえ?

そういえば、34-26 Lib30 2001-04-13 22:23 のモノクロ化urlファイルも大変
重宝してます。

> IMEの再変換などのAPIを使えば、個人でもこういったソフトが作れますかねえ。

この話は以前やった気がします(^^;
34-10 管理人むたぐち 2001-04-11 01:34 この辺からだな。

> IME2002には英文翻訳機能が実装されているから(IMEではなくWordの機能かも)
> うまくやれば英文翻訳もできたりして。

へえ、そんな機能までつくんですか。

> あれ、いつの間にかSP2が出ていたんですね。Windows Updateには載ってなくて気づきませんでした。

たしかにWindows Updateではsp1のままでしたね。

> ぱっと見はどこが変わったのかよくわかりませんが、ZDNNに出てた「特定WebにアクセスするとPCに致命傷」
> を与えるJavaScriptに対してパッチでも当てたのでしょうか。
>
> http://www.zdnet.co.jp/news/0108/20/javascript.html

これ、昨日のNHKでもやってました。
あいかわらずJavaとJavaScriptが混同されている気が。
あと、IEにはJavaScriptなんかないぞ。(極論)

> 「If you have any trouble please email:findlu@21cn.com. note:not for japanese&dog&pig」(トラブルの際はfindlu@21cn.comにメールを。ただし,豚と犬と日本人は除く)

なんだと(怒)

Lib30 さん (lib30@write-off.f2s.com) 2001年 08月 23日 01時 49分 10秒
URL:http://www.ob.aitai.ne.jp/~kazoo/

キッズgooから自分のページを見たら、すべてのページで漢字にふりがながふられていて感動しました。
そういうわけでスクリプト(例によって?WSHではなく .url です)。

[InternetShortcut]
URL=javascript:location.href="http://kids.goo.ne.jp/cgi-bin/kgbody.cgi?TP="+escape(location.href)+"&BL=0&SY=0&MD=2"
IconIndex=6
IconFile=imejpmgr.exe


IMEの再変換などのAPIを使えば、個人でもこういったソフトが作れますかねえ。
IME2002には英文翻訳機能が実装されているから(IMEではなくWordの機能かも)
うまくやれば英文翻訳もできたりして。


> IE5.5のSP2にしたのがいけなかったかなあ(ウィルスチェックはちゃんとしてるんだけど。。)

あれ、いつの間にかSP2が出ていたんですね。Windows Updateには載ってなくて気づきませんでした。
ぱっと見はどこが変わったのかよくわかりませんが、ZDNNに出てた「特定WebにアクセスするとPCに致命傷」
を与えるJavaScriptに対してパッチでも当てたのでしょうか。

http://www.zdnet.co.jp/news/0108/20/javascript.html


いちにい さん 2001年 08月 23日 00時 11分 58秒

To: たけ さん 有り難うございます。

以前、結果をメールで送ってくるのは、使ったこと有ったんですが。
こりゃ良いですね。なので、頼りっぱなしで行こうと思います。(笑)



To: 管理人むたぐち さん

>> IE5用だったので、ガッカリ。(笑)
> IE5入れませんか?
> やっぱり重過ぎるか。

入れてみたいが、後が怖い。
HDの残りも少ないし。
その前に、石の性能が…。>150MHz。
と言うか、ネスケ使ってます。(死)
(コレも古い。)
アクセスログ見て、ネスケユーザって、どの位居ます?
WSH系サイトで。(笑)


>> バージョンアップしたら、エラーが出てもデバッガが起動しなくなった。
>> 何故?
> インターネットオプションの詳細タブで、「スクリプトのデバッグを使用しない」
> にチェックが入っていませんか? (IE5の場合)

無いです。
アップデートする前は、ちゃんと出てたんですよ。
後、エラーダイアログが、Msgboxに変わったし。(コレは良いけど。)


> 上位互換性が徹底すれば問題ないと思います。

そりゃ、そうですね。(笑)




yanmama さん 2001年 08月 22日 22時 27分 15秒

VB6.0SP4からWshEnvironmentオブジェクトを使って、システム環境
変数(SYSTEM)のPathのデータを書換えています。
ちなみに、Pathの文字列を取得し、その文字列の先頭に"X:\YYY\Bin;"
を追加して返しているだけです。

ところが、書換えた後にOSを再起動し、コマンドプロンプトから
C:\>ping XXXXX
と打つと「内部コマンドではありません」と怒られてしまいます。
ただしsystem32まで下りてpingを打つと正常に動きます。ipconfig
も同様です。

pathが有効になっていないとすると、他にも何か不具合が起こり
そうなものですが、ping不可の現象以外は何も影響はないよう
です。また、新規に追加したpathは有効で、コマンドプロンプト
からフルパスで指定しなくても実行できます。

手動でマイコンピュータのプロパティで環境変数のPathの値を
書換えるオペレーションとWshEnvironmentオブジェクトを使っ
て、システム環境変数(SYSTEM)のPathのデータを書換える操作
は結果的には同じことを行っているのではないのでしょうか?

ご存知の方がいらしたら教えて下さい。
「こうやったらうまくいくかも?」というレスでも何でも構いま
せん。
以前いろんなところに投稿してみましたが、いっこうに解決でき
そうな兆しがありません。
よろしくお願いします。

matu さん 2001年 08月 22日 21時 33分 34秒

CSVファイルをソートするためにVBSでADOを使ってみたんですけど、ADOが使える
環境には何か必要な条件とかあるのでしょうか?


To: むたぐち さん

> HTMLヘルプって、意外と便利ですし。
> 「WSH Lab.の記事を全部ダウンロードしてHTMLヘルプ化する」スクリプトを
> 作りましょうか。というか、誰か作ってくれませんか(^^;

面白そうですね。
ちょっと手を着けかけたのですが、最近忙しくて進んでません。
どうやったら、そういった面白そうな案が浮かぶのでしょうか。思っても見ませ
んでした。(^-^;

土屋 さん 2001年 08月 22日 18時 32分 47秒

To: あきら さん

> 下のファイル消しておきましたよ。

の方がいいでしょうね。
これを電子メールなんかで送る人がでたりすると、立派なウィルスとしても認知されてしまって、さて作者は誰だ?なんてことになって怖いですからね。

レジストリの直接操作は、いずれCOMで代用されるようになって、
やがてWSHの機能としては消えてしまいそうな気もしますが、どうなんでしょう。
今まで様々なウィルス(ワーム)で使われてきましたからねぇ。


To: てる さん

> IEを制御して、取得したホームページの内容(HTMLのソース)はどのように
> して読めばいいのでしょうか? ソースはどこかのプロパティに入ってるの
> でしょうか?

ソースはわかりませんが、表示された内容でよければ、
IE.Document.body.innerTEXT
で受け取ることができます。
タグも含める場合は、
IE.Document.body.innerHTML
で、BODYタグも含めてしまう場合は、
IE.Document.body.outerHTML
でできます。
タイトルは、
IE.Document.title
ですね。
こういう感じで、スクリプトの部分や画像、リンクなども取得できますが、
ソース全体となるとわかりませんので誰か教えて下さい。
(他の方法にしてしまえばあるわけなんですが)


To: Me

> あれ?
> ベクターのトップページで検索サイトを指定せずに検索ボタンを押すとアダルトなサイトにいってしまいますね(私はちゃんと戻ってきました)

あれ?他のコンピュータで試したらなんともないぞお。
IE5.5のSP2にしたのがいけなかったかなあ(ウィルスチェックはちゃんとしてるんだけど。。)

でも、IE5.5SP2の強制終了って、「大変なご不便をおかけしまして、まことに申しわけありません。」てな感じになったんですね。
大人になったなあ。うんうん。

あきら さん (ariaki@fh.freeserve.ne.jp) 2001年 08月 22日 15時 56分 45秒

To: むたぐちさん

下のファイル消しておきましたよ。

管理人むたぐち さん 2001年 08月 22日 14時 38分 14秒

To: あきら さん

ええと、私としては、あまりこういうスクリプトを配布していただきたく
ないです。
ジョークではすまされない事態にもなりかねませんので。

タグ対応の掲示板といえども、さすがに<script>はブロックされるでしょうし、
IEのセキュリティ設定を最低にしていない限り、WSH付属コンポーネントは
実行すらできないので、その点は問題ないでしょう。

あきら さん (ariaki@fh.freeserve.ne.jp) 2001年 08月 22日 13時 38分 28秒
URL:http://www.ariaki.com/gameover.lzh

こういうのって、脆弱性と言えるんですかね?
ある意味かなり怖いスクリプトでタグ対応の掲示板とかに書き込まれると
大変な事になるような気がするんですけど…。どうでしょう?

てる さん 2001年 08月 22日 12時 34分 11秒
URL:IEで

むたぐちさん
先日はありがとうございました。

オートパイロットするには、下記のようなことが必要になりますが、教えて
頂けないでしょうか?
IEを制御して、取得したホームページの内容(HTMLのソース)はどのように
して読めばいいのでしょうか? ソースはどこかのプロパティに入ってるの
でしょうか?

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

土屋 さん 2001年 08月 22日 11時 14分 39秒

あれ?
ベクターのトップページで検索サイトを指定せずに検索ボタンを押すとアダルトなサイトにいってしまいますね(私はちゃんと戻ってきました)
誰かにいたずらされたのかなあ・・・

土屋 さん 2001年 08月 22日 10時 43分 15秒

過去の記事1を見ながら、一日みないうちにずいぶん記事が増えたなあと感心していた次第。

To: むたぐち さん

たいへん失礼をばいたしました。
今あるのだと、なんとかなっているかも。
最初はファイルの閲覧だけができるようにして、
編集ボタンを押すと編集モードに入るようにしてみたのですが、
なんだか使いにくくなってしまった。。。

最近は興味の対象が、ブラウザ上でも暗号化・復号化ができないか、ということに移行してまして、
HTML Encoder Pro (ver1.3) http://www.yamashow.com/software/index.htm
みたいなことができないだろうかと思っています。
ちなみにこのソフトでエンコードされたHTMLファイルのコードを拝見しましたが、
パスワードをバイト配列に変換して、そのままXOR処理に使っているという雰囲気で(少々細工が加わっていますが)、
強度自体はそれほど高くないのでは(つまりプロがその気になれば解読できてしまうのでは)、
という印象を持ちましたが、どうなのでしょう(素人なもので、、、)

ちまたにJavaScriptで、SHA-1やMD-5などのハッシュ作成や、DES暗号化(この間まで全米公認の暗号化様式でした)、圧縮・解凍(こうのまで作る人がいるんですね)などをおこなうコードが公開されているので、
これらを組み合わせると、結構面白そう・・・
WSHでWSFファイルを使ってインクルードしても使えるので、
WSHの世界がまた急に広がってきた気がする・・・

> Dictionaryオブジェクトって、Perlで言うところの関連配列(連想配列あるいは
> ハッシュとも言う)と同等のもの、と説明されますが、そもそも連想配列って
> 何が便利なんだろうか。
〜以下略〜

なるほど、連想配列かぁ。
さらに配列も使えるとなると、ちょっと便利かもしれない。
ソートがもっと苦労しなくていいのなら、もっと便利なんだけど。

配列のソートって、そこだけJScriptにしたり、BASP21を使ったり、そうことになるのかなあ。

> # http://www.e-soshiki.com/kenkyu/reports/angou.htm
> # http://www.hlla.is.tsukuba.ac.jp/~yas/ipe/shakai-kougi-1997/1997-06-06/
> # http://www.hannan-u.ac.jp/~nozawa/soturon/nishimoto-s/nishimoto.htm
> # 等のページを見つけました。文字の暗号化の基本を学べます。

ありがとうございます。2番目のサイトに
> 真性乱数を使うと、解読する方法はない。
というのがありますが、パスワードからこれに近い擬似乱数をどう生成するかで、
SHA-1やMD5に目をつけているんです。
(WSHでもつくれてしまうし。。)


以前でたスクリプトデコーダの話ですが、(ここだけの話ですが)
過去ログにあるVB版よりも、ちょっと前に私が紹介したものの方が、デコードしたものを比べた限りではごみがはいらずにいいみたいですね。
エンコードされたデータをバイト配列に変換する際にBASP21が使われているみたいですが、ここを書き直せば、WSHオンリーの処理にできそうです。
コモンダイアログ(VB持ってない人もWSHから使えるんでしたっけ?)を使わずに、D&Dでおこなうようにした方がいいかも。
(あれ?この話って避けた方が無難なんでしたっけ?)
でも、エンコードされたスクリプトもD&Dで簡単にデコードできるみたいですよ、という話は、スクリプトエンコーダ愛用者の方々が知っておいた方がいいことなんでしょうね。(普通、そう思う人はVCとかVBみたいにコンパイルする言語使うかな)

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

To: いちにい さん

> しかし、その困難を乗り越えたところに、有るんです……。(何が?)

どっかで聞いたセリフ…。

> 新しい、困難が…。(おい)

…だめだ(何が)

> IE5用だったので、ガッカリ。(笑)

IE5入れませんか?
やっぱり重過ぎるか。

> VBSは、バージョンアップしたんですが…。

あれはIE5から提供されるDOMのオブジェクトを使っているので、IE4では
動かないんです。

> バージョンアップしたら、エラーが出てもデバッガが起動しなくなった。
> 何故?

インターネットオプションの詳細タブで、「スクリプトのデバッグを使用しない」
にチェックが入っていませんか? (IE5の場合)

> より、複雑なことを出来るように機能アップすれば、お手軽さが損なわれる
> と言うジレンマは、ありますが。

上位互換性が徹底すれば問題ないと思います。



To: たけ さん

> Mebius にバンドルされていた PowerE/J ここだけ翻訳を
> 使っていたことがあります。結構ちゃんと訳してくれました。

私は翻訳ソフトは使わないですが、辞書ソフトはフル活用しています。
DDWinという、epwing形式対応の辞書ソフトを使っています。
このソフト、複数辞書の串刺し検索ができるので非常に重宝します。
また、DDPopというモジュールが公開されており、これを使うと、
単語を選択状態にしてCtrl+右クリックすると、その単語をDDWinで引くことができます。
これ、IEだろうがWordだろうがAcrobat ReaderだろうがEmEditorだろうがDatulaだろうが、
何からでも同じ操作で辞書が引けるので、非常に便利です。
というか、これなしにはもう生きていけません。

あと、英文読むのがかったるいときは、
19-15 管理人むたぐち 2000-08-02 16:45
で作ったHTAが活躍します。
長い間聞いていると、頭がおかしくなりそうですが。

たけ さん (e_takeda@din.or.jp) 2001年 08月 22日 01時 07分 49秒
URL:http://www.din.or.jp/~e_takeda/

To: いちにい さん

> 誰か、いい翻訳ソフト知りませんか?

ご存知かとは思いますが、無料の「excite 翻訳」があります。
http://www.excite.co.jp/world/
無料なので、提供してもらえるだけありがたいかと。
でも思いっきり頼りっぱなしのダメなあたし... > 爆

Mebius にバンドルされていた PowerE/J ここだけ翻訳を
使っていたことがあります。結構ちゃんと訳してくれました。
# でも、Oracle を「神託」と直訳するのはやめちくりー (^^;

Return