管理人むたぐち さん 2004年 11月 08日 20時 36分 01秒

ちなみにアドレスは、
ソーシャル・ネットワーキングサイト [mixi(ミクシィ)]
http://mixi.jp/
です。

管理人むたぐち さん 2004年 11月 08日 20時 35分 21秒

とある方のご紹介で、私もmixiを始めました。
ここの常連さんで、私や他のMVPの方々とコンタクトを取りたい方、
私にメールでご一報くださいませ。
ご紹介させていただきます。

ばんのしゃーによかばんた さん 2004年 11月 08日 16時 30分 46秒

>管理人むたぐち さん 2004年 11月 06日 17時 10分 34秒
>> ※検索結果をテキストファイルにするにはどうします?
>これ、困ります。
>検索結果を全選択して、バッチファイルなりスクリプトなりに「送る」を
>実行しても、エクスプローラの引数の文字数制限にひっかかったりしますし。

PowerToyのSend To Clipboard as Nameが使えればよいのでしょうが、
XPでも動くのでしょうか。試してません。

で、私は、以下を使ってます。

>ばんのしゃーによかばんた さん 2004年 07月 21日 13時 13分 27秒
>ファイル(複数可)を、アイコンでなく、ウィンドウにドロップすると、
>フルパス名のリストをクリップボードに入れるHTAです。
>ToClip.HTA

でも、余りに数が多いと、異常に時間が掛かったり、ハングしたりして、変です。

※全選択は間違ってEnterキーでも押そうものなら悲惨なことに。かなり危険です。

やはり、

>WSHから検索結果のFileListにアクセスして…とかできるかもしれませんね。

このアプローチが、筋がよさそうです。

ViewHTML.VBSのie.DocumentのところをIShellFolderViewDual2にかえて、
.Folder.Itemsを書き出す。

ViewFolder.VBS 「お気に入り」から実行します。
――――――――――――――――――――――――――――――――――――――
Option Explicit
Dim fso
Dim wShell
Dim Shell
Dim ie
Dim File
Dim TempName
Dim FolderItem

Set fso=CreateObject("Scripting.FileSystemObject")
Set wShell=CreateObject("WScript.Shell")
Set Shell=CreateObject("Shell.Application")

Set ie=Shell.Windows.Item
If ie Is Nothing Then
: WScript.Echo "No Explorer Found."
: WScript.Quit
End If
If InStr(TypeName(ie.Document),"IShellFolderView")=0 Then
: WScript.Echo "Explorer is not active."
: WScript.Quit
End If

TempName=fso.BuildPath(fso.GetSpecialFolder(2).Path,fso.GetTempName())
Set File=fso.CreateTextFile(TempName)
For Each FolderItem In ie.Document.Folder.Items
: File.WriteLine FolderItem.Path
Next
File.Close
Call wShell.Run("NotePad.Exe " & TempName,,True)
fso.DeleteFile TempName

bb さん 2004年 11月 08日 08時 44分 25秒

レジストリの書込みで知っている方がいたら教えて下さい。
1つのregファイルを使って複数のPCに書き込みたいのですが例えば
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Network\{xxx}\{yyy}\Connection] で最後の\Connection の下に書込みしたいのですがxxx、yyyはPCによって異なります。
ここをワイルドカードみたいにできないでしょうか? *や%で試しましたがだめでした。

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

GetStandardStream()の、何か応用がないものか、考えてみたのですが、
結局、従来方式のほうがよいものしか思い付きませんでした。
そういうサンプル。moreとteeです。IEのWindowに出すところが味噌です。
――――――――――――――――――――――――――――――――――――――
Option Explicit
Dim ie
Dim StdIn
Dim line

Set ie=CreateObject("InternetExplorer.Application")
ie.Visible=True
ie.Navigate "about:blank"
Do While ie.Busy Or ie.ReadyState<>4
WScript.Sleep 100
Loop
Set StdIn=WScript.StdIn
Do While Not StdIn.AtEndOfStream
line=StdIn.ReadLine()
call ie.document.body.insertAdjacentText("BeforeEnd",line & vbCRLF)
WScript.StdOut.WriteLine line 'tee/コメントアウトするとmore
Loop
call ie.document.body.insertAdjacentText("BeforeEnd","<EOF>")
WScript.Quit

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

>管理人むたぐち さん 2004年 10月 05日 11時 45分 56秒
>To: MOG さん
>> ある任意のコマンド(aa.cmd(仮称))を実行するように記述する場合、
>> コマンドを実行するユーザーを、現時点でWindows上でログオンしている
>> ユーザーではなく、どんなときでも「LocalSystem」ユーザーで起動する
>> ように記述する方法はありませんでしょうか。
>cmd /c runas /user:computername\LocalSystem aa.cmd
>のように、runasコマンドを使えば良いでしょう。
>実行はWshShell.Runなどで。
>ただし、パスワードを入力する必要があります。
>echo password|runas...のようにしてもダメみたいですね。
>何か方法はありますでしょうか

Set wShell=CreateObject("Wscript.Shell")
wShell.Run "CMD.EXE /CRunAs /user:computername\LocalSystem aa.cmd"
Do While Not wShell.AppActivate("C:\Windows\System32\CMD.EXE")
WScript.Sleep 100
Loop
WScript.Sleep 100 'タイミングが重要。
wShell.SendKeys "password{ENTER}"

は、どうでしょう。

※ポイントは入力のタイミングのようです。どうも、入力ECHOを伏せるため、
プロンプトを出した後に標準入力とは別にコンソールをオープンして読み取る。
プロンプトを出す前に標準入力に入力があるとエラー。みたい。

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

命題[P5]
wShell.ExecでないコマンドラインからはWScriptでStdIn/StdOutは使えない。は正しいか。

コマンドライン
――――――――――――――――――――――――――――――――――――――
echo a|wscript getstdin.vbs|more
――――――――――――――――――――――――――――――――――――――

GetStdIn.vbs
――――――――――――――――――――――――――――――――――――――
Set fso=CreateObject("Scripting.FileSystemObject")
Set stdin=fso.GetStandardStream(0)
Set stdout=fso.GetStandardStream(1)
stdout.WriteLine WScript.FullName
Do While Not stdin.AtEndOfStream
line=stdin.ReadLine()
stdout.WriteLine line
Loop
――――――――――――――――――――――――――――――――――――――

WScript.StdIn/StdOutは駄目。
fso.GetStandardStream()はOK。
直接コンソールは駄目。
コマンドラインでパイプ、リダイレクションを明示すればOK。

これ以上やると、本当にしつこいので省略しますが、HTA/HTM/Excelも同様にOK。

どうしましょう、本当に、HTA/HTM/Excelでフィルタコマンドが作れます。

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

もう飽きました?しつこいかな。

命題[P4]
XLS(Excel VBA)はStdIn/StdOutは使えない。は正しいか。

――――――――――――――――――――――――――――――――――――――
Option Explicit
Dim wShell
Dim oExec
Set wShell=Wscript.CreateObject("Wscript.Shell")

Set oExec=wShell.Exec("C:\PROGRA~1\MICROS~2\OFFICE10
\Excel.EXE c:\vbs\open\stdin\GetStdIn.XLS")
oExec.StdIn.WriteLine "AAAAA"
oExec.StdIn.WriteLine "BBBBB"
oExec.StdIn.WriteLine "CCCCC"
oExec.StdIn.Close
Do While oExec.Status=0
WScript.Sleep 100
Loop
MsgBox oExec.StdOut.ReadAll()
MsgBox "Status:" & oExec.Status
MsgBox "ExitCode:" & oExec.ExitCode
WScript.Quit
――――――――――――――――――――――――――――――――――――――

GetStdIn.XLSのsheet1のソースに貼り付け
――――――――――――――――――――――――――――――――――――――
Sub A()
MsgBox "start"
Set fso=CreateObject("Scripting.FileSystemObject")
Set stdin=fso.GetStandardStream(0)
Set stdout=fso.GetStandardStream(1)
Do While Not stdin.AtEndOfStream
line=stdin.ReadLine()
MsgBox line
stdout.WriteLine line
Loop
End Sub
――――――――――――――――――――――――――――――――――――――

Excel VBAでフィルタのようなラインコマンドが作れます。

管理人むたぐち さん 2004年 11月 06日 17時 10分 34秒

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

> fso.GetStandardStream()は、今まで、単なる内部インタフェースで、特に使い道がない、
> と思っていましたが、とんでもない。HTA/HTMで標準入出力を使うためには必須の機能です。

こんなメソッドがあることすら知りませんでした。undocumentedですねー。
microsoft.public.scripting.wshで何回か話題になっていた程度です。

いまだに標準入出力でしか通信できないのは何だかなぁですが、
これまでHTAを外部から制御する方法が何もありませんでしたし、
大きな発見と言えるんじゃないでしょうか。

> ファイルの検索だと、ファイル名の一覧しか得られないので、不満です。
> 検索結果を残して再利用しようとしても、なんか大変。
> ※検索結果をテキストファイルにするにはどうします?

これ、困ります。
検索結果を全選択して、バッチファイルなりスクリプトなりに「送る」を
実行しても、エクスプローラの引数の文字数制限にひっかかったりしますし。
なぜ、未だにこんな制限が残ってるのかが謎です。

WSHから検索結果のFileListにアクセスして…とかできるかもしれませんね。
普通のフォルダのFileListにアクセスできることは確認されていますし。

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

解説

なんか不思議に思えますが、考えてみれば当然なんですね。
そもそも、標準入出力は親プロセスがサービスする機能で、子プロセスは何もしない。
標準入出力はCOMMAND.COMやCMD.EXEのような所謂シェルがする仕事で、
コンソールアプリは何も知らないのです。

ウィンドウアプリが標準入出力を使えないのは、COMMAND.COMやCMD.EXEなどのシェルが
ウィンドウアプリに対して標準入出力を単にサービスしてないからです。ケチ!
ウィンドウアプリでも、標準入出力をサービスしてやれば、使えるのです。
wShell.Exec()はウィンドウアプリに対しても標準入出力をサービスしているようです。
あんたは偉い!

WScript.StdIN/StdOutはこれで使える訳です。

fso.GetStandardStream()は、今まで、単なる内部インタフェースで、特に使い道がない、
と思っていましたが、とんでもない。HTA/HTMで標準入出力を使うためには必須の機能です。
あんたは偉い!

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

命題[P3]
HTMはStdIn/StdOutは使えない。は正しいか。

――――――――――――――――――――――――――――――――――――――
Option Explicit
Dim wShell
Dim oExec
Set wShell=Wscript.CreateObject("Wscript.Shell")

Set oExec=wShell.Exec("C:\Progra~1\Intern~1\IExplore.EXE c:\vbs\open\stdin\GetStdIn.HTM")
oExec.StdIn.WriteLine "AAAAA"
oExec.StdIn.WriteLine "BBBBB"
oExec.StdIn.WriteLine "CCCCC"
oExec.StdIn.Close
Do While oExec.Status=0
WScript.Sleep 100
Loop
MsgBox oExec.StdOut.ReadAll()
MsgBox "Status:" & oExec.Status
MsgBox "ExitCode:" & oExec.ExitCode
WScript.Quit
――――――――――――――――――――――――――――――――――――――

GetStdIn.HTM
――――――――――――――――――――――――――――――――――――――
<head>
<script language=vbscript>
MsgBox "start"
Set fso=CreateObject("Scripting.FileSystemObject")
Set stdin=fso.GetStandardStream(0)
Set stdout=fso.GetStandardStream(1)
Do While Not stdin.AtEndOfStream
line=stdin.ReadLine()
MsgBox line
stdout.WriteLine line
Loop
</script></head><body></body></html>
――――――――――――――――――――――――――――――――――――――

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

命題[P2]
HTAではStdIn/StdOutは使えない。は正しいか。

――――――――――――――――――――――――――――――――――――――
Option Explicit
Dim wShell
Dim oExec
Set wShell=Wscript.CreateObject("Wscript.Shell")

Set oExec=wShell.Exec("MSHTA.EXE c:\vbs\open\stdin\GetStdIn.HTA")
oExec.StdIn.WriteLine "AAAAA"
oExec.StdIn.WriteLine "BBBBB"
oExec.StdIn.WriteLine "CCCCC"
oExec.StdIn.Close
Do While oExec.Status=0
WScript.Sleep 100
Loop
MsgBox oExec.StdOut.ReadAll()
MsgBox "Status:" & oExec.Status
MsgBox "ExitCode:" & oExec.ExitCode
WScript.Quit
――――――――――――――――――――――――――――――――――――――

GetStdIn.HTA
――――――――――――――――――――――――――――――――――――――
<head><hta:Application id=hta>
<script language=vbscript>
MsgBox "start"
Set fso=CreateObject("Scripting.FileSystemObject")
Set stdin=fso.GetStandardStream(0)
Set stdout=fso.GetStandardStream(1)
Do While Not stdin.AtEndOfStream
line=stdin.ReadLine()
MsgBox line
stdout.WriteLine line
Loop
</script></head><body></body></html>
――――――――――――――――――――――――――――――――――――――

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

命題[P1]
VBSをWScript.EXEで実行するとWScript.StdIn/StdOutは使えない。は正しいか。

――――――――――――――――――――――――――――――――――――――
Option Explicit
Dim wShell
Dim oExec
Set wShell=Wscript.CreateObject("Wscript.Shell")

Set oExec=wShell.Exec("WScript.exe GetStdIn.vbs")
oExec.StdIn.WriteLine "AAAAA"
oExec.StdIn.WriteLine "BBBBB"
oExec.StdIn.WriteLine "CCCCC"
oExec.StdIn.Close
Do While oExec.Status=0
WScript.Sleep 100
Loop
MsgBox oExec.StdOut.ReadAll()
MsgBox "Status:" & oExec.Status
MsgBox "ExitCode:" & oExec.ExitCode
WScript.Quit
――――――――――――――――――――――――――――――――――――――

GetStdIn.vbs
――――――――――――――――――――――――――――――――――――――
Set stdin=WScript.StdIn
WScript.Echo WScript.FullName
Do While Not stdin.AtEndOfStream
line=stdin.ReadLine()
WScript.Echo line
WScript.StdOut.WriteLine line
Loop
――――――――――――――――――――――――――――――――――――――

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

>管理人むたぐち さん 2004年 11月 04日 13時 17分 56秒
>まあこれも一種のgrepですね。私はあんましコンソール使わないもので…。

一応、back logにはwgrep.vbsも挙げています。

構想では、WSH(VBS)からIEを起こして入力。VBS本体で検索処理。途中結果をIEに表示。

過去ログによると、HTMやHTAで、検索処理みたいな重い処理を行うと、
ハング似になるそうなので、VBSとIEを組み合わせるのがよいかな、と思ってます。

ファイルの検索だと、ファイル名の一覧しか得られないので、不満です。
検索結果を残して再利用しようとしても、なんか大変。
※検索結果をテキストファイルにするにはどうします?

grepだと、該当行が表示されるので、そこから、取捨選択が出来ます。
ファイルに残すのも簡単。なので、私はgrep派です。

インターネット検索をファイル検索に持ってくる動きも、
こういう不満を解消する狙いでしょうか。

ところで、WSH(VBS)からIE(HTM)を起こして連携するには、
[WScript.]CreateObject("InternetExplorer.Application"[,"IE_"])
を使うのが、一般的ですよね。
また、WSH(VBS)からHTAを起こしても、連携できなかったですよね。

が、今回、別の方法を見つけました。
WSH(VBS)からwShell.Exec()でIEを起こして、WSH(VBS)とIE(HTM)/HTAとの間で
oExec.StdIn/StdOut経由で通信します。

ばんのしゃーによかばんた さん 2004年 11月 05日 20時 48分 52秒

>管理人むたぐち さん 2004年 11月 02日 23時 47分 53秒
>To: kuroneko さん 2004年 11月 02日 14時 08分 41秒
>> では、PCのロックをかけているとWSHは使えないのでしょうか?
>私はタスクスケジューラで定期的にあるサイトのHTMLファイルを取得して、
>処理するスクリプトを動かしているのですが、ロック状態でも問題なく
>動作しています。

試してみました。BATから、WScriptでVBSを起こして、MsgBoxを出すだけ。
次にログインすると、タスクは実行中で、WScriptとCMD.EXEのプロセスが残っていました。
つまり、Windowがない環境で、MsgBoxのボタンを押すひとが居ない、ということですね。
プロセスを強制終了するほか、なし。
※この見えないWindowを表示する方法はあるのでしょうか。
wShell.AppActivateで見えない。FindWindow APIでも見えない。無理そう。

したがって、こういう環境では、//Bオプションを指定しておかないと、ハングる。
ただ、//Bオプションを指定すると、今度は、エラーが発生しても分からなくなるので、
例のパラダイムを使う必要があります。
結局、
CMD.EXE /C CScript.Exe //B hoge.VBS >errlog.txt
ですね。

管理人むたぐち さん 2004年 11月 05日 16時 41分 21秒

To: みどり さん

> VBSでファイルを移動(MOVE)させるとき、階層構造ごと移動させることはできませんか?
> または、何層ものフォルダを一度に新規で作成させることはできますか?

フォルダの作成に関しては、以前Wikiに書いておきました。
http://winscript.s41.xrea.com/wiki/index.php?%5B%5B%A5%C6%A5%AF%A5%CB%A5%C3%A5%AF%5D%5D

階層構造を維持したファイル移動も、このコードを一部変更すれば可能かと思います。

kuroneko さん 2004年 11月 05日 14時 27分 20秒

ばんのしゃーによかばんた さん
出来ました!名前をつけて保存できました。
有難うございました。
この方法でエージェントを動かしてみます。
またご報告させてください。

kuroneko さん 2004年 11月 05日 11時 06分 41秒

ばんのしゃーによかばんた さん
今日再度試しましたところ、NotePadが開きました。
radb***.tmpというファイ名となっておりまして
これを名前をつけて保存するにはどうすればよろしいのでしょうか?
例えば、test.txt等。
ViewHTML.VBSの下2行を消して実行すると何の反応もないのですが・・・。
勉強不足で申し訳ありませんがご教授お願いいたします。

みどり さん 2004年 11月 05日 00時 27分 26秒

VBSでファイルを移動(MOVE)させるとき、階層構造ごと移動させることはできませんか?
または、何層ものフォルダを一度に新規で作成させることはできますか?

管理人むたぐち さん 2004年 11月 04日 20時 18分 00秒

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

> thresholdってなんか不思議。アナログの入力がデジタルの出力になる。
> 細菌やウィルスやプリオンもそこそこ数量がないと感染しないと言いますが、
> これらにもthresholdがあるということでしょうか。

自然現象は、よく釣鐘型の分布を示します。そのため、
ある値以上だと、急激にその確率が増すという値があるわけです。
その値を閾値と言っていいのかは、私にはちょっと分かりませんが、
便宜上はそういう値が求められるケースが多いですね。

閾値以下でも、ごく少ない確率ではありますが、その事象が
まったく起こらないということはないはずです。
極端な話、異常プリオンが1個あるだけでも、感染する危険性は皆無じゃない、
ということです。

ばんのしゃーによかばんた さん 2004年 11月 04日 18時 45分 22秒

>ばんのしゃーによかばんた さん 2004年 11月 04日 16時 02分 31秒
>同じ会社から来るUTF-8なメールでよく使われていてSJISに変換できない文字。
>(どうも、この会社で、よく使われているようですね。)

別の会社でしたね。ということは、一般によく使われている、ということですね。

※※※

>kuroneko さん 2004年 11月 04日 11時 10分 36秒
>お答えいただきましたViewHTML.VBSを使用してみたのですが
>何も反応がない状態です。NotePadも開きません。

変ですね。
何かエラーがあれば、メッセージボックスが出そうなものですが。
もし、末尾の2行を削除して実行したなら、当然、NotePadも開きませんが、
そうじゃないですよね。
エラーが起きているのに、メッセージボックスが出ない、というのは、
困った状況ですね。
>ばんのしゃーによかばんた さん 2004年 10月 25日 17時 07分 32秒
の方法を使ってみては、いかがでしょう。

※※※

>管理人むたぐち さん 2004年 11月 04日 16時 53分 35秒
>おそらく問題ないとは思いますが、MVP関係の話題は、ここではなるべく避けて
>いただきたいと思います。NDAの関係もありますしね。
>疑問点は、MVPリードの方にメールで問い合わせてみるか、eXConn上の

そうですね。そうします。お騒がせしました。

※※※

>管理人むたぐち さん 2004年 11月 02日 23時 47分 53秒
>化学の世界では、何故か伝統的に「しきいち」って読むんですよ。

thresholdってなんか不思議。アナログの入力がデジタルの出力になる。
細菌やウィルスやプリオンもそこそこ数量がないと感染しないと言いますが、
これらにもthresholdがあるということでしょうか。

管理人むたぐち さん 2004年 11月 04日 16時 53分 35秒

To: ばんのしゃーによかばんた さん 2004年 11月 04日 16時 01分 34秒

> ということは、
> 2000やXPのProfessionalからgpedit.mscさえ持って来れば、使えるのかな。

対応するレジストリキーの書き換えだけで十分だと思いますよ。
再ログオンが必要になるでしょうけど、それくらいは許容範囲かと。


To: ばんのしゃーによかばんた さん 2004年 11月 04日 16時 02分 04秒

> ところで、MVPのみなさま、クーポンは使われましたか。

おそらく問題ないとは思いますが、MVP関係の話題は、ここではなるべく避けて
いただきたいと思います。NDAの関係もありますしね。
疑問点は、MVPリードの方にメールで問い合わせてみるか、eXConn上の
Privateフォーラムで聞いてみるのがいいと思います。


To: ばんのしゃーによかばんた さん 2004年 11月 04日 16時 02分 31秒

> ISO-8859-1の150がunicodeの8211になるということでしょうか。

UTF-8を扱っていて一番困るのが、チルダ" ~ "と"〜"です。
これらの文字は、同一文字として扱われるようで、他の文字コードに変換したり
すると、"?"などに化けてしまうのです。
URLなどで頻出の文字なので、とても困ります。

ばんのしゃーによかばんた さん 2004年 11月 04日 16時 03分 10秒

>玉緒 さん 2004年 10月 27日 17時 46分 16秒
>Call GetObject(,"Excel.Application")
>他のソフトを監視するには上記のExcel部分を変更すれば良いのでしょうか?
>HELPをいろいろ見たのですが、よくわかりませんでした。

その辺は、相手のプログラム次第です。

Excelのヘルプは見ましたか。

一応、OfficeのProgIDはExcelのヘルプに書いてあります。

プログラミング情報
|- Microsoft Excel Visual Basic リファレンス
|- Microsoft Excel のオブジェクト
|- プログラミングの概念
|- 他のアプリケ−ションを使って作業する。
|- OLE プログラム ID

mk:@MSITStore:C:\Program%20Files\Microsoft%20Office\Office10\1041\vbaxl10.chm::/html/xlmscProgrammaticIdentifiers.htm

あと、ProgIDを調べるには、レジストリのHKCRをProgIDキーで検索すれば、
大量に存在します。でも、ほとんどは使えません。

ばんのしゃーによかばんた さん 2004年 11月 04日 16時 02分 31秒

>ばんのしゃーによかばんた さん 2004年 11月 03日 17時 45分 01秒
>WScript.Echo "Usage: CScript grep.VBS [-fir] [folder\]files ..." & _

訂正。シンタクスは、

Usage: CScript grep.VBS [-fir] [-su8] pattern [folder\]files ...

です。

※※※

>管理人むたぐち さん 2004年 06月 03日 18時 45分 23秒
>ヘルプの使用例に、
>cscript.exe wmcmd.vbs -adevice 1 -vdevice 4 -broadcast 8080 -duration 620
>などと書いてあるんですが、よーーーく目を凝らしてみると、broadcastの前の
>-(ハイフン)が微妙に変です。それだけUnicode文字になってるんですね。
>ソースはShift_JISなのに、わざわざそこだけ&#0150;と指定してあります)
>というわけで、みなさんも一見ANSIっぽいけど実はUnicodeな文字には
>十分お気をつけください…。

同じ会社から来るUTF-8なメールでよく使われていてSJISに変換できない文字。
(どうも、この会社で、よく使われているようですね。)

登録商標(R) &reg;&#0174;
中点・ &#8226;&bull;
ハイフン似 &#8211;&ndash;

&#0150;は何故か&#8211;と同じunicode値になります。

setlocale("en-us")
set fso=createobject("scripting.filesystemobject")
set stdout=fso.createtextfile("en-us",,True)
for n=0 to 255
stdout.writeline n & chr(n)
next

で確認すると、150はハイフン似になります。
ISO-8859-1の150がunicodeの8211になるということでしょうか。

ばんのしゃーによかばんた さん 2004年 11月 04日 16時 02分 04秒

>管理人むたぐち さん 2004年 11月 02日 23時 47分 53秒
>> thresholdやsuperiorとかはカタカナでどう書くか、悩みますよね。
>すれっしょるど、すぺりおーる、と書くのがいいんでしょうか。

スレショールド、スレッシュホールド、スレッシュオールド。カタカナ語辞典には、なし。
シューピアリア、スーピリア。カタカナ語辞典には、シューペリア、が載ってました。
どれもこれも、もうひとつですね。

※※※

ところで、MVPのみなさま、クーポンは使われましたか。
アカウントは作ったのですが、そのアカウントでログイン出来ないんです。
ボタンを押すとクリアされた画面が出るだけ。進めません。

ばんのしゃーによかばんた さん 2004年 11月 04日 16時 01分 34秒

>ちゃっぴ さん 2004年 11月 02日 23時 42分 26秒
>XP HomeEditionだけないです。
>Professionalにはもちろん存在します。
>多分、MSはDomainに参加できないHomeEditionには不要と考えたのでしょう。

えーそんなぁ。ログオンスクリプトはいろいろと代替可能ですが、
ログオフスクリプトは代替困難なのに。それはあんまりです。:-<

>管理人むたぐち さん 2004年 11月 02日 23時 47分 53秒
>ファイルのアクセス許可を設定できないのには、かなりまいりました…。
>幸い、CACLSはあったので、それで何とかしましたが。

ということは、
2000やXPのProfessionalからgpedit.mscさえ持って来れば、使えるのかな。

ばんのしゃーによかばんた さん 2004年 11月 04日 16時 01分 11秒

>ばんのしゃーによかばんた さん 2004年 11月 03日 17時 44分 27秒
>今度は、UTF-8をQuoted-Printableにしたメールが来ました。:-<
>全く、いろんなものを送ってくれますね。:-<
>みなさんは普通に読めるんでしょうか。
>UTF-8のQuoted-PrintableをSJISにするフィルタです。

CDOを使って読む方法です。これなら、なんでもごじゃれですね。

――――――――――――――――――――――――――――――――――――――
path="ファイル名"
Set CDOMsg=WScript.CreateObject("CDO.Message")
Set Stm=CreateObject("ADODB.Stream")
Stm.Open
Stm.LoadFromFile path
CDOMsg.DataSource.OpenObject stm,"_Stream"
WScript.Echo CDOMsg.Subject
WScript.Echo CDOMsg.From
WScript.Echo CDOMsg.TextBody

ばんのしゃーによかばんた さん 2004年 11月 04日 16時 00分 47秒

>ばんのしゃーによかばんた さん 2004年 05月 02日 19時 28分 47秒
>2000/XPでは、ExecのStdOutに疑似パイプ(一時ファイル)ではなく、
>OSのpipeが使われているようです。
>pipeには有限のメモリバッファがあり、溢れると書き込みがブロックされます。
>試してみますと、なな何と僅か163バイトのようです。
>で、正しいコーディングは? と言うと、
>Set wShell=CreateObject("WScript.Shell")
>Set oExec=wShell.Exec("CScript out.vbs")
>Do While Not oExec.StdOut.AtEndOfStream
>WScript.Echo oExec.StdOut.ReadLine()
>Loop
>または、
>WScript.Echo oExec.StdOut.ReadAll()

これですと、今度は、StdErrが溢れるとハングします。
で、やはり、本当は、Exec使わず、Run使え、なんですが、
どうしても、Execがよいなら、こういう手があります。

Set oExec=wShell.Exec("CMD.EXE /C CScript out.vbs 2>&1")
のようにStdErrはStdOutにリダイレクトして、oExec.StdOutだけReadする。

Command.COMでは、この手は使えません。が、
Set oExec=wShell.Exec("Command.COM /C CScript out.vbs >file")
のようにStdOutはファイルにリダイレクトして、oExec.StdErrだけReadする。

あるいは、ErrOutのような、StdErrをStdOutにリダイレクトするコマンドを使って、
Set oExec=wShell.Exec("ErrOut.EXE CScript out.vbs")
として、oExec.StdOutだけReadする。

管理人むたぐち さん 2004年 11月 04日 13時 17分 56秒

To: ばんのしゃーによかばんた さん 2004年 11月 03日 17時 45分 01秒

> SJISだけなら、FindStrコマンドで代替できますが、UTF-8となると、
> WSHの出番でしょう。ということで、grep.VBS。ちょっと長いです。

大作をどうもありがとうございます。
テキストファイルの検索は、EmEditor ver.4の「ファイルから検索」を使ってます。
まあこれも一種のgrepですね。私はあんましコンソール使わないもので…。

テキスト(UTF-8も含めたいろんな文字コード)、ワード文書、PDFあたりを
一括して検索できたら便利なのになぁ、といつも思います。
namazuはインデックスを構築するのが面倒な上、UTF-8に正式対応してないので
いまいちです。また、検索のフロントエンドとなるソフトもいまいち良いのがないです。

CGIの奴でもいいんでしょうけど、検索結果からファイルを開こうとしたら
警告だの何だのが出ますし、IEの中で開かれちゃったりと、あまり良くないです。
(IEの右クリックメニューに、ローカルファイルを開くスクリプトを仕込んで
何とか使えるようにはしましたけど…。詳しくは以前の投稿を参照
→管理人むたぐち さん 2004年 06月 03日 19時 33分 47秒 )

だれかエクスプローラのエクスプローラバーに、namazuのフロントエンドを
仕込んで下さい。私、使いますから。

検索機能が充実する(らしい)次期Windowsには、期待してるんですけどね。


To: kuroneko さん

> VBScriptからWebページを保存する方法

なぜIE、NotePad、SendKeysの組み合わせに拘るのでしょうか?
そんなあやふやな方法を使わずとも、他にもいくらでも方法がありますよ。
お勧めは、Msxml2.XMLHTTPとAdodb.Streamの組み合わせです。
たとえば→管理人むたぐち さん 2001年 10月 14日 19時 35分 39秒

kuroneko さん 2004年 11月 04日 11時 10分 36秒

ばんのしゃーによかばんた 様
いつもお世話になっております。ご質問させて下さい。
お答えいただきましたViewHTML.VBSを使用してみたのですが
何も反応がない状態です。NotePadも開きません。
また、初心者のためscriptを解読できていないのが実情です。(すみません)
また、view-source〜を使って、VBScriptからWebページを保存する方法も
行なってみましたが、別ウィンドウでIEが起動しNotePadは開きませんでした。
やっていることは、
Notes scriptから
Call w.URLOpen("http://202.229.194.35/espre/GWapi_act.cgi?key=XsT94hJZDe2rs&type=M&corp=" + corp$ + "&tel=" + tel$ + "&nam=" + unam$ +" &add=" + mead$ + "&popac= " + macount$ +"&popps= " + newpwd$ +"&foma= "+ fomafg$)
Sleep (10 )
URLを指定してIEを起動しております。
IEに表示されるのは「0」か「−1」かだけです。(処理結果)
メニューからソースの表示を行なうとこれまた、「0」か「−1」かだけです。普通に<HTML>〜等はありません。
この表示されている処理結果をテキストに保存しようとしています。
SendKeysで上手く動いていたので安心していたのですが、
ロックをかけるとだめということで、今、どうしたらよいのか
皆目検討もつかない状態です。
大変申し訳ありませんがご教授願えますでしょうか?
宜しくお願いいたします。

ばんのしゃーによかばんた さん 2004年 11月 03日 17時 45分 01秒

>管理人むたぐち さん 2004年 11月 02日 23時 47分 53秒
>NamazuもUTF-8は読んでくれないので困ってしまいます。
>最近はUTF-8なテキストファイルを頻繁に扱うもので…。

SJISだけなら、FindStrコマンドで代替できますが、UTF-8となると、
WSHの出番でしょう。ということで、grep.VBS。ちょっと長いです。
――――――――――――――――――――――――――――――――――――――
Option Explicit
Sub Usage()
WScript.Echo "Usage: CScript grep.VBS [-fir] [folder\]files ..." & _
vbCRLF & "-f: Full path name print" & _
vbCRLF & "-i: Ignore case" & _
vbCRLF & "-r: Recursive" & _
vbCRLF & "-s: Shift JIS" & _
vbCRLF & "-u: UTF-16" & _
vbCRLF & "-8: UTF-8" & _
""
WScript.Quit
End Sub

Dim fso
Dim wShell
Dim arg
Dim Command

Set fso=CreateObject("Scripting.FileSystemObject")
Set wShell=CreateObject("WScript.Shell")

If LCase(fso.GetBaseName(WScript.FullName))="wscript" Then
Command="Command.com /kCScript.EXE //NoLogo " & """" & WScript.ScriptFullName & """"
For Each arg In Wscript.Arguments
Command=Command & " " & """" & arg & """"
Next
wShell.Run Command
WScript.Quit
End If

Dim fFullName
Dim fRecursive
Dim fIgnoreCase
Dim argv()
Dim argc
argc=-1
Dim Pattern
Dim k
Dim opt
Dim charset
Const fUTF16=1
Const fUTF8=2
Const fSJIS=4

For Each arg In WScript.Arguments
If Left(arg,1)="-" Then
For k=2 To Len(arg)
opt=Mid(arg,k,1)
Select Case LCase(opt)
Case "f" fFullName=True
Case "r" fRecursive=True
Case "i" fIgnoreCase=True
Case "s" charset=charset Or fSJIS
Case "u" charset=charset Or fUTF16
Case "8" charset=charset Or fUTF8
Case Else Call Usage()
End Select
Next
Else
argc=argc+1
If argc=0 Then
Pattern=arg
Else
ReDim Preserve argv(argc-1)
argv(argc-1)=arg
End If
End If
Next
If IsEmpty(charset) Then charset=fSJIS
Dim Home
Dim LenHome
Home=fso.GetAbsolutePathName("")
If Right(Home,1)<>"\" Then Home=Home & "\"
LenHome=Len(Home)
Dim FolderName
Dim FileName
For Each arg In argv
FolderName=fso.GetParentFolderName(arg)
FileName=fso.GetFileName(arg)
If InStr(FileName,"*") Or InStr(FileName,"?") Then
Call MakePattern()
If FolderName="" Then FolderName="."
Call FolderProc(fso.GetFolder(FolderName))
Else
Call FileProc(fso.GetFile(arg))
End IF
Next

WScript.Quit

Dim pre
Dim bre
Dim xre

Sub MakePattern()
Set pre=New RegExp
Set bre=New RegExp
Set xre=New RegExp
pre.Global=True
bre.IgnoreCase=True
xre.IgnoreCase=True
pre.Pattern="([\]\^\[\\\$\+\.\(\)\|\{\}])"
bre.Pattern="^" & pre.Replace(fso.GetBaseName(FileName),"\$1") & "$"
bre.Pattern=Replace(bre.Pattern,"?",".")
bre.Pattern=Replace(bre.Pattern,"*",".*")
xre.Pattern="^" & pre.Replace(fso.GetExtensionName(FileName),"\$1") & "$"
xre.Pattern=Replace(xre.Pattern,"?",".")
xre.Pattern=Replace(xre.Pattern,"*",".*")
pre.Pattern=Pattern
pre.Global=False
pre.IgnoreCase=fIgnoreCase
End Sub

Function FolderProc(Folder)
Dim file
If fRecursive Then
For Each file In Folder.SubFolders
Call FolderProc(file)
Next
End IF

For Each file In Folder.Files
If bre.Test(fso.GetBaseName(file.Name)) And _
xre.Test(fso.GetExtensionName(file.Name)) Then
Call FileProc(file)
End IF
Next
End Function

Function FileProc(File)
Dim stream
Const adTypeBinary=1
Const adTypeText=2
Dim CodeSet
CodeSet=Array("Unicode","utf-8","shift_jis")
Dim Path

Path=File.Path
If Not fFullName Then
If Left(Path,LenHome)=Home Then Path=Mid(Path,LenHome+1)
End If
Set stream=CreateObject("ADODB.Stream")
Call stream.Open()
stream.Type=adTypeBinary
Call stream.LoadFromFile(File.Path)
For k=1 To 3
If charset and 2^(k-1) Then
stream.Type=adTypeText
stream.CharSet=CodeSet(k-1)
On Error Resume Next
Call ReadLine(stream,Path)
If Err Then WScript.Echo Path,Err.Number,Err.Description,stream.charset
On Error GoTo 0
stream.position=0
stream.Type=adTypeBinary
End If
Next
stream.Close
Set stream=Nothing
End Function

Sub ReadLine(stream,Path)
Dim line,lnum
Const adReadLine = -2

lnum=0
Do While Not stream.EOS
lnum=lnum+1
line=stream.ReadText(adReadLine)
If pre.Test(line) Then
WScript.Echo Path,stream.charset,lnum,line
End If
Loop
End Sub

ばんのしゃーによかばんた さん 2004年 11月 03日 17時 44分 27秒

今度は、UTF-8をQuoted-Printableにしたメールが来ました。:-<
全く、いろんなものを送ってくれますね。:-<
みなさんは普通に読めるんでしょうか。

UTF-8のQuoted-PrintableをSJISにするフィルタです。
――――――――――――――――――――――――――――――――――――――
Option Explicit
Dim re
Dim code
Dim code1
Dim code2
Dim code3
Dim k,buf

Set re=New RegExp
re.IgnoreCase=True
re.Global=True

buf=WScript.StdIn.ReadAll()
re.Pattern="=\r\n"
buf=re.Replace(buf,"")
re.Pattern="=([0-9A-F][0-9A-F])"
buf=re.Replace(buf,GetRef("rep"))

For k=1 To Len(buf)
: code=AscW(Mid(buf,k,1))
: If 0<=code And code<128 Then
: : WScript.StdOut.Write Chr(code)
: ElseIf 128+64<=code And code<128+64+32 Then
: : code1=code
: : k=k+1
: : code2=AscW(Mid(buf,k,1))
: : code=(code1 And &H1F) * 64 + (code2 And &H3F)
: : If Chr(Asc(ChrW(code)))=ChrW(code) Then
: : : WScript.StdOut.Write ChrW(code)
: : Else
: : : WScript.Echo "Invalid UTF-8 Code : " & Right(Hex(code1+256),2) & Right(Hex(code2+256),2)
: : End If
: ElseIf 128+64+32<=code And code<128+64+32+16 Then
: : code1=code
: : k=k+1
: : code2=AscW(Mid(buf,k,1))
: : k=k+1
: : code3=AscW(Mid(buf,k,1))
: : code=(code1 And &H0F) * 16 * 256 + (code2 And &H3F) * 64 + (code3 And &H3F)
: : If Chr(Asc(ChrW(code)))=ChrW(code) Then
: : : WScript.StdOut.Write ChrW(code)
: : Else
: : : WScript.Echo "Invalid UTF-8 Code : " & Right(Hex(code1+256),2) & Right(Hex(code2+256),2) & Right(Hex(code3+256),2)
: : End If
: Else
: : If Chr(Asc(ChrW(code)))=ChrW(code) Then
: : : WScript.StdOut.Write ChrW(code)
: : Else
: : : WScript.Echo "Invalid UTF-8 Code : " & Escape(ChrW(code))
: : End If
: End If
Next

Function rep(match,submatch,pos,source)
rep=ChrW(CLng("&H" & submatch))
End Function


管理人むたぐち さん 2004年 11月 03日 12時 59分 22秒

To: ちゃっぴ さん

Google Desktop Searchはβ版なので、まだ日本語のドキュメントが
検索できないようです。
少なくともこれができるようにならないと、使う気にはなりませんねぇ。
それと、Googleに検索結果が漏れないと確証が持てるまでは…。

ちゃっぴ さん 2004年 11月 03日 00時 46分 59秒

> NamazuもUTF-8は読んでくれないので困ってしまいます。

最近でたGoogleのDesktop Engineなんかどうなのでしょう?

試していませんが・・・

管理人むたぐち さん 2004年 11月 02日 23時 49分 55秒

おっと被ってしまいましたね。

それと、thresholdは「閾値」ですね、念のため。

管理人むたぐち さん 2004年 11月 02日 23時 47分 53秒

To: kuroneko さん 2004年 11月 02日 14時 08分 41秒

> では、PCのロックをかけているとWSHは使えないのでしょうか?

少なくともそうではないと思いますよ。

私はタスクスケジューラで定期的にあるサイトのHTMLファイルを取得して、
処理するスクリプトを動かしているのですが、ロック状態でも問題なく
動作しています。

SendKeysがうまくいってないだけかと思ったんですが、違うんでしょうか?


To: ばんのしゃーによかばんた さん 2004年 11月 02日 16時 26分 54秒

> XPのファイルの検索は、SJIS文字列であっても、探してくれないみたいです。:-<

使えないですねー。次期Windowsはその辺が完璧になってくれると良いのですが、
WinFSはどこまで完成するんでしょうかね。
NamazuもUTF-8は読んでくれないので困ってしまいます。
最近はUTF-8なテキストファイルを頻繁に扱うもので…。

> thresholdやsuperiorとかはカタカナでどう書くか、悩みますよね。

すれっしょるど、すぺりおーる、と書くのがいいんでしょうか。
ちなみにthresholdを「しきいち」と読んだら怒られたことがあります。
「いきち」が正しいんですよね。
化学の世界では、何故か伝統的に「しきいち」って読むんですよ。


To: ばんのしゃーによかばんた さん 2004年 11月 02日 16時 27分 27秒

> Windows 2000Proにあったログオン/ログオフスクリプトは、Windows XPでは、
> なくなったのでしょうか。それらを設定するはずのgpedit.mscもありません。
> 何か問題があってなくしたのか、XP HomeEditionだけ、ないのか。

Windows XP Professionalにはありますので、おそらくHomeEditionの制限でしょう。
HomeEditionにはこの手の制限が結構隠されてますので、わりと注意が必要です。
ファイルのアクセス許可を設定できないのには、かなりまいりました…。
幸い、CACLSはあったので、それで何とかしましたが。

ちゃっぴ さん 2004年 11月 02日 23時 42分 26秒

ばんのしゃーによかばんた さん こんばんわ

> 何か問題があってなくしたのか、XP HomeEditionだけ、ないのか。

XP HomeEditionだけないです。
Professionalにはもちろん存在します。

多分、MSはDomainに参加できないHomeEditionには不要と考えたのでしょう。


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

>ばんのしゃーによかばんた さん 2004年 10月 29日 15時 14分 00秒
>>ヤーポンレン さん 2004年 09月 30日 17時 27分 11秒
>> ・Shellを使う以外にファイルの所有者や作成者など、「概要」タブに
>>  表示される項目を取得できる方法

逆に、Shellを使う方法は、GetDetailsOf()が一般的(?)ですが、
Windows2000/ME以降では、こんな方法もごじゃる。

Set Shell=WScript.CreateObject("Shell.Application")
Set Folder=Shell.NameSpace(Left(WScript.ScriptFullName,InStrRev(WScript.ScriptFullName,"\")))
Set FolderItem=Folder.Items.Item(WScript.ScriptName)
WScript.Echo TypeName(FolderItem) 'FolderItem2(=ShellFolderItem?)
WScript.Echo FolderItem.ExtendedProperty("DocTitle")
WScript.Echo FolderItem.ExtendedProperty("{F29F85E0-4FF9-1068-AB91-08002B27B3D9}4")

これで概要のタイトルや作成者が取れます。ほかにもいろいろ取れるようです。
詳しくはMSDNライブラリを参照。
ただし、書いてある通りにやって駄目なことがあるみたいです。カンマとか、"Author"とか。

参照だけなら、もうDSOFILE.EXEは無用かな。

ばんのしゃーによかばんた さん 2004年 11月 02日 16時 27分 27秒

>管理人むたぐち さん 2004年 11月 01日 13時 53分 42秒
>To: kuroneko さん 2004年 10月 21日 17時 27分 35秒
>> サーバーにロックがかかっている状態だとWSHが起動しません。
>起動していないのではなく、SendKeysが正常にキーコードを送っていない
>ためかと思われます。
>なんせ、「ロック」されてるわけですから。

もし、そうなら、
>ばんのしゃーによかばんた さん 2004年 09月 28日 11時 19分 32秒
が解決法になると思うのですが、見てないのかな。

もし、起動されてて、その後にエラーが起きているのなら、
>ばんのしゃーによかばんた さん 2004年 10月 25日 17時 07分 32秒
がエラーを調べる方法になると思います。

ところで、ときどき、無人環境でWSHが動かないという話があるので、
類似な環境で試してみようと思って、ログオンスクリプトを使おうとしたら、ない。
Windows 2000Proにあったログオン/ログオフスクリプトは、Windows XPでは、
なくなったのでしょうか。それらを設定するはずのgpedit.mscもありません。
何か問題があってなくしたのか、XP HomeEditionだけ、ないのか。

――――――――――――――――――――――――――――――――――――――
>To: ばんのしゃーによかばんた さん 2004年 10月 21日 17時 05分 33秒
>> MVPのみなさま、MSDNの言語パックはどれを選択されました?
>私は MSDN Universal - Japan: Japanese & Englishというのを選びました。
>アジア語圏すべてを網羅したところで、どうせ使わないですし、
>日本語版(と英語版。日本語化されてないものもあるので)があれば
>十分かなと思います。
>Japanese & Englishで、しかもDVDでも、相当量ありますよ。

↑と同じものが来ました。
ダンボールの山が来たらどうしよう、心配していたのですが、杞憂でした。
Country/Region: Japan では、
何を選択しても、「日本語対応版」(日本語+英語)になるようです。
媒体ケースもパッケージも、昔はビニールのペラペラだったのが、
随分立派になりましたね。:-)
特に、VS6(VB6)が入っていたのが、うれしい。:-)
手持ちのVB.NET Standardでは、COMサーバが作れないようなので。

――――――――――――――――――――――――――――――――――――――
>To: スタント さん 2004年 10月 18日 22時 01分 56秒
>> このようなものを見つけたのですが、このサンプルの.Navigate(str)や.visibleという部分はどのように調べれば解るのでしょうか?
>1. OLE/COM オブジェクト ビューアを使う→詳しくは検索して探してください。
>2. VBやVBAに付属しているオブジェクトブラウザを使う→同上

それより何より、まず、第一に、管理人むたぐち さんの
http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/
の「WSHで使えるオブジェクトの解説」を読む。
第二に、MSDNライブラリを{手に入れるか|インターネットか}で検索する。
でしょう。

――――――――――――――――――――――――――――――――――――――
>To: 初心者みきてぃ さん 2004年 10月 12日 16時 31分 12秒
>> 二つ目にファイル間(Test1.vbs)には、簡単な処理のみ。(Test2.vbs)には関数を
>> 記述し、そのvbsファイル間で処理(実行)出来るのでしょうか?
>方法としては、次の3通りがメジャーです。
>3. スクリプト中で他のファイルをTextStreamとして読み込み、
>  ExecuteGlobalステートメントを実行する→「インクルード ExecuteGlobal」

つまり、具体的には、同じフォルダなら、
#include "incfile"
と、書く代わりに、ちょっと長い、
ExecuteGlobal CreateObject("Scripting.FileSystemObject").OpenTextFile(Left(WScript.ScriptFullName,InStrRev(WScript.ScriptFullName,"\"))&"incfile")).ReadAll()
という一行を書きます。
フルパス名なら、
ExecuteGlobal CreateObject("Scripting.FileSystemObject").OpenTextFile("フルパス名")).ReadAll()
ですね。
また、Sub/Functionの外なら、ExecuteGlobalのGlobalは不要。

ばんのしゃーによかばんた さん 2004年 11月 02日 16時 26分 54秒

XPのファイルの検索は、SJIS文字列であっても、探してくれないみたいです。:-<
拡張子TXTやHTMなどは探すようですが、拡張子なしなどは対象外のよう。
逆に拡張子TXTやHTMなどはUTF-16も探すようです。
UTF-16を探す見返りに、対象を絞ったのでしょうか。なんか、前より使えない。:-<

※※※

MSDNで見つけたページを「ソースを表示」で保存すると、日本語なのに、
charset=iso-8859-1
なものがあるのには、困ったものです。:-< 翻訳漏れでしょうか。
どうも、あまり精度のよくない機械翻訳をしているようで、
「カーソルくらい置」て何だろうと考えてしまいました。返り血や生き血の類ですね。
生き血と言えば、thresholdやsuperiorとかはカタカナでどう書くか、悩みますよね。
スペリオアみたいに受験英語の記憶術的な読み方をされると分からないし。
はたまた、スペリオル湖はこれだったのか、と気が付いたりして。

kuroneko さん 2004年 11月 02日 14時 08分 41秒

管理人むたぐち 様
ご返答有難うございます。
更にご質問ですが
>起動していないのではなく、SendKeysが正常にキーコードを送っていないためかと思われます。
>なんせ、「ロック」されてるわけですから。
では、PCのロックをかけているとWSHは使えないのでしょうか?
また、他に解決方法ってございますでしょうか?
かなり崖っぷち状態です(泣)
宜しくお願いいたします。

管理人むたぐち さん 2004年 11月 01日 13時 53分 42秒

前ページ(http://www.roy.hi-ho.ne.jp/mutaguchi/bbs/list117.shtml)から、
未解決と思われる問題に答えていきます。



To: 村上 厚 さん 2004年 10月 24日 07時 21分 44秒

> 最近、cPanelのエントロピー・サーチと言う機能を利用し、自分のウェブサイト内の検索ができるようにしたのですが、キー・ワードとして半角・英字しか使用できません。

よく分からないのですが、「エントロピー・サーチ」が元々日本語を
受け付けない仕様であるという可能性はありませんか?

または、ページの文字コード指定がおかしいのでは。
<meta content="text/html; charset=Shift_JIS" http-equiv="Content-Type">
等をhead要素内に記述してみてはいかがでしょうか。


To: shinamon さん 2004年 10月 23日 01時 24分 31秒

> IEからExcelへのデータ取込について教えてください。

VBAからIEをCreateObjectして読み込めば良いかと思います。
詳しくは、次のキーワードで検索してみてください。
Excel IE CreateObject Documentオブジェクト


To: kuroneko さん 2004年 10月 21日 17時 27分 35秒

> サーバーにロックがかかっている状態だとWSHが起動しません。

起動していないのではなく、SendKeysが正常にキーコードを送っていない
ためかと思われます。
なんせ、「ロック」されてるわけですから。


To: ばんのしゃーによかばんた さん 2004年 10月 21日 17時 05分 33秒

> MVPのみなさま、MSDNの言語パックはどれを選択されました?

私は MSDN Universal - Japan: Japanese & Englishというのを選びました。
アジア語圏すべてを網羅したところで、どうせ使わないですし、
日本語版(と英語版。日本語化されてないものもあるので)があれば
十分かなと思います。
Japanese & Englishで、しかもDVDでも、相当量ありますよ。


To: スタント さん 2004年 10月 18日 22時 01分 56秒

> このようなものを見つけたのですが、このサンプルの.Navigate(str)や.visibleという部分はどのように調べれば解るのでしょうか?

1. OLE/COM オブジェクト ビューアを使う→詳しくは検索して探してください。
2. VBやVBAに付属しているオブジェクトブラウザを使う→同上


To: 初心者みきてぃ さん 2004年 10月 12日 16時 31分 12秒

> VBは少しわかるので、例で、VBではsub main() などで実行されますよね。
> VBScriptではどのようにすれば良いのでしょうか?

VBS on WSH(*.vbsファイル)では、ファイルの1行目から順に実行されます。

> 二つ目にファイル間(Test1.vbs)には、簡単な処理のみ。(Test2.vbs)には関数を
> 記述し、そのvbsファイル間で処理(実行)出来るのでしょうか?

方法としては、次の3通りがメジャーです。
1. *.wsfファイルを使う→次の単語で検索してみてください。「インクルード WSH wsf」
2. *.wsc(Windows Script Component)ファイルを使う→「インクルード WSH wsc」
3. スクリプト中で他のファイルをTextStreamとして読み込み、
  ExecuteGlobalステートメントを実行する→「インクルード ExecuteGlobal」


To: ラムダ さん 2004年 10月 11日 20時 48分 01秒

> ユーザ名を入力するテキストコントロールのところで、
> <input type="text" size="20" name="txtUserName" id="txtUserName">
> ここに、value=WshNetwork.UserNameといった具合に、現在のユーザ名をデフォルト表示出来ないでしょうか?

スクリプトの後半部分のwindow_onload()イベントに次のような記述を加えます。

Sub window_onload()
'開始時に発生
txtUserName.Value=WshNetwork.UserName
End Sub


以上。

ばんのしゃーによかばんた さん 2004年 10月 31日 15時 49分 48秒

>ばんのしゃーによかばんた さん 2004年 10月 29日 15時 14分 33秒
>Dim wszStreamName as String
>wszStreamName=Strings(MAX_PATH,0)
>Call BackupRead(hFile, wszStreamName, sid.dwStreamNameSize, dwRead, False, False, lpContext)
>Dim pwsz as String
>pwsz=Left(wszStreamName,InStr(wszStreamName,vbNullChar)-1)
>のようにやってみたのですが、どうもうまく行きません。
>どういうときはうまく行って、これはなぜ駄目なのか、ご教授お願いします。

wszStreamName=String(MAX_PATH,0)
Call BackupRead(hFile, ByVal wszStreamName, sid.dwStreamNameSize, dwRead, False, False, lpContext)

ByValでしたね。忘れてました。

>For k = 1 To dwRead
>pwsz = pwsz & MidB(wszStreamName.cStreamName, k * 2 - 1, 1)
>Next
>これも、誰かがUnicode文字列をANSI文字列だと思って、アンパックしているみたい。
>何故なんでしょう。

普通は、ANSI版のBackupReadA()を呼び出せばよいのでしょうが、それがありません。
こういうときは、Stringではなくて、Byte配列を使うのが正しいのでしょうか。

Dim wszStreamName(1 To MAX_PATH * 2) as Byte
For k=1 To MAX_PATH * 2
wszStreamName(k)=0
Next
Call BackupRead(hFile, wszStreamName(1), sid.dwStreamNameSize, dwRead, False, False, lpContext)
Dim pwsz as String
pwsz=Left(wszStreamName,InStr(wszStreamName,vbNullChar)-1)

こんな感じでしょうか。

いろいろ、難しいですねぇ。

ちゃっぴ さん 2004年 10月 31日 13時 34分 48秒

maroon さん 2004年 10月 13日 20時 50分 12秒 へ

> wshにてIPアドレスを変更したいのですが、
> サンプルプログラムが探せません是非教えてください。

WMIを使ったサンプルです。

Dim objWMIService, colItems, objitem, lngRet

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colItems = objWMIService.ExecQuery _
("Select * From Win32_NetworkAdapterConfiguration " _
& "Where Description='アダプタ名'", , 48)

For Each objItem In colItems
Exit For
Next
'IP Address, Subnet Maskを指定
lngRet = objItem.EnableStatic(Array("192.168.1.201"), _
Array("255.255.255.0"))

If lngRet Then
WScript.Echo "Err"
End If

'アダプタ名'は事前に調べてください。

P.S. 管理人むたぐちさんへ

先日は、どうもありがとうございました。
RegReadメソッドでは、"\"の含まれるRegstryKeyが取得できないのですね。
お礼が遅くなってすみません。<(_ _)>

ばんのしゃーによかばんた さん 2004年 10月 29日 15時 14分 33秒

ストリーム名を列挙するサンプルです。

Excelで新しいブックを開き、Module1.BASとClass1.CLSを「ファイルをインポート」して保存する。

EnumStream.VBS
――――――――――――――――――――――――――――――――――――――
Option Explicit

Class EnumStreams
Private xl
Private book
Public Win32
Public Error
Sub Class_Initialize()
Set xl=CreateObject("Excel.Application")
'xl.Visible=True
Set book=xl.WorkBooks.Open(Left(WScript.ScriptFullName,InStrRev(WScript.ScriptFullName,"\")) & "EnumStreams.XLS")
Call xl.run(book.Name & "!GetWin32Obj", Win32)
Set Error=Win32.GetError()
End Sub
Sub Class_Terminate()
Set Error=Nothing
Set Win32=Nothing
book.Saved=True
Set book=Nothing
xl.Quit
Set xl=Nothing
End Sub
End Class

Dim es
Dim arr
Dim names
Dim name
Dim fname
fname="c:\vbs\excel\f" 'ファイル名を指定。

Set es=New EnumStreams
'call es.Win32.DeleteStream("c:\vbs\excel\f:a .txt") 'ファイル名:ストリーム名を指定。
names=es.Win32.EnumStreams(fname)
If IsEmpty(names) Then
WScript.Echo fname,es.Error.Source,es.Error.Number,es.Error.Description,es.Error.LastDllError
Else
WScript.Echo names
arr=Split(names,vbCrLf)
For Each name In arr
WScript.Echo Escape(name)
Next
End If
――――――――――――――――――――――――――――――――――――――

Module1.BAS
――――――――――――――――――――――――――――――――――――――
Attribute VB_Name = "Module1"
Public Const MAX_PATH = 260

Public Type WIN32_STREAM_ID
dwStreamID As Long
dwStreamAttributes As Long
dwStreamSizeLow As Long
dwStreamSizeHigh As Long
dwStreamNameSize As Long
End Type

Public Type WIN32_STREAM_NAME
cStreamName As String * MAX_PATH
End Type

Public Const GENERIC_READ = &H80000000
Public Const INVALID_HANDLE_VALUE = -1
Public Const FILE_SHARE_READ = &H1
Public Const OPEN_EXISTING = 3
Public Const FILE_FLAG_BACKUP_SEMANTICS = &H2000000

Public Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Declare Function BackupRead Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, ByVal bAbort As Long, ByVal bProcessSecurity As Long, lpContext As Any) As Long
Public Declare Function BackupSeek Lib "kernel32" (ByVal hFile As Long, ByVal dwLowBytesToSeek As Long, ByVal dwHighBytesToSeek As Long, lpdwLowByteSeeked As Long, lpdwHighByteSeeked As Long, lpContext As Long) As Long
Public Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" (ByVal lpFileName As String) As Long

Public Sub GetWin32Obj(obj)
Set obj = New Class1
End Sub
――――――――――――――――――――――――――――――――――――――

Class1.CLS
――――――――――――――――――――――――――――――――――――――
VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
END
Attribute VB_Name = "Class1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
Public Function EnumStreams(szFile) As String

Dim arr() As String
Dim ind As Long: ind = 0

' Open the file
Dim hFile As Long
hFile = CreateFile(szFile, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0)
If hFile = INVALID_HANDLE_VALUE Then
Exit Function
End If

' Prepare for execution
Dim lpContext As Long: lpContext = 0
Dim sid As WIN32_STREAM_ID
Dim dwRead As Long
Dim wszStreamName As WIN32_STREAM_NAME

' Enumerate the streams...
Dim bContinue As Boolean: bContinue = True
Do While (bContinue)
' Calculate the size of the variable length
' WIN32_STREAM_ID structure
sid.dwStreamID = 0
sid.dwStreamAttributes = 0
sid.dwStreamSizeLow = 0
sid.dwStreamSizeHigh = 0
sid.dwStreamNameSize = 0
Dim dwStreamHeaderSize As Long
dwStreamHeaderSize = LenB(sid) + sid.dwStreamNameSize

bContinue = BackupRead(hFile, sid, dwStreamHeaderSize, dwRead, False, False, lpContext)

If dwRead = 0 Then Exit Do
If dwRead <> dwStreamHeaderSize Then Exit Do

' At this point, we've read the header of the i.th
' stream. What follows is the name of the stream and
' next its content.

' Read the stream name
Call BackupRead(hFile, wszStreamName, sid.dwStreamNameSize, dwRead, False, False, lpContext)
If dwRead <> sid.dwStreamNameSize Then Exit Do

' A stream name is stored enclosed in a pair of colons
' plus a $DATA default trailer. If the stream name is
' VersionInfo it's stored (and retrieved) as:
' :VersionInfo:$DATA
If dwRead > 0 Then
Dim pwsz As String: pwsz = ""
Dim k
For k = 1 To dwRead
pwsz = pwsz & MidB(wszStreamName.cStreamName, k * 2 - 1, 1)
Next
' MsgBox (pwsz)
Dim wp As Long
wp = InStr(pwsz, ":$DATA")
Dim StreamName As String
StreamName = Left(pwsz, wp - 1)
ReDim Preserve arr(ind)
arr(ind) = StreamName
ind = ind + 1
' MsgBox (StreamName)
End If

' Skip the stream body
Dim dw1 As Long, dw2 As Long
Call BackupSeek(hFile, sid.dwStreamSizeLow, sid.dwStreamSizeHigh, dw1, dw2, lpContext)
Loop

Call CloseHandle(hFile)

EnumStreams = Join(arr, vbCrLf)

End Function
Public Function DeleteStream(szFile) As Long
DeleteStream = DeleteFile(szFile)
End Function
Public Function GetError() As Object
Set GetError = Err
End Function
――――――――――――――――――――――――――――――――――――――

最初、
Dim wszStreamName as String
wszStreamName=Strings(MAX_PATH,0)
Call BackupRead(hFile, wszStreamName, sid.dwStreamNameSize, dwRead, False, False, lpContext)
Dim pwsz as String
pwsz=Left(wszStreamName,InStr(wszStreamName,vbNullChar)-1)
のようにやってみたのですが、どうもうまく行きません。
どういうときはうまく行って、これはなぜ駄目なのか、ご教授お願いします。

For k = 1 To dwRead
pwsz = pwsz & MidB(wszStreamName.cStreamName, k * 2 - 1, 1)
Next
これも、誰かがUnicode文字列をANSI文字列だと思って、アンパックしているみたい。
何故なんでしょう。

ばんのしゃーによかばんた さん 2004年 10月 29日 15時 14分 00秒

>ヤーポンレン さん 2004年 09月 30日 17時 27分 11秒
> ・Shellを使う以外にファイルの所有者や作成者など、「概要」タブに
>  表示される項目を取得できる方法

NTFSのStreamに格納されている、SummaryInformation を取り出す方法です。

file="c:\folder\file.txt"
Const adTypeBinary = 1
Const adSaveCreateOverWrite = 2
Set Src = CreateObject("ADODB.Stream")
Src.Open
Src.Type = adTypeBinary
Src.LoadFromFile file & ":" & chr(5) & "SummaryInformation"
a=Src.Read(Src.Size)
For n=1 To Src.Size
WScript.Echo n,AscB(MidB(a,n,1))
Next
Src.SaveToFile "Summary.txt", adSaveCreateOverWrite
Src.Close
Set Src = Nothing
WScript.Quit

ポイントは、
指定するファイル名。 & ":" & chr(5) & "SummaryInformation"
バイナリファイルなのでADO.Streamを使用します。

データ構造は未調査?です。

さぁ、次は、stream名を列挙するサンプルも。

玉緒 さん 2004年 10月 27日 17時 46分 16秒

ばんのしゃーによかばんたさん、ありがとうございました。

早速、使用してみましたが上手く動きました。ありがとうございます。
もうひとつ、ご質問があるのですが、
Call GetObject(,"Excel.Application")
他のソフトを監視するには上記のExcel部分を変更すれば良いのでしょうか?

初心者のため、変な質問かもしれませんが教えてください。
HELPをいろいろ見たのですが、よくわかりませんでした。

ばんのしゃーによかばんた さん 2004年 10月 26日 17時 20分 33秒

>玉緒 さん 2004年 10月 25日 15時 38分 33秒
>Scriptでエクセルのログを取りたいのですが可能でしょうか?
>1. scriptを常時起動させている(loop)
>=> プロセスを監視
>2. excel.exeが起動したと同時にログを吐き出す。
>3. excel.exeが終了したと同時にログを吐き出す。
>4. プロセスを監視する。
>5.終了はWindowsが終了と同時。

こんなのでどうでしょう。

Dim fStart
fStart=False
Do
: Call GetExcel()
: If fStart Then
: : If Err.Number<>0 Then
: : : fStart=False
: : : WScript.Echo Now,"- Excel Stopped."
: : End If
: Else
: : If Err.Number=0 Then
: : : fStart=True
: : : WScript.Echo Now,"- Excel Started."
: : End If
: End If
: Set xl=Nothing
: WScript.Sleep 10000
Loop

Sub GetExcel()
: On Error Resume Next
: Call GetObject(,"Excel.Application")
End Sub

ばんのしゃーによかばんた さん 2004年 10月 25日 17時 08分 03秒

JScript.NETの習作です。

フォルダの更新日時をフォルダ配下の最新のものに変更します。

// dtouch.JS
import System
import System.IO

var CommandLineArgs : String[]=Environment.GetCommandLineArgs()

for(var k=1;k<CommandLineArgs.Length;k++){
var path=CommandLineArgs[k];
if(Directory.Exists(path)){
dtouch(path);
}
}

function dtouch(path){
var lwdt : DateTime=Directory.GetLastWriteTime(path);
var files : String[]=Directory.GetFiles(path);
for(var k=0;k<files.Length;k++){
var file=files[k];
var wdt : DateTime =File.GetLastWriteTime(file);
if(lwdt<wdt) lwdt=wdt;
}
files=Directory.GetDirectories(path);
for(k=0;k<files.Length;k++){
file=files[k];
dtouch(file);
wdt=Directory.GetLastWriteTime(file);
if(lwdt<wdt) lwdt=wdt;
}
try{
// Directory.SetCreationTime(path,lwdt);
// Directory.SetLastAccessTime(path,lwdt);
Directory.SetLastWriteTime(path,lwdt);
} catch(e){
print(e);
}
}

ばんのしゃーによかばんた さん 2004年 10月 25日 17時 07分 32秒

バッチ実行(//B)だと、エラーが分かりません。
そういうときは、以下のparadigmは如何でしょう。

class x
sub class_terminate()
wscript.stdout.writeline Join(Array("!",err.number,err.description))
end sub
end class
set xx=new x

MsgBox "prompt" 'スクリプト本体


これを、CScriptで、標準出力をfileにリダイレクションして、エラー記録を残します。

ポイントは、
try finallyのvbscriptでの代用として、class_terminateを利用。
wscript.echo も使えないので、wscript.stdout.writelineで代用。

Return