> ishiさん
動作確認していませんが、
Msgbox "abc" & chr(34) & "def"
で 結果的に abc"defにならないですか?
SQL文をコード内に書くときに、シングルクオーテーション
の可読性向上のために、よくChr(39)を使っています。
これでは無理でしょうか?
>さざなみ さん
それもやってみましたが"がなくなってしまいました。
CScript test.vbs "a""b" c
実行結果
ab
c
さざなみです。
>ishi さん
> 引数の文字列の中に"(ダブルクォテーション)を含めたいのですが、
> エスケープの仕方が分かりません。
ダブルクォテーションを二つ並べるのはどうでしょう?
msgbox """"
引数の文字列の中に"(ダブルクォテーション)を含めたいのですが、
エスケープの仕方が分かりません。
初歩的な質問かもしれませんが、どなたか教えて頂けないでしょうか?
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年 03月 16日 00時 44分 54秒 の投稿において、pdfファイルを自動保存する方法を教えて頂いたのですが、その後、HTMLドキュメントも対象に上がり、object等の変更をしようと調べたのですが、わからずじまいでした。そこで試しにそのままで実行すると成功したのですが、何か釈然としません。HTMLドキュメントに適したobject等、修正すべき点のご指示をよろしくお願いします。
始めましてwindows2000sp3でフォルダをweb表示にした時に
mp3やavi等のメディアファイルをシングルクリックしても
プレビューするためのメディアプレイヤーを起動しないで
ファイルサイズだけ表示出来るようにカスタマイズは出来ないでしょうか?
初めまして。
アプリケーションのインストールを自動化したいのですが、
その手段としてWSHを使用するのはありなのでしょうか?
又、他の方法を知っている方がいらっしゃいましたら、
よろしくお願い致します。
初めまして 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
起動中のIEから現在アクティブなものを特定することはできますか
(タイトルを指定せずに)
どなたかご存知でしたら教えてください。
よろしくお願いします。
いつも参考にしております。
とあるページでWindows95でもIE5.5SP2が入っていればWSHを使用出来ると書いてあったような気がするのですが…そのページが見つからず真意の程がわかりません。
Windows95+IE5.5SP2でWSHは動作するのでしょうか。
どなたかご存知でしたら教えていただけると助かります。
よろしくお願いします。
初めて投稿させていただきます。
WSHでDB(たとえばACCESS)の値をWORD文書の特定の位置に挿入してWORD文書を保存したいのですが、できるでしょうか。
ご指導よろしくお願いします。
To 管理人むたぐち さん
回答ありがとうございます。
そうですよね。私もそう思っていたのですが、
現象は、前にでない+最小化されて点滅状態になります。
IEの設定でしょうか?
To 管理人むたぐち さん
回答ありがとうございます。
新しいバージョンについては問題なしですか。
わかりました。ありがとうございます。
記事検索PGの件ですが、単なる勘違いだったみたいです。
また、ゴミ残しちゃって、すんません。
To 管理人むたぐち さん
早速のご回答、誠にありがとうございます !
>ShellオブジェクトをCreateObjectして、
>そのWindowsコレクションからアクセス
おーっ!!なるほど・・そうすれば良かったワケですか !
おかげさまでバッチリうまくいきました。
ほんとうにありがとうございました。(^人^)感謝♪
●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で書くつもりです。
●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 さん
どうもありがとうございます。
うちのページもリンク集を整理しなきゃなあ。
新規追加もいっぱいあるし…。
現在、仕事で、ファイルコピーのvbsを作成中です。
リンクを貼らせていただきました。
有用な情報公開ありがとうございます。
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関数を通したものと繋げてやる必要があります。
まあ、何か変な仕様だという気もしないでもないですが…。
唐突ですが、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の意味が記述がおかしいような・・・
むたぐちさん、こんちは。
AKiOSさんの掲示板 記事検索プログラムが、ツールボタンとか押しても反応無し、
動かないんですけど、どっか弄るとこありましたっけ?
# ソース見ても、よくワカランので見るの辞めた。
つまらん質問でスマンっす。(笑)
因みに、IEは、5になってます。
こんにちわ、マックです。
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を
前に持ってくるにはどうすればできるのでしょうか?
よろしくお願いします。
えっと、現在試作しているソースを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
すいません、初めて質問させていただきます。
「もし現在InternetExplorerが立ちあがっていたら、新しいURLで更新する」
というコードは、どのように書けば良いのでしょーか ?
(単純に立ち上げるだけなら分かります。)
GetObjectの使い方がイマイチ良く分かってなくて、失敗の連続で困ってます。
よろしくご教授お願いします。m(_ _)m
チャブーンです。
大変お久しぶりです。以前掲示板に書き込みいただいてから
だいぶ時間が経っていますが...。
まずはとりあえず、生存はしとります。
ちょっと 3 月中は多忙&サーバ不調で死にまくってましたが、今はなんとか
持ち直しております。ちょっと時間が出来てますので、時々は見に来て書き
込みなんぞをしようかなぁと、思っています。
東京はすっかり暖かいので、昨日今日の雨でけっこういい塩梅になってる気がします。
#場違いな私信の書き込み、ごめんなさいね>皆様
全くの初心者です。
よろしくお願いします。
PCに、WSHの5.6を入れて以下の文をメモ帳で書いて、*.vbsで
保存したのですが、
実行すると、エントリがありませんと出てきます。
何故なのか教えてください。
Set WshShell=CreateObject("Wscript.Shell")
WshShell.Run "C:\WINNT\SYSTEM32\rundll32.exe Shell32.dll,ShExitWindowsEx 1"
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
はじめまして。
scrrun.dllについて調べていたらこちらのHPにたどり着きました。
上記DLLについて質問があるのですが、
このDLLにはいくつものバージョンが存在すると思います。
(私が確認できたバージョンは5.6.0.6626と5.1.0.5010でしたが)
新しいバージョンのDLLを古いバージョンのDLLに上書きした場合、
それまでのアプリ等が動かなくなるということがあるのでしょうか?
一応そのようなことが無いように作られているとは思うのですが、
公式な文章等が見つからなかったもので・・
ご存知の方がいらっしゃいましたら教えて頂きたいく。。
よろしくお願いします。
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関数を使って、イベントドリブンなスクリプトを
書くことは可能なので、もし該当のオブジェクトにイベントが実装されていれば、
それを使えば何とかなるかもしれません。
VBSからコード変換プログラムを実行させる処理を行っています。
VBSはバッチイメージで動作させていて、メッセージ等は出せません。
その変換プログラムはマルチでは動作せず、実行中に呼び出しをかけた場合、
待ち状態になります。
細かく書きますと、
データAの変換中に、データBの変換を行なおうとすると、
どうやらデータB変換VBSのCreateObject箇所(変換プログラムオブジェクト用)で待ち状態になり、
データAの変換が終了した時点で、データBのObject生成が行なわれ、変換・・
となっているようなのです。
通常は上記のように、A変換終了後にB変換という感じで動作するのですが、
時々データBの変換が行なわれない場合があります。
タイミング・原因等、調査しているのですが、まだつかめません。
変換データサイズがすごく大きい場合などに起こりやすいようですが、
必ずしも起こるわけではなく・・・。
CreateObjectの箇所で待ち状態となった場合、タイムアウトの指定とか、
タイムアウト後の処理の記述方法とか、
うまい対処の仕方はありますでしょうか?
どなたか知恵をおかしください。
よろしくお願いします。
Windows2000でWshを使っています。
IEを使ってWEBに関することデータ収集などをしています。
よくWebBrowserコンポーネントを使用した、タブ型ブラウザなどが
公開されていますが、あのようなブラウザには、よくJavaScriptの
On/Offボタンがが付いています。
外部からJavaScriptの有効無効を切り替えられるんだと思うのです
が、JavaScriptをOffにしてWebBrowserコンポーネントを使いたい
のですが、どのようにすればよいのでしょうか?
ご存知の方いらっしゃったらお願いします。
#一応過去ログは全部落として'Java'でgrepしてみたんですが、それ
#っぽい話題は無かったように思います。
自己レスです。
start /w
にすればすみました。
おさわがせしました。
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
----------------------------------------------
皆様今晩。
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
To: よし さん
SendKeysは、使わずにすむなら使いたくないですよね。
やむなく使っていると、時々「あっ!」と悲鳴をあげてしまう(--;
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"
としていたのですが、これですと他に起動している
プログラムがあるとそちらにキーを送ってしまい
うまく行きませんでした。
本当にありがとうございました。
WindowsXPでシャットダウンの追加。
下記のスクリプトでも落ちました。
Set WSHSHell=CreateObject("WScript.Shell")
'10秒後にシャットダウン
WSHShell.Run "C:\WINDOWS\SYSTEM32\SHUTDOWN.EXE -s -t 10"
shutdownコマンドのヘルプをご参照ください。
失礼しました。
私の下の書き込み、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
で試してみてください。
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
ずいぶん前にお世話になりましたが、すいません、また教えてください。
WinXPを使っているのですが、当HPの例のとおり
WINDOWSの終了のスクリプトを作ってもうまく動きません。
RUNDLL32.exeの場所が違うのだろうと
system32の下に指定してもだめです。
過去の掲示板も1年分くらい探しましたが見つけることができなかったので
書き込みしました。
よろしくお願いします。
こんばんは、WSH勉強し始めたばかりのものです。
ホルダーを開くのは、
Win.Open foldername
のようにすればいいのですが、(foldernameはパスを指定した変数)
反対に閉じるのはどのように記述したらいいでのしょうか?
Win.Close foldername
では,だめでした。(^^;
Basic認証ダイアログをパスする方法について
ご回答、ありがとうございました。
InternetExplorer.Applicationのイベントを拾ってみたりと、いろいろ
見当違いなことをやってみましたが、こんなにエレガントな方法がある
とは・・・大変参考になりました。
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を使えば、ファイルのコピーや削除などが可能です。
詳しくはヘルプをご覧下さい。
(この場合、単にリネームすればいいだけの気もしますが…)
今回初めて投稿しています。
WSHを使用するのも初めてなので
下記のような事が出来るかどうかも分からないのですが
参考になるSAMPLEがあれば教えて頂きたく投稿しました。
現在実行しようとしている内容は
あるテキストファイルを削除する前に
そのファイル名をファイル名にシステム日付を付けた名称に
したいのです
(例)
実行前 TEST.txt 実行後 TEST20030327.txt というように
したいのです
その後 TEST.txt を削除するという流れを
作成したいのですが
どのようにすればよいのでしょうか?
よろしくお願いします。
初めて投稿させていただきます.
WSHを利用して、Webページのログインの自動化を行っています。
K-ScriptMaker(http://www.asahi-net.or.jp/~QR5N-KT/soft/)というロ
グイン用スクリプトを吐き出してくれるツールでスクリプトを作成し、
サイトにあわせて、修正して使っています。
現状、FormへのユーザID、パスワードの入力に関しては自動化できてい
るのですが、認証ダイアログ(Basic認証)が表示されるタイプでは、対応
できません。
この場合、どのようにしたら、ダイアログの各エレメントにアクセスし、
ダイアログ上のテキストフィールドにIDとパスワードを入力し、OKボタ
ンを押下することができるのでしょうか?
申し訳ありません。
「管理人むたぐちさん、」と書いたつもりが、「たむぐちさん」になっておりました。大変失礼いたしました。
管理人たむぐちさん、
ご回答ありがとうございます。参考になりました。
すみませんが、追加で質問させてください。
『クライアントのWSHの機能をIEのVBSから呼び出』す際に、何か特別な宣言や構文が必要になりますでしょうか。基本的な質問で大変申し訳ありませんが、ご教示いただけたらと存じます。
宜しくお願いいたします。
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:"
初めて投稿します。
WSHはまだまだ手探りの状態ですが
下記の内容で困っていることがあります。
クライアントからサーバーのEXEファイルに向けて
実行したのですが、ログオン失敗:ユーザー名が認識できないか、
またはパスワードが間違っています。
と言うエラーメッセージが返されます
ファイルの内容は以下の通りですが
ユーザー名とパスワードをどのように記述すれば良いのか分かりませんので
教えて頂きたく掲示板を利用しています。
よろしくお願いします。
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "\\TEST-SV1\winnt\system32\notepad.exe"
をクライアントから実行するとエラーになります。
初めて投稿します。
WSHはまだまだ手探りの状態ですが
下記の内容で困っていることがあります。
クライアントからサーバーのEXEファイルに向けて
実行したのですが、ログオン失敗:ユーザー名が認識できないか、
またはパスワードが間違っています。
と言うエラーメッセージが返されます
ファイルの内容は以下の通りですが
ユーザー名とパスワードをどのように記述すれば良いのか分かりませんので
教えて頂きたく掲示板を利用しています。
よろしくお願いします。
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "\\TEST-SV1\winnt\system32\notepad.exe"
をクライアントから実行するとエラーになります。