Windows Scripting Host

このエントリーをはてなブックマークに追加
1名無し~3.EXE
やっぱ、便利っしょ。
JScript でも VBScript でも書けるし、
ショートカットも作れるし、ドラッグ&ドロップもサポートしてるし、
レジストリもいじれるし、EXCEL や IE も制御できるし……。
使い勝手がいいと思うんだよね。
てなわけで、WSH をマターリと語りましょうぜ。

とりあえず、「おれはこんなことしてる自慢」とかでもいいです。
プログラム板じゃないんだし、簡単なネタでいいですよん。
2sage:01/10/10 04:13
へー
3名無し~3.EXE:01/10/10 04:14
自動化はほとんどひまわりでやってます。
4名無し~3.EXE:01/10/10 04:14
ほー
5名無し~3.EXE:01/10/10 04:21
はぁー
6名無し~3.EXE:01/10/10 04:23
あはぁ うふん
7名無し~3.EXE:01/10/10 04:24
うぃー
8名無し~3.EXE:01/10/10 04:24
ほぇほぇ〜
9名無し~3.EXE:01/10/10 04:25
ずっこんばっこん
10 :01/10/10 04:25
Virus作ってます。

I Love Youはとても流行ったね。
11名無し~3.EXE:01/10/10 04:37
ひまわり。やっぱ、便利っしょ。
日本語でしか書けないけど、
ショートカットも作れるし、ドラッグ&ドロップもサポートしてるし、
レジストリもいじれるし、EXCEL や IE もWordも他色々制御できるし……。
使い勝手がいいと思うんだよね。
てなわけで、ひまわり をマターリと語りましょうぜ。

とりあえず、「おれはこんなことしてる自慢」とかでもいいです。
プログラム板じゃないんだし、簡単なネタでいいですよん。
12名無し~3.EXE:01/10/10 04:53
>日本語でしか書けないけど、

逆にしんどい
つーか覚えても・・(以下略)
13名無し~3.EXE:01/10/10 04:56
>>12
逆にっていうか素でしんどいよ。
14名無し~3.EXE:01/10/10 05:19
無意味にしんどい
ネタとしては桶
15名無し~3.EXE:01/10/10 05:19
ひたすらしんどい
16厨房:01/10/10 05:24
ひまわり重過ぎる。
やっぱゲームはHSP。
仕事用ならひまわりで良いかな
17名無し~3.EXE:01/10/10 05:34
IEの右クリックいじるのに使う位なもんだなぁ。。。
181:01/10/10 05:37
うにゃ、実は Windows Scripting Host にこだわらずとも、
気軽に扱えるならひまわりでも HSP でもオッケ。
ひまわり、EXCEL との相性がいいし、
HSP だって小さな「お助けアプリ」組むにはいいよね。
(ゲームとか、それなりのソフト開発は別の話……HSP、向いてるけど)

例えば自分は、CD-ROM で AUTORUN.INF で起動するためには
実行ファイルじゃないとダメだから、HSP で「関連づけで実行」
だけの一行ソースのアプリ、作ったりもするよん。
19名無し~3.EXE:01/10/10 05:45
PerlでもWSH使えるんだよね。
前に一つのファイルに、PerlとVBを混ぜてスクリプト組んでたんだけど、
デバッグが大変でした。

お互いの苦手な部分を補いつつ、プログラム組めると思ったが
とことん甘かったと認識させられたよ。。
201:01/10/10 05:47
>>19
一つのファイルにってのが猛者。猛者過ぎたね(^^;
21名無し~3.EXE:01/10/10 06:03
どっか、参考になるWebページとか書籍ないすかね・・・・
なかなか思い通りのこと出来ない
22 :01/10/10 06:12
興味有るけど使いどころがわからん。
23名無し~3.EXE:01/10/10 06:18
ん〜?
UNIXのシェルスクリプトみたいなもの?

>>22に同じ
業務ならバッチ処理とか使い道ありそうだけど
24名無し~3.EXE:01/10/10 06:22
ASPのでバックによく使用するぞ!!
IISでデバックすると他のリクエストもとまるので
同僚に迷惑がかからないように、ローカルでやるぞ。

WSHマンセ−!
2524:01/10/10 06:24
>>24
ASPのソースのデバックね。ASPが動くわけではない。
2624:01/10/10 06:34
IIS関係では
ADSI(LDAP)を使って、IISの設定を行うスクリプトも作ったぞ。
で、危ない設定は全て塞いだもんだよ。
でも、パッチはまた別問題だから、ワーム発生後はいろいろ大変だったよ。

あと、WMIを使えば、リモートサーバのシャットダウンや再起動もかけられるぞ。
これも、WSHでかけるよん。
27名無し~3.EXE:01/10/10 06:38
>>24-26
もういっていいよ
28名無し~3.EXE:01/10/10 06:42
>>27
? なんかあったの?
29名無し~3.EXE:01/10/10 06:46
Uwsc使ってる
30名無し~3.EXE:01/10/10 06:50
>>24-26
そういうことじゃなくて
↓こういうことで何かいいアイデアがあるかってことでは?
http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/download.htm
31名無し~3.EXE:01/10/10 06:51
どっちにしてもたいしたことじゃないがね
3224:01/10/10 07:12
>>27
ごめん。ウザかった?

>>30
なるほど。ちょっと話の方向性がずれてたようだ。反省。
3324:01/10/10 07:17
反省の意味もこめ、ちょっとした情報を。
もう既出かもしれないけど、Win98で
c:\windows\SAMPLES\WSH ってフォルダーになぜかWSHのサンプル
が入ってます。ためしてみてね。

じゃ。また。
341:01/10/10 22:39
>>24 まあまあ、話題にしてくれるだけでもスレの立てがいがあるです。
>>30 のページもいいですね。

自分も何か話題出さなきゃ……。
とりあえず、SendKeys でキーマクロっぽい処理をするのが好き
だったりします。素朴っしょ(^^; こんな感じ。
(ペイントソフト D-Pixed でアイコン作るとき用。
無題ファイルをアイコンサイズで開きます)

'D-Pixed でアイコン製作
Dim size
Const dpixed = "C:\SOFTWARE\dpixed\DPixed.exe" 'D-Pixed の場所
If MsgBox("32×32 で作る? 「いいえ」で 16×16 です。",4) = 6 then
size = "32"
Else
size = "16"
End if
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run dpixed
WScript.Sleep 2000 '起動にかかる時間(タイトルも含めて)
WshShell.AppActivate "D-Pixed" : WScript.Sleep 100
WshShell.SendKeys "^n" : WScript.Sleep 100
WshShell.SendKeys "%w"+size : WScript.Sleep 100
WshShell.SendKeys "%h"+size : WScript.Sleep 100
WshShell.SendKeys "~" : WScript.Sleep 100
35名無し~3.EXE:01/10/10 22:58
プログラム板にあったWSHスレ消えちゃったのね。
↓はディレクトリ一覧を表示するやつ

var fso = new ActiveXObject("Scripting.FileSystemObject");
Dir("c:\\", "");


function Dir(strFolder, strIndent)
{
    var folder = fso.GetFolder(strFolder);
    var fc = new Enumerator(folder.SubFolders);

    while(!fc.atEnd())
    {
        WScript.StdOut.WriteLine(strIndent + fc.item());
        f = fso.GetFolder(fc.item());
        Dir(fc.item(), strIndent + "\t");
        fc.moveNext();
    }
}
36名無し~3.EXE:01/10/10 23:25
SendKeysは、PC98機ではあまり塩梅が良くないらしいね。
NUMLOCKが効かなくなるとか、なんとか。だよね?

SendKeysはそれくらいだから良いとして、問題はAppActivateだよね。
たまにフォーカス取得に失敗するでしょ。どうにか回避できないものかな。
37名無し~3.EXE:01/10/11 00:37
d
381:01/10/11 01:17
>>35 CScript.exe 用だし、言語も違うし、直前におれの書いたのと好対照で
イイですね。
>>36 PC98 の件は知りませんでした。
AppActivate、こっちの環境じゃあまりエラーはないけど、
エラーを知る手だてが欲しいですよね。
あと、title でしか捕捉できないのが、ちょっと不満。
39名無し~3.EXE:01/10/11 01:32
>>38
AppActivateはPID(プロセスID)を指定することもできる。
WSHからPIDを取得する方法は、
1. WMIのWin32_Processクラスを使う
2. WSH5.6のWshExecオブジェクトのProcessIDプロパティを使う

さらに、AppActivateは、そのウィンドウをアクティブ化できたか
できなかったかのbool値を返す。
これを利用して、アクティブ化できるまでループをかけることにより、
目的のウィンドウをほぼ確実にアクティブ化することができる。
40名無し~3.EXE:01/10/11 01:37
HSPってなんじゃ?
41しっつも〜ん!:01/10/11 01:39
バイナリファイルを扱う方法ってある?
42名無し~3.EXE:01/10/11 05:28
>>41
ヘルプには、まだないって書いてあったと思う。
43名無し~3.EXE:01/10/11 05:34
>>41
peekを使ってがむばれ
441:01/10/11 12:57
>>39
うわ、かなり突っ込んだお答え、ありがとうございます。
WMI ですか……(汗)5.6 ですか……(汗)
うーん、どっちも触ってないです。
けど AppActivate が値を返すっていうのは凄く役立ちます!
ヘルプで AppActivate のところだけさっと読んでみて諦めちゃダメですね。
とりあえず、>>34 のスクリプトの例で言うと
D-Pixed 起動後に Do....Loop Until WshShell.AppActivate ("D-Pixed")
するだけで、期待通りの動作になりました。
(Loop の中では Sleep 10 し続けて、ある回数以上でそれ以降の動作は中止……と)
やってみるもんですね。ありがとうございます。
45名無し~3.EXE:01/10/11 13:08
みなさんどうやって勉強したの?市販本??
46名無し~3.EXE:01/10/11 13:11
余計なサービスは普段は無効にしている。
IISを使いたい時、ワンクリックでサービス開始、管理ツールを開いたり。
ノートンのLiveUpdateもタスクスケジューラにまかせて
予定時刻の直前にオン、終わったらサービス切るようにしている。
あと無理矢理作られるレジストリを綺麗に、などなど。
47名無し~3.EXE:01/10/11 17:18
>>45
見りゃわかる。
わからん奴は能無し。
48名無し~3.EXE:01/10/14 07:57
>>44
WshExecを使うとこんな感じですね。

Const WshFailed = 2
Const WshFinished = 1
Const WshRunning = 0
Set WshShell = WScript.CreateObject("WScript.Shell")
Set oWshExec = WshShell.Exec("C:\SOFTWARE\dpixed\DPixed.exe")
If oWshExec.Status = WshRunning Then
Do Until WshShell.AppActivate(oWshExec.ProcessID)
WScript.Sleep 100
Loop
WshShell.SendKeys ...
End If

ちなみに、WshExecを使うと、実行したプロセスの
標準出力・標準入力が自由自在に操れる
ようになります。これでSendKeysが使えなかった
コンソールアプリの制御も可能になったわけです。
(しかもSendKeysより精度が高い)

WSH5.6はIE6.0に付属してます。日本語版単体ダウンロードはまだ。
49名無し~3.EXE:01/10/14 09:34
>>47
オマエガナ
50名無し~3.EXE:01/10/14 10:08
>>49
オマエ?
51名無し~3.EXE
>>41
ADO2.5があれば可能です。
以下はWindows板のロゴをダウンロードするスクリプトです。
ダウンロードにはMicrosoft.XMLHTTPを使っているので
IE5.0以上がインストールされているのが追加条件となります。

sSource = "http://yasai.2ch.net/win/2ch_logo_rc2.jpg"
sDest = "test.jpg"

Set oHTTP = WScript.CreateObject("Microsoft.XMLHTTP")

oHTTP.open "GET", sSource, False
oHTTP.send

Set Stream = WScript.CreateObject("Adodb.Stream")
Const adTypeBinary = 1
Const adSaveCreateNotExist = 1
Const adSaveCreateOverWrite = 2
Stream.Type = adTypeBinary
Stream.Open
Stream.Write oHTTP.responseBody
Stream.Savetofile sDest, adSaveCreateOverWrite
Set Stream = Nothing
Set oHTTP = Nothing

MsgBox "ダウンロード完了"

あと、BASP21などのコンポーネントを使うって手もありますね。