Nomu さん 2003年 05月 02日 18時 25分 49秒

> ishiさん
動作確認していませんが、
Msgbox "abc" & chr(34) & "def"
で 結果的に abc"defにならないですか?

SQL文をコード内に書くときに、シングルクオーテーション
の可読性向上のために、よくChr(39)を使っています。
これでは無理でしょうか?

ishi さん 2003年 05月 01日 20時 07分 24秒

>さざなみ さん
それもやってみましたが"がなくなってしまいました。

CScript test.vbs "a""b" c
実行結果
ab
c

さざなみ さん 2003年 05月 01日 09時 59分 00秒

さざなみです。

>ishi さん
> 引数の文字列の中に"(ダブルクォテーション)を含めたいのですが、
> エスケープの仕方が分かりません。

ダブルクォテーションを二つ並べるのはどうでしょう?

msgbox """"

ishi さん 2003年 04月 29日 20時 09分 27秒

引数の文字列の中に"(ダブルクォテーション)を含めたいのですが、
エスケープの仕方が分かりません。
初歩的な質問かもしれませんが、どなたか教えて頂けないでしょうか?

CScript test.vbs "ab\"c" d
CScript test.vbs "ab^"c" d
CScript test.vbs "ab~"c" d
CScript test.vbs "ab'"'c" d
といった様に思いつくものは試してみたのですが。。。

test.vbs
--------------------------------
Set objArgs = WScript.Arguments
For I = 0 to objArgs.Count - 1
WScript.Echo objArgs(I)
Next
--------------------------------

なるなる さん 2003年 04月 29日 12時 00分 57秒

いつもお世話になります。
以前、2003年 03月 16日 00時 44分 54秒 の投稿において、pdfファイルを自動保存する方法を教えて頂いたのですが、その後、HTMLドキュメントも対象に上がり、object等の変更をしようと調べたのですが、わからずじまいでした。そこで試しにそのままで実行すると成功したのですが、何か釈然としません。HTMLドキュメントに適したobject等、修正すべき点のご指示をよろしくお願いします。

KKC さん 2003年 04月 25日 12時 58分 33秒

始めましてwindows2000sp3でフォルダをweb表示にした時に
mp3やavi等のメディアファイルをシングルクリックしても
プレビューするためのメディアプレイヤーを起動しないで
ファイルサイズだけ表示出来るようにカスタマイズは出来ないでしょうか?

INSTALL さん 2003年 04月 23日 11時 32分 18秒

初めまして。
アプリケーションのインストールを自動化したいのですが、
その手段としてWSHを使用するのはありなのでしょうか?
又、他の方法を知っている方がいらっしゃいましたら、
よろしくお願い致します。

kuro さん 2003年 04月 23日 10時 54分 06秒

初めまして kuroと申します。
宜しくお願いいたします。

早速ですが、現在VBSの”RegRead”を使用してレジストリー情報を取得するスクリプトを作成しました。
内容的には、レジストリーのある一部を読みに行きそのキーにこちらが必要としている”値”があるかどうかを判断させるものです。
通常”RegRead”は、レジストリの値が無い場合エラーを返してくれるのですが、PCによりそのエラーが帰って来ずにスクリプトが終了してしまいます。(PCにより動作したり動作しなかったりします。)
原因をご存知の方がいらっしゃましたら宜しくお願いいたします。

OS Windows2000server English
WSHは全て”WSH 5.6”


On Error Resume Next

Dim WSHShell,rg
Set WSHShell = WScript.CreateObject("WScript.Shell")

rg = WSHShell.RegRead("HKLM・・・",1,True)

If rg = 1 Then

WSHShell.RegDelete("HKLM・・・",1,True) ←これはRegReadで                     読んだものとは別のもの

Else

Msgox "・・"&rg

End If



おお さん 2003年 04月 23日 10時 30分 03秒

起動中のIEから現在アクティブなものを特定することはできますか
(タイトルを指定せずに)
どなたかご存知でしたら教えてください。
よろしくお願いします。

初心者B さん 2003年 04月 22日 19時 47分 56秒

いつも参考にしております。
とあるページでWindows95でもIE5.5SP2が入っていればWSHを使用出来ると書いてあったような気がするのですが…そのページが見つからず真意の程がわかりません。
Windows95+IE5.5SP2でWSHは動作するのでしょうか。
どなたかご存知でしたら教えていただけると助かります。
よろしくお願いします。

初心者A さん 2003年 04月 22日 00時 43分 01秒

初めて投稿させていただきます。
WSHでDB(たとえばACCESS)の値をWORD文書の特定の位置に挿入してWORD文書を保存したいのですが、できるでしょうか。

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

マック さん 2003年 04月 21日 09時 31分 39秒

To 管理人むたぐち さん
回答ありがとうございます。

そうですよね。私もそう思っていたのですが、
現象は、前にでない+最小化されて点滅状態になります。

IEの設定でしょうか?

toshi さん 2003年 04月 21日 08時 49分 51秒

To 管理人むたぐち さん
回答ありがとうございます。

新しいバージョンについては問題なしですか。
わかりました。ありがとうございます。

いちにい さん 2003年 04月 20日 10時 53分 47秒

記事検索PGの件ですが、単なる勘違いだったみたいです。
また、ゴミ残しちゃって、すんません。

とうしろう さん 2003年 04月 19日 15時 24分 09秒

To 管理人むたぐち さん
早速のご回答、誠にありがとうございます !
>ShellオブジェクトをCreateObjectして、
>そのWindowsコレクションからアクセス
おーっ!!なるほど・・そうすれば良かったワケですか !
おかげさまでバッチリうまくいきました。
ほんとうにありがとうございました。(^人^)感謝♪

管理人むたぐち さん 2003年 04月 18日 20時 58分 41秒

●WSHでCGIを作れるか

ぬるさんの真似ですが。

とりあえず、ANHTTPDのCGI設定で
 拡張子 .vbs
 実行プログラム cscript //nologo
のように登録します。
 拡張子 .cgi
 実行プログラム cscript //nologo //E:vbscript
のようにしておけば、クライアントからはvbsで動作してることすらばれないでしょう(w
ただしこれだと他のperl製スクリプトが動かなくなってしまいますが。
(//E:で指定する、.wsfのスクリプトエンジン名は何だろう?)

POSTメソッドで送られてくるデータは、標準入力を読めば良いので、
Set stdIn = WScript.StdIn
stdIn.ReadLine
...
のようにテキストストリームとして読み込みます。

GETメソッドの場合、"QUERY_STRING"という環境変数にデータが入りますので、
Set WshProcEnv =WshShell.Environment("Process")
WshProcEnv("QUERY_STRING")
のようにして取り出します。
"REMOTE_ADDR"、"HTTP_REFERER"等の他の環境変数も同様に取得できます。

ただし、これらの文字列はURLエンコードされているので、これをデコードしてやる必要があります。
JScriptのdecodeURI/unescapeメソッドはUnicode対応のため使用できないので、自前で
関数を用意してやりました。

Function UrlDecode(Source)
On Error Resume Next
sTmp=""
iCount = 1
lSrcLen=Len(Source)
Do Until iCount > lSrcLen
sChr = Mid(Source,iCount,1)
iCount = iCount+1
If sChr="+" Then
sChr = " "
ElseIf sChr="%" Then
sHex = Mid(Source,iCount,2)
iCount = iCount + 2
iAsc = CByte("&H" & sHex)
If (&H00 <= iAsc And iAsc <= &H80) Or _
(&HA0 <= iAsc And iAsc <= &HDF) Then '1バイト文字
sChr=Chr(iAsc)
ElseIf (&H81 <= iAsc And iAsc <= &H9F) Or _
(&HE0 <= iAsc And iAsc <= &HFF) Then '2バイト文字
sChr = Mid(Source,iCount,1)
iCount = iCount + 1
If sChr="%" Then
sHex2 = Mid(Source,iCount,2)
iCount = iCount + 2
Else
sHex2 = Hex(Asc(sChr))
If Len(sHex2) = 1 Then
sHex2 = "0" & sHex2
End If
End If
sChr=Chr(CInt("&H" & sHex & sHex2))
End If
End If
sTmp=sTmp & sChr
Loop
UrlDecode = sTmp
End Function

こんな感じです。

で、出力は標準出力にすればいいので、
Wscript.Echo "Content-Type: text/html"
Wscript.Echo
Wscript.Echo "<html><body>hogehoge</body></html>"

のようにすればいいわけです。
これで一応、WSHでCGIが可能となったわけです。
BASP21なんかも併用すれば、文字コードの変換やバイナリの出力等も可能でしょう。

で、現在2ちゃんねる互換スクリプトを書いてるわけです。
現在、bbs.vbs(書き込みスクリプト)の基礎が完成し、read.vbs(読み込みスクリプト)と
subbbs.vbs(スレ立てスクリプト)を作成中といったところです。
2ちゃんねる互換のトリップも使えますよ。(某所にperlのcrypt関数のJavaScript版が
あったのでそれを利用。salt算出等はトリップ解析ページを参考に)
admin用のスクリプトはHTAで書くつもりです。

管理人むたぐち さん 2003年 04月 18日 20時 27分 03秒

●DMonkeyについて

http://cgi19.plala.or.jp/lukewarm/
ぬるさんという方のサイトなんですが、
4/17日の記事に、ANHTTPD + DMonkeyでCGIという内容がありました。
…先を越されてしまった(w

ところでこのサイトは、VxEditorのマクロ(DMonkeyScript)とか
色々為になる情報をほぼ毎日更新されていて、参考になります。

ちなみにDMonkeyとは、JavaScript互換のDelphi製アプリへの組み込み型スクリプトエンジンで、
Irvine(ダウンロードソフト)やVxEditorなどにマクロ言語として搭載されています。

その言語仕様は強力で、JScriptの比ではありません。
できることを列挙するのも大儀なくらいです。
WSHで出来ない、あるいはCOMコンポーネントを使えばできると言っていたことは、
大概デフォルトでできると言っても過言じゃないでしょう。
詳しくはヘルプでも眺めてみてください。

組み込みだけでなく、DMonkeyScriptHostというのもあって、これを使うと
WSHと同じようにスタンドアロンでスクリプトを実行させることもできます。
http://sourceforge.jp/projects/dmonkey/

VxEditor+DMonkey+WSH補完クン(DMSの補完も可能)が今のところJavaScript系の最強環境
じゃないですかね。
WSHは「システム標準機能」であるという以外のメリットは殆どなくなってきたかもしれません。
http://homepage3.nifty.com/x-labo/(VxEditor)
http://www.geocities.co.jp/SiliconValley-Oakland/4672/(WSH補完クン)

とはいえ、最近はWSHの認知度もかなり高まってきたようで、結構あちらこちらで目にします。
どうも、何でもっと早く流行らなかったんだろうって感じなんですがね(w

たとえば、TClockというシステムトレイの時計機能拡張ユーティリティを活用するのに、
WSHが使われたりしてます。

□ Scripts for TClock □
http://pc2.2ch.net/test/read.cgi/win/1043497952/
TClock Script help
http://page.freett.com/TClock2ch/


To: Layz さん
どうもありがとうございます。
うちのページもリンク集を整理しなきゃなあ。
新規追加もいっぱいあるし…。

Layz さん 2003年 04月 18日 19時 18分 27秒
URL:http://plaza25.mbn.or.jp/~Layz/

現在、仕事で、ファイルコピーのvbsを作成中です。
リンクを貼らせていただきました。
有用な情報公開ありがとうございます。

管理人むたぐち さん 2003年 04月 18日 16時 17分 59秒

To: toshi さん
> scrrun.dllについて
おそらく、新しいバージョンを上書きする分には問題ないと思います。
ただし、手動で上書きはまずいでしょうね。コンポーネントの登録とかありますし。


To: bambi さん
rundll32.exe Shell32.dll,ShExitWindowsEx 1は、OSのバージョンによっては動かないようです。
すぐ下にyoanさんがWinXPでのシャットダウン方法を書かれてますので、参照してください。
WMIを使う方法なら、MEや2000あたりでも動くと思います。


To: チャブーン さん
お久しぶりです。

最近、私もwebサーバー(今のところLAN内限定ですが)などを立てて遊んだりしてます。
AN HTTPD+Active Perlで2ちゃんねる互換掲示板を動かしたり、
無料DynamicDNSサービス+DiCEを利用して固定ホスト名を実現したりしてます。

AN HTTPDでCGIを動かすのに、perlじゃなくてWSHを使ってみるという実験も進行中です。
実は今ひそかに、WSHで動く2ちゃんねる互換スクリプトなんてものを作成中だったりします。
完成したら、スクリプトを公開しようと思ってますんで、乞うご期待。
はっきり言って使う人はいないと思いますが、一応WSHでもCGIできるんだ、ということを
示すという意味で…。(AN HTTPDでASPが動くようになったら、それこそ全く無意味ですけど)

もしかするとwebサーバーも公開して掲示板を開放するかも…。
ただし、どこまで実用になるか分かりませんけどね。上り回線は512kbpsしかありませんし、
電気代も馬鹿にならないだろうし。


To: とーしろう さん
●起動中のIEを操作する方法

GetObject関数はIEには適用できないので、ShellオブジェクトをCreateObjectして、
そのWindowsコレクションからアクセスします。

Set Shell=WScript.CreateObject("Shell.Application")

For Each Window In Shell.Windows
If TypeName(Window.document)="HTMLDocument" Then
Window.Navigate "http://xxxxxxxxxxxxxxxx"
Exit For
End If
Next


To: マック さん
> 起動するIE以外にIEが存在している場合、必ず、起動したIEを
> 前に持ってくるにはどうすればできるのでしょうか?
IE.Visible = true;した時点で、最上位に表示されると思うんですが…?


To: いちにい さん
> AKiOSさんの掲示板 記事検索プログラム
Win2000+IE6ですが、うちでは普通に動いてます。
たしか設定項目は無かったような気がするんですが…。


To: Nomu さん
たしかに、
Replace("■■■■■■■■■■","■","△",5,1,vbBinaryCompare)
は、"△■■■■■"を返します。
5文字目から最後までの文字列に対して、一文字を変換した文字列が
返ってるわけですから、リファレンスに偽りはないと思いますよ。

Replace("□□□□□□□■■■","■","△",5,1,vbBinaryCompare)
なども試してみると、どういう処理をしてるのか、分かりやすいと思います。
(この場合、"□□△■■"が返ってくる)

もし、最初の五文字を残したいのならば、Left関数を通したものと繋げてやる必要があります。
まあ、何か変な仕様だという気もしないでもないですが…。

Nomu さん 2003年 04月 18日 12時 10分 43秒

唐突ですが、HelpのReplace関数の記述っておかしくありませんか?
オンラインヘルプの記述によれば、
/* *********************** 引用開始 ****************************** */
Replace
(expression, find, replacewith[, start[, count[, compare]]])引数
expression
必ず指定します。置換する文字列を含む文字列式を指定します
find
必ず指定します。検索する文字列を指定します。
replacewith
必ず指定します。置換する文字列を指定します。
start
省略可能です。引数 expression 内の内部文字列の検索開始位置を指定します。count と共に使用してください。
count
省略可能です。置換する文字列数を指定します。この引数を省略すると、既定値の -1 が使用され、すべての候補が置換されます。start と共に使用してください。
compare
省略可能です。文字列式を評価するときに使用する文字列比較のモードを表す数値を指定します。設定する値については、次の「設定値」を参照してください。この引数を省略すると、既定値の 0 が使用され、バイナリ モードで比較が行われます。
/* *********************** 引用終了 ****************************** */
と記載されています。

普通に日本語として読み取ると、startとcountを指定すれば、
検索対象文字列の中の任意位置から任意長の文字列が
置換できるように見えます。

でも、
■■■■■■■■■■
という文字列に対して
Replace("■■■■■■■■■■","■","△",5,1,vbBinaryCompare)
ってやると、×なんです。期待する動作は5文字目を△に置換
してほしいんですが、先頭文字が変わるんですよ。
Startの意味が記述がおかしいような・・・

いちにい さん 2003年 04月 17日 13時 12分 36秒

むたぐちさん、こんちは。

AKiOSさんの掲示板 記事検索プログラムが、ツールボタンとか押しても反応無し、
動かないんですけど、どっか弄るとこありましたっけ?
# ソース見ても、よくワカランので見るの辞めた。

つまらん質問でスマンっす。(笑)
因みに、IEは、5になってます。


マック さん 2003年 04月 17日 08時 00分 11秒
URL:IEを最前面で起動

こんにちわ、マックです。
WinXp, IE6

以下のスクリプトでIEを起動しています。
var IE = WScript.CreateObject("InternetExplorer.Application");
IE.Navigate("http://xxxxxxxx");

IE.Visible = true;
IE.AddressBar = false;
IE.MenuBar = false;
IE.ToolBar = false;

起動するIE以外にIEが存在している場合、必ず、起動したIEを
前に持ってくるにはどうすればできるのでしょうか?

よろしくお願いします。

とーしろう さん 2003年 04月 16日 22時 54分 34秒

えっと、現在試作しているソースをUPしてみます。
WSHではリストボックスなどのコントロールが無いため、"TTSねお"という
VBベースのフリー開発ツールを使い、フォームを表示してます。
その中のリストボックスで選択したItemによって、レジストリに特定の数値
を格納し、その後↓のプロを呼び出してますが、別のItemをクリックすると
NewWindow2イベントが無視され、新しいインスタンスが生成されてしまう
のです・・(T_T)
IEが出てきた後は、フォーカスがIEに移った状態で表示されてるのですが・・。

Dim WshShell, IE, ppDisp, MyAr
Dim bKey, i, Ck, Cancel
Dim SetURL, MyCk
Const MyURL = "http://www.miller.co.jp/cgi-bin/member/chart.cgi?"

MyAr = Array("J", "O", "N", "Z")
Set WshShell = WScript.CreateObject("WScript.Shell")
bKey = WshShell.RegRead("HKCU\Software\CHNUM")
Set WshShell = Nothing
If Len(bKey) = 3 Then
SetURL = MyURL & bKey & "I"
ElseIf Len(bkey) = 4 Then
SetURL = MyURL & bKey & "T"
Else
MsgBox "異常な値です"
WScript.Quit
End If
Cancel = False
Set IE = WScript.CreateObject("InternetExplorer.Application", "IE_")
With IE
.Navigate SetURL
Do While .Busy
Loop
Do While .ReadyState <> 4
Loop
.Visible = True
.TheaterMode = True
MyCk = .Document.Title
If MyCk = "" Then
For i = LBound(MyAr) To UBound(MyAr)
.Navigate MyURL & bKey & MyAr(i)
Do While .Busy
Loop
Do While .ReadyState <> 4
Loop
MyCk = .Document.Title
If InStr(1, MyCk, "株価", 1) > 0 Then
Ck = True: Exit For
End If
Next
If Ck <> True Then
.Quit
End If
End If
End With

Sub IE_NewWindow2 (ByVal ppDisp, ByVal Cancel)
Cancel = True
End Sub

とーしろう さん 2003年 04月 16日 14時 35分 07秒

すいません、初めて質問させていただきます。
「もし現在InternetExplorerが立ちあがっていたら、新しいURLで更新する」
というコードは、どのように書けば良いのでしょーか ?
(単純に立ち上げるだけなら分かります。)
GetObjectの使い方がイマイチ良く分かってなくて、失敗の連続で困ってます。
よろしくご教授お願いします。m(_ _)m

チャブーン さん (mkobu@chabnet.jp) 2003年 04月 15日 23時 01分 37秒
URL:http://www.chabnet.jp/

チャブーンです。

大変お久しぶりです。以前掲示板に書き込みいただいてから
だいぶ時間が経っていますが...。

まずはとりあえず、生存はしとります。

ちょっと 3 月中は多忙&サーバ不調で死にまくってましたが、今はなんとか
持ち直しております。ちょっと時間が出来てますので、時々は見に来て書き
込みなんぞをしようかなぁと、思っています。

東京はすっかり暖かいので、昨日今日の雨でけっこういい塩梅になってる気がします。

#場違いな私信の書き込み、ごめんなさいね>皆様

bambi さん 2003年 04月 15日 16時 53分 09秒

全くの初心者です。
よろしくお願いします。

PCに、WSHの5.6を入れて以下の文をメモ帳で書いて、*.vbsで
保存したのですが、
実行すると、エントリがありませんと出てきます。
何故なのか教えてください。

Set WshShell=CreateObject("Wscript.Shell")
WshShell.Run "C:\WINNT\SYSTEM32\rundll32.exe Shell32.dll,ShExitWindowsEx 1"

sophia(rc) さん 2003年 04月 15日 11時 36分 48秒

73-24 さりげなくWMI さん の、

> 今Default GatewayをSetGatewaysを使用して変更しようとしているのですが、
> 実行すると”種類が一致しません”というエラーになってしまいます。
って、解決されたんでしょうか?自分も同じ症状で悩み、この度解決したので、
遅レスですがやりかたを。

objNAC.SetGateways(array("192.168.0.254", "192.168.0.253"), array(100, 200))

のように、第一第二引数ともに配列にして渡せばちゃんと実行されるようです。

参考になったサイト:
Examples of WMIC commands for Windows .NET SERVER Family
http://support.microsoft.com/servicedesks/webcasts/wc072402/listofsampleusage.asp?&SD=GN&LN=JA&gssnb=1

toshi さん 2003年 04月 15日 11時 02分 29秒

はじめまして。
scrrun.dllについて調べていたらこちらのHPにたどり着きました。

上記DLLについて質問があるのですが、
このDLLにはいくつものバージョンが存在すると思います。
(私が確認できたバージョンは5.6.0.6626と5.1.0.5010でしたが)
新しいバージョンのDLLを古いバージョンのDLLに上書きした場合、
それまでのアプリ等が動かなくなるということがあるのでしょうか?

一応そのようなことが無いように作られているとは思うのですが、
公式な文章等が見つからなかったもので・・
ご存知の方がいらっしゃいましたら教えて頂きたいく。。
よろしくお願いします。

管理人むたぐち さん 2003年 04月 14日 19時 01分 04秒

To: One さん
●フォルダを閉じる方法

次のようなスクリプトで可能です。
Windowsのバージョンによっては動作しないかも。
Win2000未満の場合、window.document.Folder.Self.Pathをwindow.document.Folder.Items.Item.Path
に変えると動作するかもしれません。
また、IEのウィンドウが立ち上がってるとエラーが出ると思います。
回避する方法もあるにはありますが面倒なのでon error resume nextを使ってくださいませ。

Set Shell=WScript.CreateObject("Shell.Application")
sDir="C:\" 'フォルダのパス

Shell.Open sDir 'フォルダ開く

WScript.Sleep 2000 '2sec待つ

For Each window In Shell.Windows
If window.document.Folder.Self.Path = sDir Then
window.Quit 'フォルダ閉じる
Exit For
End If
Next


To: yoan さん

WinXPにはshutdownコマンドなんてのがあるんですね。知らなかったです。


To: assert さん

タブブラウザがWebBrowserコンポーネントのセキュリティ設定を弄る時には、
なにやら特殊なことをしてるようです。、
http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/hosting/wbcustomization.asp
にそれらしきことが書いてあるようですが、私には理解不能でした。
おそらく、WSHからでは無理なんじゃないでしょうか。

タブブラウザの中で、Sleipnir等はオートメーションでWSHからセキュリティ設定を
操作できるので、こちらを利用してみるのもいいかもしれません。


To: ぺん さん

CreateObject関数自体に、タイムアウト指定のオプションは無いので、
他の方法を探す必要がありますね。
CreateObject関数を使って、イベントドリブンなスクリプトを
書くことは可能なので、もし該当のオブジェクトにイベントが実装されていれば、
それを使えば何とかなるかもしれません。

ぺん さん 2003年 04月 11日 20時 43分 17秒

VBSからコード変換プログラムを実行させる処理を行っています。
VBSはバッチイメージで動作させていて、メッセージ等は出せません。
その変換プログラムはマルチでは動作せず、実行中に呼び出しをかけた場合、
待ち状態になります。
細かく書きますと、
データAの変換中に、データBの変換を行なおうとすると、
どうやらデータB変換VBSのCreateObject箇所(変換プログラムオブジェクト用)で待ち状態になり、
データAの変換が終了した時点で、データBのObject生成が行なわれ、変換・・
となっているようなのです。

通常は上記のように、A変換終了後にB変換という感じで動作するのですが、
時々データBの変換が行なわれない場合があります。
タイミング・原因等、調査しているのですが、まだつかめません。
変換データサイズがすごく大きい場合などに起こりやすいようですが、
必ずしも起こるわけではなく・・・。

CreateObjectの箇所で待ち状態となった場合、タイムアウトの指定とか、
タイムアウト後の処理の記述方法とか、
うまい対処の仕方はありますでしょうか?

どなたか知恵をおかしください。
よろしくお願いします。



assert さん 2003年 04月 09日 03時 10分 44秒

Windows2000でWshを使っています。
IEを使ってWEBに関することデータ収集などをしています。

よくWebBrowserコンポーネントを使用した、タブ型ブラウザなどが
公開されていますが、あのようなブラウザには、よくJavaScriptの
On/Offボタンがが付いています。
外部からJavaScriptの有効無効を切り替えられるんだと思うのです
が、JavaScriptをOffにしてWebBrowserコンポーネントを使いたい
のですが、どのようにすればよいのでしょうか?
ご存知の方いらっしゃったらお願いします。
#一応過去ログは全部落として'Java'でgrepしてみたんですが、それ
#っぽい話題は無かったように思います。

インストマニア さん 2003年 04月 07日 22時 13分 44秒

自己レスです。
start /w
にすればすみました。

おさわがせしました。

インストマニア さん 2003年 04月 07日 21時 20分 15秒

HIRO さん  今晩は。 
レスがついてないようなので知識の少ない私がレスします。
下記に記載したものは、私が普段使用しているもので、
ファイル名にファイルサイズを追記するものです。

TEST.txt → TEST327バイト.txt

追記したいファイルをまとめてドロップすると自動的にやってくれます。

参考になれば幸いです。

-------------------------------------------------
Set objArgs = WScript.Arguments

objcnt=objArgs.Count 'ドロップされたファイルの数をしらべてる。

for I=0 to objcnt - 1
fpath = objArgs(I) ' ここでパスを取得

'ファイルサイズを調べる。ファイルシステムオブジェクト使用

if fpath="" then WScript.Quit
Set objFS = CreateObject("Scripting.FileSystemObject")
set f = objFS.getfile(fpath)
s=f.Size

' 新しいファイル名=古いファイル名+サイズ+拡張子 にするための準備
' nameプロパティにはパスがない。
' 左から古いファイル名の文字を (古いファイル名の長さを調べる-4)個取り出す
' 拡張子は、右から4文字取り出す

oldfullname=f.name
oldname=Left(oldfullname, Len(oldfullname)-4)

'wscript.echo oldname
newname=oldname&" "&s&"バイト"&Right(oldfullname, 4)
'wscript.echo newname

f.name=newname

next
----------------------------------------------

インストマニア さん 2003年 04月 07日 20時 55分 25秒

皆様今晩。

windowsインストーラーを順番に起動するスクリプトをつくってみたのですが
だめでした。 希望する動作は、ひとつのインストールが終了したら次をインスト
という具合に。

知恵を拝借させてください。

Dim WSHShell
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "start msiexec /p C:\!\sp2admin\sp2admin.msp /a C:\!\o2k_up\data1.msi SHORTFILES=TRUE /qb",1,True
WSHShell.Run "start msiexec /p C:\!\sp2admin\out2kmst.msp /a C:\!\o2k_up\data1.msi SHORTFILES=TRUE /qb",1,True

yoan さん 2003年 04月 05日 20時 41分 42秒

To: よし さん

SendKeysは、使わずにすむなら使いたくないですよね。
やむなく使っていると、時々「あっ!」と悲鳴をあげてしまう(--;

よし さん 2003年 04月 02日 23時 05分 55秒

to yoan さん
ありがとうございました。
うまく行きました。

一定時間後にPCを終了させることをしたかったのです。
ベタなコードでお恥ずかしいですが次のようなものを
作りました。

Dim Now_Time
Dim End_Time
dim IE
end_minute = cdbl(InputBox("何分後に終了しますか入力してください", "終了"))

End_Time = TimeSerial( Hour(Time) , Minute(Time) + end_minute , Second(Time) )
Do
Now_Time = Time
WScript.Sleep 5000
If Now_Time >= End_Time Then
Exit Do
End If
Loop

Set WshShell = WScript.CreateObject("WScript.Shell")
Set oSystemSet=GetObject ("winmgmts:{impersonationLevel=impersonate,(Shutdown)}") _
.InstancesOf("Win32_OperatingSystem")
For Each oSystem In oSystemSet
oSystem.Win32Shutdown 8
'0 ログオフ
'1 シャットダウン(電源は切れない)
'2 再起動
'4 強制終了?
'8 電源オフ
Next

最初は
Set WshShell = WScript.CreateObject("WScript.Shell")
Set Win =CreateObject("Shell.Application")
Win.ShutdownWindows
WScript.Sleep 500
WshShell.SendKeys "U"
としていたのですが、これですと他に起動している
プログラムがあるとそちらにキーを送ってしまい
うまく行きませんでした。

本当にありがとうございました。

yoan さん 2003年 04月 02日 22時 16分 28秒

WindowsXPでシャットダウンの追加。
下記のスクリプトでも落ちました。

Set WSHSHell=CreateObject("WScript.Shell")
'10秒後にシャットダウン
WSHShell.Run "C:\WINDOWS\SYSTEM32\SHUTDOWN.EXE -s -t 10"

shutdownコマンドのヘルプをご参照ください。

yoan さん 2003年 04月 01日 21時 53分 57秒

失礼しました。
私の下の書き込み、yoan 2003年04月01日21時28分32秒
電源切れました、と書きましたが、エラーになります(__)
2行目を途中で切ったのが無作法であったようで(^^;
あらためて、

Set WshShell = WScript.CreateObject("WScript.Shell")
Set oSystemSet=GetObject ("winmgmts:{impersonationLevel=impersonate,(Shutdown)}") _
.InstancesOf("Win32_OperatingSystem")
For Each oSystem In oSystemSet
oSystem.Win32Shutdown 8
'0 ログオフ
'1 シャットダウン(電源は切れない)
'2 再起動
'4 強制終了?
'8 電源オフ
Next

で試してみてください。

yoan さん 2003年 04月 01日 21時 28分 32秒

To: よし さん

Set WshShell = WScript.CreateObject("WScript.Shell")
Set oSystemSet=GetObject ("winmgmts: _
{impersonationLevel=impersonate,(Shutdown)}") _
.InstancesOf("Win32_OperatingSystem")
For Each oSystem In oSystemSet
oSystem.Win32Shutdown 8
'0 ログオフ
'1 シャットダウン(電源は切れない)
'2 再起動
'4 強制終了?
'8 電源オフ
Next

で、電源切れました。(XP)
元ネタは、
http://pc.2ch.net/win/kako/1009/10091/1009175619.html
の、479 名前: 11 投稿日: 02/02/18 00:30

よし さん 2003年 03月 31日 23時 33分 11秒

ずいぶん前にお世話になりましたが、すいません、また教えてください。
WinXPを使っているのですが、当HPの例のとおり
WINDOWSの終了のスクリプトを作ってもうまく動きません。
RUNDLL32.exeの場所が違うのだろうと
system32の下に指定してもだめです。

過去の掲示板も1年分くらい探しましたが見つけることができなかったので
書き込みしました。
よろしくお願いします。

One さん 2003年 03月 31日 01時 24分 28秒

こんばんは、WSH勉強し始めたばかりのものです。

ホルダーを開くのは、
Win.Open foldername
のようにすればいいのですが、(foldernameはパスを指定した変数)
反対に閉じるのはどのように記述したらいいでのしょうか?
Win.Close foldername
では,だめでした。(^^;

kuni さん 2003年 03月 30日 16時 21分 12秒

Basic認証ダイアログをパスする方法について
ご回答、ありがとうございました。

InternetExplorer.Applicationのイベントを拾ってみたりと、いろいろ
見当違いなことをやってみましたが、こんなにエレガントな方法がある
とは・・・大変参考になりました。

管理人むたぐち さん 2003年 03月 28日 17時 27分 17秒

To: suzu さん
CreateObject関数をお調べください。


To: kuni さん
●Basic認証ダイアログをパスする方法

たとえば、http://www.roy.hi-ho.ne.jp/mutaguchi/bbs/index.shtmlにBasic認証が
かけられている場合、http://username:password@www.roy.hi-ho.ne.jp/mutaguchi/bbs/index.shtml
を指定すると、ダイアログを開かずに認証をパスできます。
これは、一般的なWebブラウザで汎用的な方法です。

K-ScriptMakerをダウンロードしてみたのですが、これはエンコードがかかっていて、
実際はどういう風にWebアクセスしてるのか調べられなかったのですが、
もしIEを呼び出しているのであれば、この方法でいけるはずです。

ちなみにこの話とは直接は関係ないのですが、BASP21のsocketコンポーネントなどを使って
Basic認証をパスするには、GETメソッド発行時に、HTTPヘッダに次のようなものを指定します。

Authorization: Basic "username:password"をBase64でエンコードしたもの

BASP21にはBase64メソッドがあるので、それを使うと良いでしょう。


To: HIRO さん
FileSystemObjectを使えば、ファイルのコピーや削除などが可能です。
詳しくはヘルプをご覧下さい。
(この場合、単にリネームすればいいだけの気もしますが…)

HIRO さん 2003年 03月 27日 01時 07分 41秒

今回初めて投稿しています。
WSHを使用するのも初めてなので
下記のような事が出来るかどうかも分からないのですが
参考になるSAMPLEがあれば教えて頂きたく投稿しました。

現在実行しようとしている内容は
あるテキストファイルを削除する前に
そのファイル名をファイル名にシステム日付を付けた名称に
したいのです
(例)
実行前 TEST.txt 実行後 TEST20030327.txt というように
したいのです
その後 TEST.txt を削除するという流れを
作成したいのですが
どのようにすればよいのでしょうか?

よろしくお願いします。


kuni さん 2003年 03月 26日 20時 41分 22秒
URL:http://www.sara.ddo.jp

初めて投稿させていただきます.

WSHを利用して、Webページのログインの自動化を行っています。
K-ScriptMaker(http://www.asahi-net.or.jp/~QR5N-KT/soft/)というロ
グイン用スクリプトを吐き出してくれるツールでスクリプトを作成し、
サイトにあわせて、修正して使っています。

現状、FormへのユーザID、パスワードの入力に関しては自動化できてい
るのですが、認証ダイアログ(Basic認証)が表示されるタイプでは、対応
できません。

この場合、どのようにしたら、ダイアログの各エレメントにアクセスし、
ダイアログ上のテキストフィールドにIDとパスワードを入力し、OKボタ
ンを押下することができるのでしょうか?

suzu さん 2003年 03月 25日 17時 58分 44秒

申し訳ありません。
「管理人むたぐちさん、」と書いたつもりが、「たむぐちさん」になっておりました。大変失礼いたしました。

suzu さん 2003年 03月 23日 12時 52分 13秒

管理人たむぐちさん、
ご回答ありがとうございます。参考になりました。

すみませんが、追加で質問させてください。
『クライアントのWSHの機能をIEのVBSから呼び出』す際に、何か特別な宣言や構文が必要になりますでしょうか。基本的な質問で大変申し訳ありませんが、ご教示いただけたらと存じます。

宜しくお願いいたします。

管理人むたぐち さん 2003年 03月 21日 12時 02分 36秒

To: なるなる さん yoan さん

WSHの情報源は、触り始めたころは、月刊ASCIIの付録の特集がずいぶん参考になりました。
でも今はやっぱりネットが中心ですね。
今はMSの公式ヘルプが充実してますんで(昔は酷かった)、それだけでほとんど
済ませてます。

最近は新情報収集をさぼってますが、ちょっと前まではMSDNライブラリ、microsoft.public.scripting.wsh等
のニュースグループ、WSHのメーリングリスト、2ちゃんねるWindows板のWSHスレ等で
情報を仕入れてました。
もちろんGoogleもフル活用です。国内ではあんまり引っかからないですが、Web全体で
検索すると結構かかってきます。というか、ここの掲示板のログに頼ることも多いです。
あと、VBのオブジェクトブラウザを使って、ActiveXコンポーネントの仕様を調べたり、ですね。


To: suzu さん

IISとWSHでは、なかなか難しいと思います。
というのも、IIS(に限らずWebサーバー全般)からは、基本的にクライアントのファイルや設定には
触れないからです。
クライアントのWSHの機能をIEのVBSから呼び出せば可能ですが、セキュリティ警告が出てしまいます。
もしかするとクライアントのIEのバージョンによっては、実行すらさせないかもしれません。

そういうActiveXコントロールを開発するしか無いのではないかとも思いますね。
Windows Updateと同じ発想です。


To: マメ さん

私はウィルスやワームについては詳しくありませんので、アンチウィルスソフトを作ってる
会社のWebサイトなどを参考にしてみてください。


To: おやじ様OYJ さん
●環境に依存しない日付・時間のフォーマットで表示する方法

一応、FormatDateTime関数というのがあるんですが、これは「日付」と「時間」それぞれの
「長い形式」と「短い形式」を選択できるというだけで、これらの形式は結局「地域のプロパティ」
の設定に依存するのであまり意味がありません。

ので、自分で作ってやるしかないと思います。
たとえば、極めてカッコ悪いですがこんなのはいかがでしょうか。

MsgBox GetDateTime

Function GetDateTime()
GetDateTime=Year(Date) & "/" & FixNumber(Month(Date)) & "/" & FixNumber(Day(Date)) & _
"(" & GetWeekDayName(Weekday(Date)) & ")" & _
FixHour(Hour(Time)) & ":" & FixNumber(Minute(Time)) & ":" & FixNumber(Second(Time))
End Function

Function FixNumber(num)
FixNumber=Right("0" & CStr(num),2)
End Function

Function GetWeekDayName(num)
aWeekDay=Array("dummy","日","月","火","水","木","金","土")
GetWeekDayName=aWeekDay(num)
End Function

Function FixHour(num)
If num<12 Then
FixHour="午前" & CStr(num)
Else
FixHour="午後" & CStr(num-12)
End If
End Function


To: WSH初心者 さん
●JavaScriptで使えない文字

> WSHの制約事項として、スペースや全角文字は禁止されているのでしょうか?
ということは無く、JavaScriptでは"\"が特殊な意味を持つため、そのままでは使えないんですね。
ので、JavaScriptでは"\"という文字を表現するには、"\"をもう一つ付けて
エスケープしてやります。
すなわち、
WshShell.Run("C:\\テスト\\sample.xls");
が正解。(\1個でも、\nなどのようなJavaScriptの特殊文字にならなければ問題ないこともある。
が、全角文字の場合はAsciiに分解した場合も考慮しなければならないのでどっちにしても\\と
しておくべき)

それとは別に、WshShellオブジェクトのRunメソッドは、半角スペースがある場合は
パスを""で括らなければ認識しないという制限もあります。
また、JavaScriptでは " も文字列として使う場合は \" のようにエスケープしてやらねばなりません。
従って、半角スペースがあるパスの場合は次のようになります。
WshShell.Run("\"C:\\test test\\sample.xls\"");

これは見難いので、次のような記法もあります。
WshShell.Run('"C:\\test test\\sample.xls"');
これは、「JavaScriptでは文字列を ' で括ることも可能であり、その場合は文字列としての " を
エスケープせずに使用可能」という仕様を利用しています。


To: HIRO さん
●リモートにあるファイルを実行する際の認証方法

Runメソッドでユーザー認証はしてくれなかったと思います。
とは言え、スクリプトから認証させてやる方法はちょっと思いつきません。
(情報求む)

WshNetworkオブジェクトに、ネットワークドライブを割り当てるMapNetworkDriveメソッド
というのがあって、これにはユーザー名とパスワードを指定できますので、
もしかしたらこれが使えるかもしれません。(動作未確認)

Set WshShell = WScript.CreateObject("WScript.Shell")
Set WshNetwork = WScript.CreateObject("WScript.Network")
WshNetwork.MapNetworkDrive "X:","\\TEST-SV1\winnt\system32",False,"username","password"
WshShell.Run "X:\notepad.exe"
WshNetwork.RemoveNetworkDrive "X:"

HIRO さん 2003年 03月 20日 13時 18分 11秒

初めて投稿します。
WSHはまだまだ手探りの状態ですが
下記の内容で困っていることがあります。

クライアントからサーバーのEXEファイルに向けて
実行したのですが、ログオン失敗:ユーザー名が認識できないか、
またはパスワードが間違っています。
と言うエラーメッセージが返されます
ファイルの内容は以下の通りですが
ユーザー名とパスワードをどのように記述すれば良いのか分かりませんので
教えて頂きたく掲示板を利用しています。
よろしくお願いします。

Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "\\TEST-SV1\winnt\system32\notepad.exe"
をクライアントから実行するとエラーになります。

HIRO さん 2003年 03月 20日 13時 18分 03秒

初めて投稿します。
WSHはまだまだ手探りの状態ですが
下記の内容で困っていることがあります。

クライアントからサーバーのEXEファイルに向けて
実行したのですが、ログオン失敗:ユーザー名が認識できないか、
またはパスワードが間違っています。
と言うエラーメッセージが返されます
ファイルの内容は以下の通りですが
ユーザー名とパスワードをどのように記述すれば良いのか分かりませんので
教えて頂きたく掲示板を利用しています。
よろしくお願いします。

Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "\\TEST-SV1\winnt\system32\notepad.exe"
をクライアントから実行するとエラーになります。

Return