トップページwin
51コメント15KB

Windows Scripting Host

■ このスレッドは過去ログ倉庫に格納されています
0001名無し~3.EXENGNG
やっぱ、便利っしょ。
JScript でも VBScript でも書けるし、
ショートカットも作れるし、ドラッグ&ドロップもサポートしてるし、
レジストリもいじれるし、EXCEL や IE も制御できるし……。
使い勝手がいいと思うんだよね。
てなわけで、WSH をマターリと語りましょうぜ。

とりあえず、「おれはこんなことしてる自慢」とかでもいいです。
プログラム板じゃないんだし、簡単なネタでいいですよん。
0002sageNGNG
へー
0003名無し~3.EXENGNG
自動化はほとんどひまわりでやってます。
0004名無し~3.EXENGNG
ほー
0005名無し~3.EXENGNG
はぁー
0006名無し~3.EXENGNG
あはぁ うふん
0007名無し~3.EXENGNG
うぃー
0008名無し~3.EXENGNG
ほぇほぇ〜
0009名無し~3.EXENGNG
ずっこんばっこん
0010 NGNG
Virus作ってます。

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

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

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

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

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

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

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

あと、WMIを使えば、リモートサーバのシャットダウンや再起動もかけられるぞ。
これも、WSHでかけるよん。
0027名無し~3.EXENGNG
>>24-26
もういっていいよ
0028名無し~3.EXENGNG
>>27
? なんかあったの?
0029名無し~3.EXENGNG
Uwsc使ってる
0030名無し~3.EXENGNG
>>24-26
そういうことじゃなくて
↓こういうことで何かいいアイデアがあるかってことでは?
http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/download.htm
0031名無し~3.EXENGNG
どっちにしてもたいしたことじゃないがね
003224NGNG
>>27
ごめん。ウザかった?

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

じゃ。また。
00341NGNG
>>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
0035名無し~3.EXENGNG
プログラム板にあった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();
    }
}
0036名無し~3.EXENGNG
SendKeysは、PC98機ではあまり塩梅が良くないらしいね。
NUMLOCKが効かなくなるとか、なんとか。だよね?

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

さらに、AppActivateは、そのウィンドウをアクティブ化できたか
できなかったかのbool値を返す。
これを利用して、アクティブ化できるまでループをかけることにより、
目的のウィンドウをほぼ確実にアクティブ化することができる。
0040名無し~3.EXENGNG
HSPってなんじゃ?
0041しっつも〜ん!NGNG
バイナリファイルを扱う方法ってある?
0042名無し~3.EXENGNG
>>41
ヘルプには、まだないって書いてあったと思う。
0043名無し~3.EXENGNG
>>41
peekを使ってがむばれ
00441NGNG
>>39
うわ、かなり突っ込んだお答え、ありがとうございます。
WMI ですか……(汗)5.6 ですか……(汗)
うーん、どっちも触ってないです。
けど AppActivate が値を返すっていうのは凄く役立ちます!
ヘルプで AppActivate のところだけさっと読んでみて諦めちゃダメですね。
とりあえず、>>34 のスクリプトの例で言うと
D-Pixed 起動後に Do....Loop Until WshShell.AppActivate ("D-Pixed")
するだけで、期待通りの動作になりました。
(Loop の中では Sleep 10 し続けて、ある回数以上でそれ以降の動作は中止……と)
やってみるもんですね。ありがとうございます。
0045名無し~3.EXENGNG
みなさんどうやって勉強したの?市販本??
0046名無し~3.EXENGNG
余計なサービスは普段は無効にしている。
IISを使いたい時、ワンクリックでサービス開始、管理ツールを開いたり。
ノートンのLiveUpdateもタスクスケジューラにまかせて
予定時刻の直前にオン、終わったらサービス切るようにしている。
あと無理矢理作られるレジストリを綺麗に、などなど。
0047名無し~3.EXENGNG
>>45
見りゃわかる。
わからん奴は能無し。
0048名無し~3.EXENGNG
>>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に付属してます。日本語版単体ダウンロードはまだ。
0049名無し~3.EXENGNG
>>47
オマエガナ
0050名無し~3.EXENGNG
>>49
オマエ?
0051名無し~3.EXENGNG
>>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などのコンポーネントを使うって手もありますね。
■ このスレッドは過去ログ倉庫に格納されています