エル さん 2004年 07月 19日 23時 34分 51秒

お返事ありがとうございました。
Microsoft.XMLHTTP オブジェクトと Adodb.Stream オブジェクトを使用した方式なんですが、Formのボタンをクリックしたタイミングで、PHPを利用してサーバーのローカルにあるファイルをユーザーにダウンロードさせるようにしているので、WEBから直接ファイルへアクセスできないのです。
その為、その方法は断念し、別の方法を考えているところなんです。


いりや さん 2004年 07月 19日 23時 22分 14秒

エルさん、

| IEのdocument等のオブジェクトが取得できるのでダイアログボックスのオブジェ
| クトも取得できるのかなと当初思ったのです。

なるほど。ただ Dynamic HTML Object Model のマニュアルをよんでいる限りで
はそういうインターフェイスをユーザに解放しているのをみかけたことはないで
す。

ダウンロード操作の自動化に的を絞ってよいのであれば Microsoft.XMLHTTP オ
ブジェクトと Adodb.Stream オブジェクトを使用した方式 [*] はさほど悪くな
いと思うんですが、なにかご心配のことでもおありで?

[*] さいきん UWSC のあるライブラリにこの方式を利用したアンカーの href 属
性のバイナリデータ (PDF ファイル) をダウンロード保存する手続きを追加した
のでタイムリーでした。下記 UWSC 掲示板の 2004/07/06 00:29:06 の記事の
SaveAs() 手続きが該当部分になります。

http://hidebbs.net/bbs/umiumi?n=24186080&s=7

エル さん 2004年 07月 19日 22時 29分 50秒

お返事ありがとうございました。
私もUWSCは検討しました。ただ、クライアント先で使用してもらうつもりなので、できたらフリー等のツールは使いたくないと思いまして。実現できれば言語は問わないのですが、WSH使用すれば比較的簡単に&カスタマイズも行いやすいかなと思いまして。IEのdocument等のオブジェクトが取得できるのでダイアログボックスのオブジェクトも取得できるのかなと当初思ったのです。

いりや さん 2004年 07月 19日 21時 52分 10秒

エルさん、よろずやさん、

Windows Script Host とは違いますが UWSC というGUI操作の自動化を狙ったアプリケーションがあって、ちょうど数日前にエルさんと全く同じ課題に取り組んでいる方がいらっしゃいました。

ご参考までにリンク情報をお知らせします。

記事: フォームのINPUT TYPE=FILEについて
http://hidebbs.net/bbs/umiumi?n=24481462&s=7

うみうみ屋さん
http://www.h7.dion.ne.jp/~umiumi/

うみうみ屋さん Link
http://www.h7.dion.ne.jp/~umiumi/link.html

エル さん 2004年 07月 19日 21時 40分 41秒

補足です。IEを自動で操作したいと思ってまして、画面遷移はうまくいくのですが、ダウンロードの際にダイアログボックスが表示されてそこから制御の方法がわからないのです。adodb.streamは使わない方法で実現できる方法がありましたら是非お願いします。

よろずや さん (kin_chan@wine.plala.or.jp) 2004年 07月 19日 21時 23分 19秒

ダイアログボックスの「保存」ボタン等をスクリプトから自動でクリックなんてされたら、ウィルスが蔓延ってしまいそう。

える さん 2004年 07月 19日 21時 20分 38秒

初めまして、どうしてもわからなかったので質問します。
ファイルをダウンロードする際等に表示されるダイアログボックスの「保存」ボタン等をスクリプトから自動でクリックさせたり操作することはできないでしょうか? ただ、sendkeyは確実性の面から使いたくないのです。オブジェクトを取得して操作するようなことってできないのでしょうか?
よろしくお願いします。

おしゃる さん 2004年 07月 18日 21時 32分 22秒

魔界の仮面弁士さん

ありがとうございます。
Microsoftのページを見ても膨大な情報に目が点になっていました。
直感的にあれがしたいと思ってもある程度勉強しないと難しいですね。
これからも勉強頑張ります。

魔界の仮面弁士 さん 2004年 07月 18日 18時 13分 09秒

》 おしゃる さん
> Scriptを利用して実行中のServiceを停止させる事ってできるんでしょうか?
幾つかの方法があります。

例えば、"Windows Time"サービス(サービス名は"W32Time") を止めるなら、

'NET STOP コマンドを使う方法
CreateObject("WScript.Shell").Run "NET STOP W32Time"

とか、

'ServiceStopメソッドを使う方法
CreateObject("Shell.Application").ServiceStop "W32Time", False

などのように書けます。

★SAEKO★ さん (jpk9945@jpcom.jp) 2004年 07月 18日 15時 07分 20秒

女子大に通うRのサエです。出会いというのがほとんどなくて初めてこういった所に登録してみました。元気と明るさが自慢です。
年齢とかあまり離れない限り(30歳位迄で)特に希望はありませんが、面白くて一緒にいて飽きないひと
ちょっと人見知りしちゃう方なのでリードしてくれる人がうれしいです。慣れちゃえばよくしゃべるコだと思いますよw

★SAEKO★ さん (jpk9945@jpcom.jp) 2004年 07月 18日 15時 00分 37秒

女子大に通うRのサエです。出会いというのがほとんどなくて初めてこういった所に登録してみました。元気と明るさが自慢です。
年齢とかあまり離れない限り(30歳位迄で)特に希望はありませんが、面白くて一緒にいて飽きないひと
ちょっと人見知りしちゃう方なのでリードしてくれる人がうれしいです。慣れちゃえばよくしゃべるコだと思いますよw

おしゃる さん 2004年 07月 17日 23時 18分 16秒

皆さんこんにちは。
いろんなページを見てたどり着きました。
分からない事があるので教えて欲しいのですが、
Scriptを利用して実行中のServiceを停止させる事ってできるんでしょうか?

なっちか さん (mi.na.ma.780@r4.dion.ne.jp) 2004年 07月 16日 18時 25分 53秒
URL:http://plaza.rakuten.co.jp/RAGFAIRNATSU/

魔界の仮面弁士様

gifで保存出来ました!!!本当にありがとうございます!!!
ずっと困ってたんですよ。。。
あんな分かりにくい説明で分かっていただいて、
本当にありがとうございました!!!



魔界の仮面弁士 さん 2004年 07月 16日 17時 23分 02秒

》 なっちかさん
状況がわかりませんが、IEで右クリックした時の、
[名前を付けて画像を保存]の事でしょうか?
だとしたら、下記を試して見てください。
http://homepage2.nifty.com/winfaq/c/trouble.html#360

なっちか さん 2004年 07月 16日 16時 02分 13秒
URL:http://plaza.rakuten.co.jp/RAGFAIRNATSU/

初めまして、なっちかと申します。
質問をしたいんですが…画像をマイピクチャに保存する時、
ビットマップイメージになるんです。gifにしたいんですが…
ファイルの種類を押しても、ビットマップイメージしか項目がないんです。
でも、たまに同じ画像がgifで保存する事が出来ます。気まぐれなんです。。
どうすればファイルの種類(gif)が選べますか??
しょうもない質問ですが、教えて下さると嬉しいです。
意味不明だったら、流して下さい。

あきら さん 2004年 07月 16日 09時 13分 41秒

ぱぱちんさん

すごく漠然としてて分からないのですが、

2.コンピュータ名(NetBIOS Computer Name)の取得に関しては

WshNetwork オブジェクトのComputerName プロパテイを呼び出せば得
られます。

VBScript の場合

Option Explicit '変数の明示
Dim objWshNetwork '変数の宣言
'オブジェクトの生成
Set objWshNetwork = WScript.CreateObject("WScript.Network")
'コンピューター名の表示
Wscript.Echo objWshNetwork.ComputerName


JScript の場合

var objWshNetwork;
objWshNetwork = WScript.CreateObject("WScript.Network");
WScript.Echo(objWshNetwork.ComputerName);

それともブラウザーがWebサーバーと交信する際に吐き出す環境変数の
中からコンピューター名をリダイレクトする方法ですか?

まき さん (jpc2254@jpcom.jp) 2004年 07月 14日 13時 38分 56秒

普段と違う自分になっちゃいたいんですけど、付き合ってくれる人いませんか?
今まで大人しく生きてきたから…
私は27歳で語学学校の教師をしています。
身長は160aで痩せ方です!

魔界の仮面弁士 さん 2004年 07月 14日 12時 55分 16秒

》 しめさば さん
> WSHでブラウザ(IE)を起動する際に、スクロールバーを強制的に
> 消したいのですが、何か方法がないでしょうか?
IE自身には、スクロールバーを制御する機能はありません。
スクロールの制御は、内部に表示されるActiveXドキュメントに依存します。

たとえば、Excelファイルを表示している場合は、
IE.Document.Parent.Windows(1).DisplayHorizontalScrollBar = False
IE.Document.Parent.Windows(1).DisplayVerticalScrollBar = False
などとなりますし、HTML文書を表示しているのであれば、
IE.document.body.runtimeStyle.overflowX = "hidden"
IE.document.body.runtimeStyle.overflowY = "hidden"
という感じです。(hideen/auto/scroll/visible、既定値はauto)

ふみふみ さん 2004年 07月 13日 20時 04分 31秒

> ばんのしゃーによかばんた さん 2004年 07月 12日 11時 13分 15秒
>
> ファイルの検索やFindStrで検索できる文字列はShiftJISです。
> そこを無理矢理Unicode文字列を検索する方法です。
>
> ファイルの検索は正規表現が使えないので、変換文字列に「.*」や「.」が含まれるときは、
> それらを含まない部分文字列を選択して使用してください。

いつもすみません。有難うございます。
ちょっとやってみたのですが、活用の仕方が良く理解できていないようで活かしきれておりません。
Explorer の検索では、やはり限界があるようですね…。
やりたかったことは、先の履歴を書き出す VBS で書き出した履歴が複数ある場合(30/month とか)
に、文字列の検索で該当する HTML を探し出す、というようなことです。
とりあえず現時点では、Unicode で出力された HTML を、新規に Shit-JISで開いたEditor で copy
& paste して保存するようにしております。
atmarkit の記事を参考にもしたのですが、多数のファイルを扱うような状況ではないので、手作業
でも対応できる状態でもあります。
殆ど「毎日書き出す」ので HTML の title も書き換えますし、コメントを入れたりもしますので、
ひとまず OK です。
"/" が削られてしまうのはやはり ie の仕様のようで、これを回避する match文に苦戦をしておりま
す。(笑)

文字コードの問題は、難しいものなのですね…。
またひとつ勉強させて頂きました。m(_ _)m

しめさば さん 2004年 07月 13日 18時 00分 15秒

すみません。ご存知の方がいたら教えて下さい。
WSHでブラウザ(IE)を起動する際に、スクロールバーを強制的に
消したいのですが、何か方法がないでしょうか?
↓にie.ScrollBar = False を付け加えるようなイメージなのですが・・、
「ScrollBar」というプロパティがないので困っています。

Dim ie
set ie = WSH.CreateObject("InternetExplorer.Application")
ie.MenuBar = False
ie.ToolBar = False
ie.Visible = True
ie.Resizable = False
ie.Width=1024
ie.Height=740
ie.Top=0
ie.Left=0
IE.Navigate "http://www.yahoo.co.jp"

ばんのしゃーによかばんた さん 2004年 07月 13日 16時 40分 16秒

>管理人むたぐち さん 2004年 07月 02日 08時 56分 15秒
>> SelectionChangedが接続できました。
>おおっ、これでShellFolderViewオブジェクトに外部から
>Connectできるわけですか。
>しかし、残念ながらWinXPでは、Scriptプロパティを参照するとエラーに
>なってしまうので使えないんです、これが。
>そもそもWinXPには「Web表示」が無いんですね。
>したがって、このテクニックはWin2000/ME(/98も?)限定になると思います。

Scriptプロパティを使わなくても、
SelectionChangedがShellFolderViewOC経由でConnect出来ました。
この場合、WebViewにしなくても接続できます。
2000で確認。98は死にます。XP未確認。

ShellFolderViewOCはこういう↓ものです。

Library Shell32
C:\WINNT\system32\SHELL32.dll
Microsoft Shell Controls And Automation
Class ShellFolderViewOC
Shell Folder View Events Router.
Event EnumDone()
The folder has finished enumerating (flashlight is gone).
Event SelectionChanged()
The Selection in the view changed.
Sub SetFolderView(pdisp As Object)
Set the ShellFolderView object to monitor events of.

では、フォルダをひとつ開いておいて、

Set shell=CreateObject("Shell.Application") 'IShellDispatch
For Each ie In Shell.Windows
Wscript.Echo TypeName(ie.document) '↓合わせる
If TypeName(ie.document)="IShellFolderViewDual" Then Exit For
Next
If Not IsEmpty(ie) Then
Set fv=CreateObject("Shell.FolderView.1") 'ShellFolderView
'Wscript.Echo TypeName(fv)
'{9BA05971-F6A8-11CF-A442-00A0C90A8F39}
Wscript.Echo fv.SetFolderView(ie.document)
Call WScript.ConnectObject(fv,"FV_")
For k=0 To 1000
WScript.Sleep 100
Next
End If
Sub FV_SelectionChanged()
Wscript.Echo "SelectionChanged"
End Sub

まき さん (jpc2254@jpcom.jp) 2004年 07月 13日 14時 33分 00秒

普段と違う自分になっちゃいたいんですけど、付き合ってくれる人いませんか?
今まで大人しく生きてきたから…
私は27歳で語学学校の教師をしています。
身長は160aで痩せ方です!

ぱぱちん さん 2004年 07月 13日 11時 57分 47秒

たとえば、こんなことって出来ますでしょうか?

1.あるEXEの処理が終わったら、次の処理を実行
2.コンピュータ名の取得


ばんのしゃーによかばんた さん 2004年 07月 12日 11時 13分 15秒

ファイルの検索やFindStrで検索できる文字列はShiftJISです。
そこを無理矢理Unicode文字列を検索する方法です。

InputBoxに文字列を入れて、変換された文字列で検索します。
FindStrは正規表現が使えるので変換文字列をそのまま指定できますが、
ファイルの検索は正規表現が使えないので、変換文字列に「.*」や「.」が含まれるときは、
それらを含まない部分文字列を選択して使用してください。
※つまり、ファイルの検索は、日本語の検索は出来ても、ASCIIの検索は困難。
※FindStrならASCIIの検索も可能。直接指定できる。例えば「HTML」なら「H.T.M.L.」と
指定すればよい。

Do
str=InputBox("Enter Search String",,u)
If IsEmpty(str) Then Exit Do
For k=1 To LenB(str)
x=AscB(MidB(str,k,1))
If (0<=x And x<=127) Or (160<=x And x<=223) Then
Select Case x
Case 0
u=u & "."
Case Else
u=u & Chr(x)
End Select
Else
If k<LenB(str) Then
k=k+1
y=AscB(MidB(str,k,1))
z=k*256+y
v=Chr(z)
If Asc(v)=z Then
u=u & Chr(z)
Else
u=u & ".*"
End If
Else
u=u & "."
End If
End If
Next
Loop

このスクリプトはUnicodeをShiftJISと思ってShiftJIS->Unicode変換します。
ShiftJISにないパイト列は正規表現の「.*」に変換します。NULは「.」に変換します。
VBScriptから外部に出力するときには、Unicode->ShiftJIS変換されるので、
変換文字列を外部に出力するとUnicodeになります。
それをShiftJISと思って見ていることになります。

ばんのしゃーによかばんた さん 2004年 07月 11日 20時 44分 26秒

>クマ さん 2004年 07月 07日 00時 04分 05秒
>WSHを使用してブラウザIE5.5のウィンドウをアクティブしたいと思っております。
>使用OSは、windows2000です。
>AppActivateメソッドを使用して実現していますが、
>対象ウィンドウがアクティブになると同時に他のウィンドウがアクティブになると、タスクバー>内のタイトル(画面したにある)が青く点滅して、最前面に出てこなくなる場合があります。

点滅だけでなく、最小化の問題もあります。以下の記事を参照。

>ばんのしゃーによかばんた さん 2004年 04月 06日 19時 21分 36秒
>AppActivateしても、タスクバーでピコ、ピコ、ピコと3回点滅するだけ。
>また、
>MsgBoxなどが、他のWindowに隠れて見えないことがある。
>また、
>最小化されていると、アプリにSendKeysが届きません。

IE or Explorerなら以下の記事も参考程度に。最小化の判定など。

>ばんのしゃーによかばんた さん 2004年 04月 25日 16時 24分 29秒
>>次は冴子先生を召喚する方法を…。
>ところで、
>以前、話題に登った、アクティブウィンドウを検出する方法です。
>精度が悪い(タイミング依存)なので、あまり実用向きではありません。
>同じ手は、Leftが取れるオブジェクトなら使えるかも。

以下は追加情報。

IE or Explorerなら、AppActivateの代わりに、ie.visible=Trueでも同じ。
(最小化では最小化のままフォーカスを持つ。)
AppActivateの誤爆を避けるには、こっちがよいかも。

Set shell=CreateObject("Shell.Application")
For ie In shell.Windows
If なんらかの条件 Then
ie.visible=True
Exit For
End If
Next

IEだけなら、ie.document.focusでも同じ。(最小化では無効)
フォーカスを持っているかどうかはie.document.hasfocusで判定可能。

最後に、
これらはこの掲示板を検索すれば得られる情報でした。以下を参照。

>ばんのしゃーによかばんた さん 2004年 06月 03日 17時 34分 42秒
>私のお勧めの学習法は、この掲示板の過去ログを検索/読むことです。

茉莉恵 さん (little-world@e-idol.net) 2004年 07月 08日 12時 45分 44秒

メールくれるときに本気じゃない人はいらないです。
喜ぶべきか怒るべきか迷っちゃうけど、やっぱり疑われるのって気分悪い。
ニセ者だと思うならメールしなければいいんです。

高3までは地方の劇団に入っていて、ジュニアファッションのモデル経験あり。
ただしわがままで生意気とかでクビなっちゃいましたけど…。ちなみに、ふてくされのヨタリ顔です。
今年から、ピカピカの女子大生!これまでとは違う、新しい生活に挑戦。親元離れてたけど、
一人暮らしは初めてなの。いろいろ教えてください。


ふみふみ さん 2004年 07月 08日 05時 57分 03秒

> 魔界の仮面弁士 さん 2004年 07月 07日 15時 02分 41秒
>
> ts.WriteLine "<meta http-equiv=""content-type"" content=""text/html; charset=shift_jis"">"
> とも書けますね。

あ、そのほうがスマートですね。
ご指導有難うございます。
実は、Double Quote を含む文字列の記述をすぐ忘れてしまって、必要な時に思い出せない悪い癖が
あります。(笑)

私個人の利用目的では、これでほぼ完成に近くなりました。
Wiki のほうに投稿しようかとも思ったのですが、今回まではこちらの WSH Lab.掲示板 に、報告も
かねて投稿させて頂きます。

皆様のご指導により、現在使用させて頂いているものは以下のものとなりました。
管理人むたぐち さんのサイトのイメージカラーに近いものにしてみました。


Set fso = WScript.CreateObject("Scripting.FileSystemObject")
set wShell = WScript.CreateObject("WScript.Shell")
Set Shell = WScript.CreateObject("Shell.Application")
Const ssfHISTORY = 34
'Const ssfFAVORITES = 6
Set Folder=Shell.NameSpace(ssfHISTORY)
For Each arg In WScript.Arguments
If IsNumeric(arg) Then
: Set Folder=Shell.NameSpace(CLng(arg))
: Else
: Set Folder=Shell.NameSpace(arg)
End If
Exit For

Next
strPath=Folder.Title & ".html"
Set ts=fso.CreateTextFile(strPath,True,True)
ts.WriteLine "<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.0 Transitional//EN"">"
ts.WriteLine "<html>" & vbCrLf & "<head>" & vbCrLf & "<title>" & Folder.Title & "</title>"
ts.WriteLine "<meta http-equiv=""content-type"" content=""text/html; charset=x-sjis"">"
ts.WriteLine "<style type=""text/css"">" & vbCrLf & "a:link {color:mediumslateblue; font-weight:bolder; text-decoration:none;}" & vbCrLf & "a:visited {font-weight:bolder; text-decoration:none;}" & vbCrLf & "a:hover {color:indigo; background-color:plum;}" & vbCrLf & "body {font-family:Tahoma; font-size:11px; color:black; background-color:lavender; scrollbar-face-color:plum; scrollbar-base-color:mediumpurple; scrollbar-track-color:lavender; scrollbar-highlight-color:snow; scrollbar-3d-light-color:mediumpurple; scrollbar-shadow-color:purple; scrollbar-darkshadow-color:indigo; scrollbar-arrow-color:white;}" & vbCrLf & "</style>" & vbCrLf & "</head>" & vbCrLf
ts.WriteLine "<body>" & vbCrLf
ts.WriteLine "<b>Top of File</b>" & vbCrLf
Call RecSrch(Folder)
ts.WriteLine vbCrLf & "<table><tr><td height=""100""></td></tr></table>"
ts.WriteLine vbCrLf & "<div align=""center"" style=""font-weight:bolder;"">Special Thanks to : <a href=""http://www.roy.hi-ho.ne.jp/mutaguchi/bbs/index.shtml"" title=""「管理人むたぐちさん」&「ばんのしゃーによかばんたさん」&「魔界の仮面弁士さん」有難うございます by ふみふみ"">WSH Lab.掲示板</a></div>"
ts.WriteLine vbCrLf & "<div align=""center"" style=""font-weight:bolder;"">Script Version 2004-07-07</div>"
ts.WriteLine vbCrLf & vbCrLf & vbCrLf & "<b>End of File</b>"
ts.WriteLine vbCrLf & "</body>" & vbCrLf & "</html>"
ts.Close

Sub RecSrch(Folder)
: ts.WriteLine "<ul>"
: For Each FolderItem In Folder.Items
: : If FolderItem.IsFolder Then
: : : Set SubFolder=FolderItem.GetFolder
: : : ts.WriteLine "<p>" & vbCrLf & "<big style=""font-weight:bolder;"">"
: : : ts.WriteLine SubFolder.Title
: : : ts.WriteLine "</big>"
: : : Call RecSrch(SubFolder)
: : : ts.WriteLine "</p>" & vbCrLf
: : ElseIf FolderItem.IsLink Then
: : : Set Link = wShell.CreateShortcut(FolderItem.Path)
: : : Line="<li><a href=""" & Link.TargetPath & """>" & FolderItem.name & "</a></li><br>"
: : ElseIf FolderItem.IsFileSystem Then
: : : Line="<li><a href=""" & FolderItem.path & """>" & FolderItem.name & "</a></li><br>"
: : Else
: : : str=Folder.GetDetailsOf(FolderItem,0)
: : : If str<>"" Then
: : : : Line="<li><a href=""" & str & """>" & FolderItem.name & "</a></li><br>"
: : : Else
: : : : Line="<li><a href=""" & FolderItem.path & """>" & FolderItem.name & "</a></li><br>"
: : : End If
: : End If
: If line<>"" Then
: : On Error Resume Next
: : ts.WriteLine line
: : If Err<>0 Then
: : : On Error GoTo 0
: : : For n=1 To Len(line)
: : : char=Mid(line,n,1)
: : : On Error Resume Next
: : : ts.Write char
: : : If Err<>0 Then
: : : : On Error GoTo 0
: : : : ts.Write Escape(char)
: : : : Else
: : : : On Error GoTo 0
: : : End If
: : : Next
: : : ts.WriteLine ""
: : : Else
: : : On Error GoTo 0
: : End If
: : line=""
: End If
Next
ts.WriteLine "</ul>"
End Sub



残る課題は「/」で終わる URL が ieの仕様(?)によって削られてしまう模様なので、その対策と、
Unicode で書き出された HTML は Explorer の文字列検索には列挙されないようなので、やはり
文書自体を shift_jis に再変換する必要があるのかな…、というところです。

@IT:Windows TIPS -- Tips:ファイルの文字コードを変換する
http://www.atmarkit.co.jp/fwin2k/win2ktips/312charcode/charcode.html


> ばんのしゃーによかばんた さん 2004年 07月 06日 15時 15分 35秒
の、文字コードについてのご説明の意図するものがようやく判りかけてきた感じです。


あ、それから、URL の Sort をしながら書き出す工夫とかもしたいと思っております。
(現時点では思っているだけなのですが… 笑)

魔界の仮面弁士 さん 2004年 07月 07日 15時 02分 41秒

》 ふみふみ さん
> ts.WriteLine "<meta http-equiv='content-type' content='text/html; charset=shift_jis'>" & vbCrLf
のように Single Quate でも良いのかとも思いましたが、Double Quate にしてみます。
あ、「'」でもOKですよ。
VBSからであれば、「'」の方が楽でしょうね。

> ts.WriteLine "<meta http-equiv=""" & "content-type""" & " content=""" & "text/html; charset=shift_jis""" & ">"
ts.WriteLine "<meta http-equiv=""content-type"" content=""text/html; charset=shift_jis"">"
とも書けますね。

ふみふみ さん 2004年 07月 07日 05時 51分 50秒

> ばんのしゃーによかばんた さん 2004年 07月 06日 21時 06分 55秒

9x系のOS と NT5.x系のOS では、そういった実装の違いもあるのですね。
大変勉強させて頂きました。



> 魔界の仮面弁士 さん 2004年 07月 06日 22時 19分 06秒
>
> HTMLの仕様から言えば、前者は指定できない事になっています。
> 「Unicode」ではなく、「UTF-16」等であれば認められていますけれども。

魔界の仮面弁士 さん、こんにちは。ご指導大変有難うございます。
宜しくお願い致します。


> Charsetに指定できる文字コードは、IANA という組織にて管理されており、
> 下記に登録されている物だけが指定できる仕様となっています。
>
> http://www.iana.org/assignments/character-sets

拝見してきました。
ひとまず、ページの最終行までスクロールしてみました。
…、あまり良く判っておりません…。(笑)


> ついでに書くと、
> 「<meta http-equiv=content-type content=text/html; charset=shift_jis>」
> ではなく、
> 「<meta http-equiv="content-type" content="text/html; charset=shift_jis">」
> のように出力する方が適切です。

ts.WriteLine "<meta http-equiv='content-type' content='text/html; charset=shift_jis'>" & vbCrLf
のように Single Quate でも良いのかとも思いましたが、Double Quate にしてみます。
ts.WriteLine "<meta http-equiv=""" & "content-type""" & " content=""" & "text/html; charset=shift_jis""" & ">"

重ね重ね、有難うございます。



> クマ さん 2004年 07月 07日 00時 04分 05秒

クマ さん、こんにちは。


> 対象ウィンドウがアクティブになると同時に他のウィンドウがアクティブになると、タスクバー内のタイトル(画面したにある)が青く点滅して、最前面に出てこなくなる場合があります。

HKEY_CURRENT_USER\Control Panel\Desktop
以下に存在する
"ForegroundFlashCount"

"ForegroundLockTimeout"
について検索してみて下さい。


> 対象ウィンドウだけを確実にアクティブする方法

「窓の手」
http://www.asahi-net.or.jp/~vr4m-ikw/
というツールの「ウィンドウ」タブ→「タスクバー上で点滅させない」に Check On すると回避可能
かも知れませんが、いかがでしょうか…。

クマ さん 2004年 07月 07日 00時 04分 05秒

WSHを使用してブラウザIE5.5のウィンドウをアクティブしたいと思っております。
使用OSは、windows2000です。

AppActivateメソッドを使用して実現していますが、
対象ウィンドウがアクティブになると同時に他のウィンドウがアクティブになると、タスクバー内のタイトル(画面したにある)が青く点滅して、最前面に出てこなくなる場合があります。

たとえば、以下のスクリプトを実行してみてください。
ウィンドウは、ブラウザでも、フォルダでもファイルでもかまいません。
Set wShell=CreateObject("WScript.Shell")
wShell.AppActivate("titleA")
wShell.AppActivate("titleB")
wShell.AppActivate("titleA")

対象ウィンドウだけを確実にアクティブする方法をご存知の方、
ご教授お願い致します。

実際には、上記の例のようなサンプルスクリプトのような処理ましませんが、私が遭遇した現象を再現させるものです。

以上です。宜しくお願い致します。

江戸川のサル さん 2004年 07月 06日 23時 39分 19秒

》 魔界の仮面弁士 さん
大変参考に成りました。
色々教えて頂きまして有難うございます。

m(_ _)m (大感謝)

魔界の仮面弁士 さん 2004年 07月 06日 22時 27分 57秒

》 江戸川のサル さん
> InputBoxの「OK」「キャンセル」のボタン表示を、
> 任意の表示(例えば「決定」「戻る」の様)に表示させる事は難しいでしょうか?

残念ながら、表示を変えるための標準的な方法は用意されていません。

魔界の仮面弁士 さん 2004年 07月 06日 22時 19分 06秒

》 ふみふみ さん
> ts.WriteLine "<meta http-equiv=content-type content=text/html; charset=unicode>"
> ではなくて、
> ts.WriteLine "<meta http-equiv=content-type content=text/html; charset=shift_jis>"
> のほうが良いのでしょうか…。

HTMLの仕様から言えば、前者は指定できない事になっています。
「Unicode」ではなく、「UTF-16」等であれば認められていますけれども。

Charsetに指定できる文字コードは、IANA という組織にて管理されており、
下記に登録されている物だけが指定できる仕様となっています。

(ブラウザが、その文字コードに対応しているかどうかは別問題ですけれどね)
http://www.iana.org/assignments/character-sets


ついでに書くと、
「<meta http-equiv=content-type content=text/html; charset=shift_jis>」
ではなく、
「<meta http-equiv="content-type" content="text/html; charset=shift_jis">」
のように出力する方が適切です。

江戸川のサル さん 2004年 07月 06日 21時 47分 31秒

》 魔界の仮面弁士 さん
有難うございました。
大変感謝です。m(_ _)m

ちなみに・・・なんですが、
InputBoxの「OK」「キャンセル」のボタン表示を、
任意の表示(例えば「決定」「戻る」の様)に表示させる事は難しいでしょうか?

ばんのしゃーによかばんた さん 2004年 07月 06日 21時 06分 55秒

>管理人むたぐち さん 2004年 07月 06日 13時 52分 14秒
>せっかくですので、ばんのしゃーによかばんたさんとふみふみさんによる
>改良部分をマージして、ダウンロードページにて再公開させていただいて
>よろしいでしょうか?>ばんのしゃーによかばんたさん&ふみふみさん

パブリックドメインですので、是非そうしてください。

>あと思ったんですが、今後はこういう作業をWikiでやると効率化が
>図れるかもしれませんね。

Wikiのほうはあまり見てないもので。。。

>管理人むたぐち さん 2004年 06月 14日 18時 42分 40秒
>余談ですが、ファイル名を指定して実行でshell:cookiesとか便利ですよね〜。
>shell:sendto、shell:system、shell:sendto、shell:favorites、shell:startup
>なんかを良く使います。

shell:favoritesとshell:historyについては
――――――――――――――――――――――――――――――――――――――
Set ie=CreateObject("InternetExplorer.Application")
ie.Visible=True
ie.ShowBrowserBar "{EFA24E61-B078-11d0-89E4-00C04FC9E26E}",True 'Favorites
――――――――――――――――――――――――――――――――――――――
Set ie=CreateObject("InternetExplorer.Application")
ie.Visible=True
ie.ShowBrowserBar "{EFA24E62-B078-11D0-89E4-00C04FC9E26E}",True 'History
――――――――――――――――――――――――――――――――――――――
のほうが便利です。

それからFavoritesですが、その画像ビュワー的使用法です。
ここにフォルダのショートカットをくっつけて、
イメージファイルがIEに関連付けられていると、
FavoritesBarでイメージファイルを選択すると、
右の窓(IE)にイメージが表示されます。
98ではフォルダのショートカットが使えないので、
レジストリのFavoritesの場所を一時的に書き換えます。
――――――――――――――――――――――――――――――――――――――
Set wShell=CreateObject("WScript.Shell")
UserFavorites=wShell.RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Favorites")
Call wShell.RegWrite("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Favorites","D:\Folder","REG_SZ")
Set ie=CreateObject("InternetExplorer.Application")
ie.Visible=True
ie.ShowBrowserBar "{EFA24E61-B078-11d0-89E4-00C04FC9E26E}",True 'Favorites
Call wShell.RegWrite("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Favorites",UserFavorites,"REG_SZ")
――――――――――――――――――――――――――――――――――――――

ふみふみ さん 2004年 07月 06日 17時 38分 27秒

> 管理人むたぐち さん 2004年 07月 06日 13時 52分 14秒
>
> せっかくですので、ばんのしゃーによかばんたさんとふみふみさんによる
> 改良部分をマージして、ダウンロードページにて再公開させていただいて
> よろしいでしょうか?>ばんのしゃーによかばんたさん&ふみふみさん

ご研究して頂いたものを利用させて頂いているだけの身ですが、大変光栄に存知上げます。
Style の body 部分で、font-color は誤りでした。 color に直せば有効でした。
それと、</head> を記述し忘れました。(爆)


> あと思ったんですが、今後はこういう作業をWikiでやると効率化が
> 図れるかもしれませんね。

はい、拝見してきます。




> ばんのしゃーによかばんた さん 2004年 07月 06日 15時 15分 35秒

> (a) titleに(TM)などの非SJIS文字が含まれる場合、
> 対策 Unicodeで出力するか、問題の文字をEscapeする。

Set ts=fso.CreateTextFile(strPath,True,True)

If line<>"" Then
.
.
.
End If
の部分ですね。

> いったん、Unicodeで出力して、IEで開いて、Shift_JISで保存する、という手もあります。

IE の「名前を付けて保存」だと HTML の Tag の改行が気になったりすることもありまして…。(笑)


> (b) titleが日本語なのに、charsetが指定されてない場合、

ts.WriteLine "<meta http-equiv=content-type content=text/html; charset=unicode>"
ではなくて、
ts.WriteLine "<meta http-equiv=content-type content=text/html; charset=shift_jis>"
のほうが良いのでしょうか…。


> 予防(IE個別) 文字化けしたままIEを閉じると、履歴に文字化けしたまま残るので、
> エンコードを直してから終わる。

そういう回避策もあるのですね。
まったく気が付きませんでした。


> まず、何語に化けているのか、不明。Unicodeの割り当てマップがあれば分かるかも。
> でも大変。何語か分かれば、ADOのStreamなどを使って、unicodeから何語かに変換。

該当する URL のドメインから IP の割り当て状況を検索し、登録されている国が判ればおおよその
使用されている言語は推測できますか?


いろいろとご指導頂きまして、誠に有難うございます。

ばんのしゃーによかばんた さん 2004年 07月 06日 15時 15分 35秒

>管理人むたぐち さん 2004年 07月 04日 12時 00分 28秒
>ふみふみさんのご指摘の通り、FolderItem.name、つまりHTMLのtitleの文字列、
>あるいはtitleがない場合にはURLに含まれる
>Unicode文字参照、もしくはUTF-8の文字列がURLエンコードされたものが、
>Unicodeに変換された状態で格納されているせいだと思います。
>それが正しく変換されている場合は問題ない(?)ようですが、
>変換にミスって文字化けしていると駄目みたいです。

問題と対策を整理すると、

(a) titleに(TM)などの非SJIS文字が含まれる場合、
対策 Unicodeで出力するか、問題の文字をEscapeする。
いったん、Unicodeで出力して、IEで開いて、Shift_JISで保存する、という手もあります。

(b) titleが日本語なのに、charsetが指定されてない場合、
url2htm.vbsがこれに該当してたんですね。「お気に入りリスト」は普通の98では
問題ないが、2000などではベトナム語に自動判定されて、文字化けする。

予防(HTML個別)
ts.WriteLine "<meta http-equiv=content-type content=text/html; charset=shift_jis>"
を入れておく。

予防(IE恒久) エンコード-自動選択にチェックが入っていると駄目。外しておく。

予防(IE個別) 文字化けしたままIEを閉じると、履歴に文字化けしたまま残るので、
エンコードを直してから終わる。

対策 いったん化けたものを自動で元に戻すのは難しそう。
まず、何語に化けているのか、不明。Unicodeの割り当てマップがあれば分かるかも。
でも大変。何語か分かれば、ADOのStreamなどを使って、unicodeから何語かに変換。
それより何より、化けているのか、単に非SJIS文字が含まれているだけなのかの別。
どこからどこまで化けているのかの判定など。

手作業でよければ、いったんUnicodeで出力したものを、IEで開いて、ベトナム語で
保存する。NotePadで開いて日本語があれば、そこが文字化け箇所です。

(c) titleがない場合、
未検討です。

管理人むたぐち さん 2004年 07月 06日 13時 52分 14秒

To: つちや さん

お久しぶりです、そしてありがとうございます。

> wikiって、コラボレーションツールとして使うより、
> 更新を楽にするために個人用サイトで使った方が、
> なんだか発展していくような気も・・・(ぼそぼそ)

そういえば私もWikiを始めていたのでした。
しかしかなり放置してしまっていますね。
この掲示板とうまく共存させて行きたいと考えてはいるんですが…。
管理人が積極的に参加しないWikiは、活発に動かないのがセオリーという
感じです。今後は私も機会を見てコンテンツの拡充に努めたいと思ってます。

# 私、某所でブログなんぞも始めてたりもするんですがw WSHとかぜんぜん関係ないんですけど。

みなさんもスクリプトやコードの断片等、ここに貼るには量的にちょっと…
というものをお持ちなら、ぜひあちらを使ってください。
コードだけはあちらに貼って、この掲示板にはリンク(と要点の抽出)のみ
を記載するとかでも結構ですので。
(無論、強制ではありません。コードの全体がこの掲示板のログとして
残ることにも、もちろん意義があるからです)

また、ここの掲示板の内容を整理して分類していただくとかでも嬉しいですね。
(相変わらず他力本願ですが)
WSH/Windows Scriptに関係することなら、ページを新しく作っていただいても
一向に構いませんので。スクリプトファイルのアップロードなんかもできますよ。
(それくらいなら自分でサイトを作るよ、というのもあるわけですが)


To: ばんのしゃーによかばんた さん

> 単純にHTMLファイルをUnicodeで出力してやれば解決するのではありますまいか。

まさに目から鱗です。当方もこれでばっちりでした。
文字化けも文字化けを完全に再現したまま出力されてます。
これでほぼ修正は完成ですね。

せっかくですので、ばんのしゃーによかばんたさんとふみふみさんによる
改良部分をマージして、ダウンロードページにて再公開させていただいて
よろしいでしょうか?>ばんのしゃーによかばんたさん&ふみふみさん

あと思ったんですが、今後はこういう作業をWikiでやると効率化が
図れるかもしれませんね。

管理人むたぐち さん 2004年 07月 06日 13時 23分 01秒

ちょっとspam投稿が目に余るので手動で削除してみました。
今後は、BASP21のFTPオブジェクトを使って、削除スクリプトでも作りますw
http://bbq.uso800.net/ こういうのを使って門前払いとかも
してみたいんですけど、巻き添えが大量に発生しそうなので問題ですね。

            =-=-=-=-=-=-=-=-=-=-=

MSXML+WSCで、perlのXML::RSSモジュールもどきを作っています。
MSXMLもWSCも忘れかけているのでなかなか進んでませんが、
完成したらこちらで公開しようかと思っています。

ところで、FeedBack http://naoya.dyndns.org/feedback/ という、
RSS検索結果をRSSにして返すWebサービスがあるんですけど、
これに「WSH」を検索単語に入れて巡回させてます。
すると、よくhail2u.netさんのブログが引っかかります。
http://hail2u.net/blog/

Bookmarkletからクリップボードに文字列をコピー
http://hail2u.net/blog/coding/set_data_to_clipboard_from_bookmarklet.html とか面白いですよ。

RSS関係では超有名な方ですが、リンクページにうちのサイトがあって
ちょっと感激しました。

            =-=-=-=-=-=-=-=-=-=-=

Radium Software Development http://www.radiumsoftware.com/diary.html
あまりWSHとは関係ないんですが、このブログが面白くて
よく見てます。ゲームの開発者の方のブログです。
最近の記事では、"Compatibility"のシリーズが面白かったです。
MicrosoftのWindowsに対する上位互換性維持への意地が興味深いです。
そして私の大好きなゲームであるSimCityが関係していたとは。

            =-=-=-=-=-=-=-=-=-=-=

たまには私も、徒然なるままにとり止めのないことを書いてみました。

魔界の仮面弁士 さん 2004年 07月 06日 13時 01分 10秒

》 江戸川のサル さん
InputBox関数のキャンセル時には、「Empty 値」が返されますので、
VarType関数/TypeName関数/IsEmpty関数等で判定する事ができます。

Option Explicit
Dim Result
Result = InputBox("メッセージを入力してください。", "サンプル", "キャンセルを判定できます。")
If IsEmpty(Result) Then

MsgBox "キャンセルされました。", vbExclamation, "サンプル"

ElseIf Result = "" Then

MsgBox "空の文字列が入力されました。", vbInformation, "サンプル"

Else

MsgBox "「" & Result & "」と入力されました。", vbInformation, "サンプル"

End If


ちなみに、Excel VBA 等の InputBox関数の場合は、キャンセル時に
Emptyではなく、vbNullStringを返してきます。

If StrPtr(Result) = 0 Then
MsgBox "キャンセル"
End If

江戸川のサル さん 2004年 07月 06日 11時 34分 43秒

InputBoxを使った入力で「キャンセル」を検出する方法を教えて下さい。

ふみふみ さん 2004年 07月 05日 04時 40分 53秒

> ばんのしゃーによかばんた さん 2004年 07月 04日 23時 54分 44秒
> 単純にHTMLファイルをUnicodeで出力してやれば解決するのではありますまいか。
>
> Set ts=fso.CreateTextFile(strPath,True,True)

うわぁ〜、カンペキです〜。
HTML 自体を Unicode にしてやれば良かったのですか…。
「目からウロコがとれる」っていうのは、こういうことを言うのですねぇ〜。
私の数ヶ月間の悩みは何だったのでしょう…。(笑)



> Unicodeは嫌だ、ShiftJISがいいという向き

普段愛用させて頂いている TeraPad は Unicode にも対応しておりますので、編集には困りません。
従来からの「慣れ」の部分もあって親しんできた Sift-JIS なのですが、最近は Unicode によって
詳細な言語表示が可能とのことで Web でも多く用いられるようになった模様ですし、私個人的には
Sift-JIS にはこだわりません。
ただ、現在は確認はしていないのですが、Unicode には対応していない(?) 9x系のOS での動作は
どうなのでしょうね…。アプリケーションが対応していれば、特に問題はないのかも…?
サポートも終わっちゃってますし…。(爆)



> 原因文字だけEscapeして、可能な限り文字を表示します。
> 今回はSubだけ修正です。性能は劣化しないように工夫しています。

以下のように HTML Tag を修正させて頂いて、問題なく動作しております。

Set fso = WScript.CreateObject("Scripting.FileSystemObject")
set wShell = WScript.CreateObject("WScript.Shell")
Set Shell = WScript.CreateObject("Shell.Application")
Const ssfHISTORY = 34
Const ssfFAVORITES = 6
Set Folder=Shell.NameSpace(ssfHISTORY)
For Each arg In WScript.Arguments
If IsNumeric(arg) Then
Set Folder=Shell.NameSpace(CLng(arg))
Else
Set Folder=Shell.NameSpace(arg)
End If
Exit For
Next
strPath=Folder.Title & ".html"
Set ts=fso.CreateTextFile(strPath,True,True)
ts.WriteLine "<!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.0 Transitional//EN>"
ts.WriteLine "<html>" & vbCrLf & "<head>" & vbCrLf & "<title>" & Folder.Title & "</title>"
ts.WriteLine "<meta http-equiv=content-type content=text/html; charset=unicode>" & vbCrLf
ts.WriteLine "<style type=text/css>" & vbCrLf & "a:link {color:cornflowerblue;font:bolder;text-decoration:none;}" & vbCrLf & "a:visited {font:bolder;text-decoration:none;}" & vbCrLf & "a:hover {color:indigo;background-color:pink;}" & vbCrLf & "body {font-family:Tahoma; font-size:11px; font-color:gray;background-color:white;}" & vbCrLf & "</style>" & vbCrLf

ts.WriteLine "<body>" & vbCrLf

ts.WriteLine "<b>Top of File</b>" & vbCrLf

Call RecSrch(Folder)

ts.WriteLine vbCrLf & "<table><tr><td height=100></td></tr></table>"
ts.WriteLine vbCrLf & "<div align=center style=font-weight:bolder;>Special Thanks to : <a href=http://www.roy.hi-ho.ne.jp/mutaguchi/bbs/index.shtml title=管理人むたぐちさん&ばんのしゃーによかばんたさん有難うございますぅbyふみふみ>WSH Lab.掲示板</a></div>"
ts.WriteLine vbCrLf & "<div align=center style=font-weight:bolder;>Script Version 2004-07-05</div>"
ts.WriteLine vbCrLf & vbCrLf & vbCrLf & "<b>End of File</b>"
ts.WriteLine vbCrLf & "</body>" & vbCrLf & "</html>"
ts.Close

Sub RecSrch(Folder)
: ts.WriteLine "<ul>"
: For Each FolderItem In Folder.Items
: : If FolderItem.IsFolder Then
: : : Set SubFolder=FolderItem.GetFolder
: : : ts.WriteLine "<p>" & vbCrLf & "<big style=font-weight:bolder;>"
: : : ts.WriteLine SubFolder.Title
: : : ts.WriteLine "</big>"
: : : Call RecSrch(SubFolder)
: : : ts.WriteLine "</p>" & vbCrLf
: : ElseIf FolderItem.IsLink Then
: : : Set Link = wShell.CreateShortcut(FolderItem.Path)
: : : Line="<li><a href=""" & Link.TargetPath & """>" & FolderItem.name & "</a></li><br>"
: : ElseIf FolderItem.IsFileSystem Then
: : : Line="<li><a href=""" & FolderItem.path & """>" & FolderItem.name & "</a></li><br>"
: : Else
: : : str=Folder.GetDetailsOf(FolderItem,0)
: : : If str<>"" Then
: : : : Line="<li><a href=""" & str & """>" & FolderItem.name & "</a></li><br>"
: : : Else
: : : : Line="<li><a href=""" & FolderItem.path & """>" & FolderItem.name & "</a></li><br>"
: : : End If
: : End If
If line<>"" Then
On Error Resume Next
ts.WriteLine line
If Err<>0 Then
On Error GoTo 0
For n=1 To Len(line)
char=Mid(line,n,1)
On Error Resume Next
ts.Write char
If Err<>0 Then
On Error GoTo 0
ts.Write Escape(char)
Else
On Error GoTo 0
End If
Next
ts.WriteLine ""
Else
On Error GoTo 0
End If
line=""
End If
: Next
: ts.WriteLine "</ul>"
End Sub



上記の ts.WriteLine による Tag の書き出しでは、かなり効率の悪いことをさせていると自覚して
おります。(爆)
せっかく効率の良いものをご指導頂きながら、申し訳ございません。
これよりダイエットに挑戦させて頂きます。

重ね重ね、有難うございます。m(_ _)m

ばんのしゃーによかばんた さん 2004年 07月 04日 23時 54分 44秒

>管理人むたぐち さん 2004年 07月 04日 12時 00分 28秒
>> UIHelper.ImportExportFavoritesがあるのに、誰か使うでしょうか。
>いえいえ、Historyを出力するところに意義があるんですよこれは。

やっぱり。

>> 修正版です。※今度こそ収束して頂戴。
>残念ながら今回もダメでした。
>ふみふみさんのご指摘の通り、FolderItem.name、つまりHTMLのtitleの文字列、
>あるいはtitleがない場合にはURLに含まれる
>Unicode文字参照、もしくはUTF-8の文字列がURLエンコードされたものが、
>Unicodeに変換された状態で格納されているせいだと思います。
>それが正しく変換されている場合は問題ない(?)ようですが、
>変換にミスって文字化けしていると駄目みたいです。

なるほど、ShiftJISにないUnicode文字をShiftJISで出力しようとしてエラーに
なっていたのですね。そのせいか、historyのHTMLファイルを開くと日本語でない
自動選択になって、なんでかなぁと思っていたのですが、その関係かな。

それならそれで、
単純にHTMLファイルをUnicodeで出力してやれば解決するのではありますまいか。

Set ts=fso.CreateTextFile(strPath,True,True)

ですね。

Unicodeは嫌だ、ShiftJISがいいという向きには以下。

>仮想ファイルだけあって、文字化けしていてもファイルシステム的にはエラーに
>ならないわけで、なかなか始末におえない存在ですね。
>だったらこの仮想ファイルを実ファイルに変換すればどうかと思い、
>文字化けしたファイルを適当なフォルダに手動でコピーしてやると、
>ファイル名の文字化けは治りました。
>ならばこの手順を自動化しようと思い、Else部で
>oTempFol.CopyHere FolderItem,&H4
>(oTempFolはテンポラリフォルダのFolderオブジェクト)を実行してやると、
>なんと、WSHが強制終了してしまいました。もうお手上げかもしれません。

うーん、そこまでせずとも。

原因文字だけEscapeして、可能な限り文字を表示します。
今回はSubだけ修正です。性能は劣化しないように工夫しています。

Sub RecSrch(Folder)
: ts.WriteLine "<blockquote>"
: For Each FolderItem In Folder.Items
: : If FolderItem.IsFolder Then
: : : Set SubFolder=FolderItem.GetFolder
: : : ts.WriteLine "<p>" & SubFolder.Title & "<br>"
: : : Call RecSrch(SubFolder)
: : : ts.WriteLine "</p>"
: : ElseIf FolderItem.IsLink Then
: : : Set Link = wShell.CreateShortcut(FolderItem.Path)
: : : Line="<a href=""" & Link.TargetPath & """>" & FolderItem.name & "</a><br>"
: : ElseIf FolderItem.IsFileSystem Then
: : : : Line="<a href=""" & FolderItem.path & """>" & FolderItem.name & "</a><br>"
: : Else
: : : str=Folder.GetDetailsOf(FolderItem,0)
: : : If str<>"" Then
: : : : Line="<a href=""" & str & """>" & FolderItem.name & "</a><br>"
: : : Else
: : : : Line="<a href=""" & FolderItem.path & """>" & FolderItem.name & "</a><br>"
: : : End If
: : End If
If line<>"" Then
On Error Resume Next
ts.WriteLine line
If Err<>0 Then
On Error GoTo 0
For n=1 To Len(line)
char=Mid(line,n,1)
On Error Resume Next
ts.Write char
If Err<>0 Then
On Error GoTo 0
ts.Write Escape(char)
Else
On Error GoTo 0
End If
Next
ts.WriteLine ""
Else
On Error GoTo 0
End If
line=""
End If
: Next
: ts.WriteLine "</blockquote>"
End Sub

>ちなみにこのコードのデバッグをしていて気づいたんですが、
>Historyフォルダの場合、RecSrchプロシージャ内の
>: : ElseIf FolderItem.IsLink Then
>と
>: : ElseIf FolderItem.IsFileSystem Then
>は、スルーされて、全部Elseが実行されてました。
>履歴のアイテムにはIsLinkが通用しないようです。

そうなんです。これらはFavorites用なんです。

つちや さん 2004年 07月 04日 21時 10分 03秒

Windows Updateの件はちょっとあせりましたね。
Sleipnirでページを開いて、リンクされてあるファイルをダウンロードしたい時なんか、
結構、ADODB.Streamって重宝してたもので。
それから文字コード変換も手軽にできてよかったし。

Updateしてもスクリプトに影響がないことを確認して、えがった、えがった。

あと、メインサイトをpukiwikiの方にしようと思っています。
http://cgi.f47.aaacafe.ne.jp/~kajika/pukiwiki14/pukiwiki.php
まだできたてで、ぼちぼちやってる段階ですが、よろしかったらおいでませ。
(編集には認証が必要で、個人用にしてますが、、、)

wikiって、コラボレーションツールとして使うより、
更新を楽にするために個人用サイトで使った方が、
なんだか発展していくような気も・・・(ぼそぼそ)

つちや さん 2004年 07月 04日 20時 41分 47秒
URL:http://cgi.f47.aaacafe.ne.jp/~kajika/pukiwiki14/pukiwiki.php

ごぶさたしております。
遅ればせながら、
むたぐちさん、おめでとうございます。

でてきたついでのスクリプトですが、
最近重宝しているのはディスククリーンアップの実行で、あらかじめ

CreateObject("WScript.Shell").Run "cleanmgr /sageset:100"
'100は0〜65535の任意の数

で設定しておいて(設定は一度でよい)、

CreateObject("WScript.Shell").Run "cleanmgr /sagerun:100"

で実行するというものです。
ではでは。

ふみふみ さん 2004年 07月 04日 14時 17分 34秒

> 管理人むたぐち さん 2004年 07月 04日 12時 29分 13秒

できましたっ!!
有難うございますっ!!


> よくよく考えれば、文字化けしたtitleを無理して取得する必要など
> 何もなかったのでした

…、…、…、そうなのですね…。
約2ヶ月間の検索の意義も空しく…、まったくそのとおりのようで…。(笑)
いろいろと「役立たずな知識」は増えましたが…。(爆)


> というわけで、Else部分を次のように書き換え。
> エラーが発生した場合は、titleがおかしいとみなして、
> titleはURLと同一にして出力します。

はい、Error となってまったく取得できないよりも、Title が判らなくても正常に終わってくれれば
問題はありません。
気になれば、手作業でも修正ができます。
本当に有難うございます。

長かったぁ…、この Script を利用させて頂くようになってから数年間、一時は PC から離れた時期
もありましたが、いつも気がかりになっておりましたので、お礼のしかたも思いつきません。
本当に有難うございます。



以下の記述で Error はなくなりました。

Set fso = WScript.CreateObject("Scripting.FileSystemObject")
set wShell = WScript.CreateObject("WScript.Shell")
Set Shell = WScript.CreateObject("Shell.Application")
Const ssfHISTORY = 34
Set Folder=Shell.NameSpace(ssfHISTORY)
For Each arg In WScript.Arguments
If IsNumeric(arg) Then
Set Folder=Shell.NameSpace(CLng(arg))
Else
Set Folder=Shell.NameSpace(arg)
End If
Exit For
Next
strPath=Folder.Title & ".html"
Set ts=fso.CreateTextFile(strPath,True)
ts.WriteLine "<html><head><title>" & Folder.Title & "</title></head><body>"
Call RecSrch(Folder)
ts.WriteLine "</body></html>"
ts.Close
Sub RecSrch(Folder)
: ts.WriteLine "<blockquote>"
: For Each FolderItem In Folder.Items
: : If FolderItem.IsFolder Then
: : : Set SubFolder=FolderItem.GetFolder
: : : ts.WriteLine "<p>" & SubFolder.Title & "<br>"
: : : Call RecSrch(SubFolder)
: : : ts.WriteLine "</p>"
: : ElseIf FolderItem.IsLink Then
: : : Set Link = wShell.CreateShortcut(FolderItem.Path)
: : : ts.WriteLine "<a href=""" & Link.TargetPath & """>" & FolderItem.name & "</a><br>"
: : ElseIf FolderItem.IsFileSystem Then
: : : ts.WriteLine "<a href=""" & FolderItem.path & """>" & FolderItem.name & "</a><br>"
: : Else
: : : str=Folder.GetDetailsOf(FolderItem,0)
: : : on error resume next
: : : If str<>"" Then
: : : : ts.WriteLine "<a href=""" & str & """>" & FolderItem.name & "</a><br>"
: : : Else
: : : : ts.WriteLine "<a href=""" & FolderItem.path & """>" & FolderItem.name & "</a><br>"
: : : End If
: : : If Err.Number<>0 Then
: : : : ts.WriteLine "<a href=""" & str & """>" & str & "</a><br>"
: : : : Err.Clear
: : : End If
: : : on error goto 0
: : End If
: Next
: ts.WriteLine "</blockquote>"
End Sub


あとは、HTML Tag を編集して Design を整えることにさせて頂きます。
実は
: : : on error resume next
を記述し忘れて 30分程度悩んだのは秘密にしておいて下さい。(笑)



> Internet Explorer で ADODB.Stream オブジェクトを無効にする方法
> http://www.microsoft.com/japan/security/incident/adostream.mspx

これについて、Windows NTBugtraq Mailing List に、以下のような投稿もありました。

Registry Fix For Variant of Scob
http://www.ntbugtraq.com/default.asp?pid=36&sid=1&A2=ind0407&L=ntbugtraq&F=P&S=&P=670

Scob の対策として Shell.Application にも kill bit を設定するというものですが ADODB.Stream
と同様に w2k sp4 + ie6sp1 環境での Local VBS からは問題なく利用できるように見えます。
ただ、Webform のようなものからは呼び出せなくなるのかも…?



大変助けて頂きました。有難うございます。
益々のご活躍をご期待申し上げます。

管理者により削除 さん (管理者により削除) 2004年 07月 04日 13時 19分 06秒

管理者により削除

管理人むたぐち さん 2004年 07月 04日 12時 29分 13秒

よくよく考えれば、文字化けしたtitleを無理して取得する必要など
何もなかったのでした。

というわけで、Else部分を次のように書き換え。
エラーが発生した場合は、titleがおかしいとみなして、
titleはURLと同一にして出力します。

: : : str=Folder.GetDetailsOf(FolderItem,0)
: : : on error resume next
: : : If str<>"" Then
: : : : ts.WriteLine "<a href=""" & str & """>" & FolderItem.name & "</a><br>"
: : : Else
: : : : ts.WriteLine "<a href=""" & FolderItem.path & """>" & FolderItem.name & "</a><br>"
: : : End If
: : : If Err.Number<>0 Then
: : : : ts.WriteLine "<a href=""" & str & """>" & str & "</a><br>"
: : : : Err.Clear
: : : End If
: : : on error goto 0

管理人むたぐち さん 2004年 07月 04日 12時 00分 28秒

Internet Explorer で ADODB.Stream オブジェクトを無効にする方法
http://www.microsoft.com/japan/security/incident/adostream.mspx

昨日、Windows Updateが英語で修正プログラムの通知をしてきたので
何かと思ったんですが、内容は、このレジストリ修正だったようです。
Download.Ject対策らしいですね。

参考:
Microsoft、先週の IIS 攻撃に関連する修正プログラムを公開
http://japan.internet.com/webtech/20040703/11.html

このパッチを適用すると、当然IEではADODB.Streamが使えなくなってしまいますが、
WSHからは問題なく使用できるようです。


To: いりや さん、shobohn さん、【おじさま】 さん、ばんのしゃーによかばんた さん、ふみふみ さん

みなさん、どうもありがとうございます。
はっきり言って今回の受賞は、この掲示板の投稿者のみなさまのバックアップのお陰です。
今後ともよろしくお願いしますね。


To: いりや さん

> http://ll.jus.or.jp/llw2004/

"Lightweight Language Weekend"ですか。こんな集まりがあるとは知りませんでした。
「消え行くスクリプト言語」であるVBScriptがないのは、時代の流れでしょうかねえ。


To: ばんのしゃーによかばんた さん

> UIHelper.ImportExportFavoritesがあるのに、誰か使うでしょうか。

いえいえ、Historyを出力するところに意義があるんですよこれは。

> 修正版です。※今度こそ収束して頂戴。

残念ながら今回もダメでした。
: : : : ts.WriteLine "<a href=""" & str & """>" & FolderItem.name & "</a><br>"
でエラーです。

ふみふみさんのご指摘の通り、FolderItem.name、つまりHTMLのtitleの文字列、
あるいはtitleがない場合にはURLに含まれる
Unicode文字参照、もしくはUTF-8の文字列がURLエンコードされたものが、
Unicodeに変換された状態で格納されているせいだと思います。
それが正しく変換されている場合は問題ない(?)ようですが、
変換にミスって文字化けしていると駄目みたいです。

仮想ファイルだけあって、文字化けしていてもファイルシステム的にはエラーに
ならないわけで、なかなか始末におえない存在ですね。

だったらこの仮想ファイルを実ファイルに変換すればどうかと思い、
文字化けしたファイルを適当なフォルダに手動でコピーしてやると、
ファイル名の文字化けは治りました。

ならばこの手順を自動化しようと思い、Else部で
oTempFol.CopyHere FolderItem,&H4
(oTempFolはテンポラリフォルダのFolderオブジェクト)を実行してやると、
なんと、WSHが強制終了してしまいました。もうお手上げかもしれません。

ちなみにこのコードのデバッグをしていて気づいたんですが、
Historyフォルダの場合、RecSrchプロシージャ内の
: : ElseIf FolderItem.IsLink Then

: : ElseIf FolderItem.IsFileSystem Then
は、スルーされて、全部Elseが実行されてました。
履歴のアイテムにはIsLinkが通用しないようです。

ふみふみ さん 2004年 07月 04日 07時 51分 31秒

管理人むたぐち さん、いつもお世話になっております。

> 管理人むたぐち さん 2004年 07月 02日 07時 44分 00秒
> トップページにも書きましたが、このたび、昨年1年間のこの掲示板での
> 活動が認められ、この私がMicrosoft MVP for Visual Developer - Scriptingに
> 認定されました。

Microsoft MVP for Visual Developer - Scripting プログラムアワード、おめでとうございます!!
益々のご活躍の旨、心からお慶びを申し上げますとともに今後共々、ご指導ご鞭撻を頂けますよう、
併せてお願いを申し上げます。



ばんのしゃーによかばんた さん、こんにちは。
お返事が大変遅くなりまして、申し訳ございません。
Script の重ねての改良、本当に有難うございます〜。
感激しております。スゴイです。

ばんのしゃーによかばんた さん 2004年 07月 03日 02時 12分 40秒
のスクリプトを実行してみました。
コメント文は Cut して、履歴の取得をしてみた結果をご報告させて頂きます。
実行環境は w2k sp4 + ie6 sp1 です。

> Set fso = WScript.CreateObject("Scripting.FileSystemObject")
> set wShell = WScript.CreateObject("WScript.Shell")
> Set Shell = WScript.CreateObject("Shell.Application")
> Const ssfHISTORY = 34
> Const ssfFAVORITES = 6
> Set Folder=Shell.NameSpace(ssfHISTORY)
> For Each arg In WScript.Arguments
> If IsNumeric(arg) Then
> Set Folder=Shell.NameSpace(CLng(arg))
> Else
> Set Folder=Shell.NameSpace(arg)
> End If
> Exit For
> Next
> strPath=Folder.Title & ".html"
> Set ts=fso.CreateTextFile(strPath,True)
> ts.WriteLine "<html><head><title>" & Folder.Title & "</title></head><body>"
> Call RecSrch(Folder)
> ts.WriteLine "</body></html>"
> ts.Close
> Sub RecSrch(Folder)
> ts.WriteLine "<blockquote>"
> For Each FolderItem In Folder.Items
> If FolderItem.IsFolder Then
> Set SubFolder=FolderItem.GetFolder
> ts.WriteLine "<p>" & SubFolder.Title & "<br>"
> Call RecSrch(SubFolder)
> ts.WriteLine "</p>"
> ElseIf FolderItem.IsLink Then
> Set Link = wShell.CreateShortcut(FolderItem.Path)
> ts.WriteLine "<a href=""" & Link.TargetPath & """>" & FolderItem.name & "</a><br>"
> ElseIf FolderItem.IsFileSystem Then
> ts.WriteLine "<a href=""" & FolderItem.path & """>" & FolderItem.name & "</a><br>"
> Else
> str=Folder.GetDetailsOf(FolderItem,0)
> If str<>"" Then
> ts.WriteLine "<a href=""" & str & """>" & FolderItem.name & "</a><br>"
> Else
> ts.WriteLine "<a href=""" & FolderItem.path & """>" & FolderItem.name & "</a><br>"
> End If
> End If
> Next
> ts.WriteLine "</blockquote>"
> End Sub

大変有難うございますっ!!
スゴイですっ!!
感激ですっ!!
Google での検索結果は、正常に取得可能となりましたっ!!



実はあれ以来 URL エンコードの回避問題を Google で検索しまくっておりました。
…、でも、溜まった「検索の履歴」を書き出す手間にも追われておりました。(笑)
…、そして、大した成果もありませんでした…。(涙)

ところで、また他の問題が発生して弱っております。(爆)
以下の URL を閲覧した後にはエラーが発生しました。

SecuriTeam_com ? (Main Page)
http://www.securiteam.com/

HTML ソースの記述の中での、これが原因かと思われます。
> <title>SecuriTeam.com &#153; (Main Page)</title>

表示されたエラー文は以下のものです。

> スクリプト: C:\Work\History.vbs
> 行: 37
> 文字: 9
> エラー: プロシージャの呼び出し、または引数が不正です。
> コード: 800A0005
> ソース: Microsoft VBScript 実行時エラー



それにしても、皆様のご研究及びご活躍のおかげさまをもちまして、以前よりも格段に作業効率が
改善できるようになりました。
お礼のお伝えのしかたも思いつきません。
本当に有難うございます。

…、これからも宜しくご指導を頂けますよう、皆様には重ねてお願いを申し上げます。


管理人むたぐち さん、本当におめでとうございます。

Return