お前ら、wsh使ってますか? part6at WIN
お前ら、wsh使ってますか? part6 - 暇つぶし2ch2:名無し~3.EXE
06/08/08 21:42:04 hqaA5ks/
●便利なリンク
Windows Script
URLリンク(www.microsoft.com)
MSDN Library (オンラインドキュメント)
URLリンク(msdn.microsoft.com)
Windows Script 5.6 ドキュメント ダウンロード (exe 形式; 1.67 MB)
URLリンク(download.microsoft.com)
OLE/COM Object Viewer ダウンロード (exe 形式; 656 KB)
URLリンク(download.microsoft.com)

Sesame Script (スクリプト作成初心者向けコラム)
URLリンク(www.microsoft.com)
Hey, Scripting Guy! (スクリプトのQ&A・ハウトゥ集)
URLリンク(www.microsoft.com)
Windows管理者のためのWindows Script Host入門 (@IT内記事)
URLリンク(www.atmarkit.co.jp)
Windows XP に含まれるコマンドラインツールの紹介 (@IT内記事)
URLリンク(www.atmarkit.co.jp)
ADSI (Active Directory Service Interfaces) の特集記事全文
URLリンク(web.archive.org)

●個人サイト
Windows Script Wiki
URLリンク(winscript.s41.xrea.com)
趣味のJavaScriptなページ
URLリンク(homepage3.nifty.com)
Windows Scripting Host Laboratory
URLリンク(www.roy.hi-ho.ne.jp)
Tips - (小技にも満たない)微ワザ集
URLリンク(www1.u-netsurf.ne.jp)

3:名無し~3.EXE
06/08/08 21:42:58 hqaA5ks/
●コンポーネント関連リンク

○Microsoft 製外部コンポーネント
DCOM
(98/Me) URLリンク(www.microsoft.com)
(95)  URLリンク(www.microsoft.com)
MDAC - データベース・メールボックス・WebDAV・バイナリの操作
URLリンク(msdn.microsoft.com)
WMI(95/98/NT4.0) - 統一されたコンピュータオブジェクト化モデルを提供するスクリプティングAPI、リモート管理
URLリンク(www.microsoft.com)
ADSI - Active Dictoryの機能を操作
URLリンク(www.microsoft.com)
MSXML - XMLパーサ、SAX・DOM API、XSLT変換、POST/HTTPダウンロード
URLリンク(www.microsoft.com)

○サードパーティ製外部コンポーネント
BASP21 - メール、ファイルエンコード、文字コード変換、FTP/HTTPアップ、その他
URLリンク(www.hi-ho.ne.jp)
Doodle2 - グラフィック変換、操作、描画
URLリンク(www.vector.co.jp)
DynaCall - Win32APIコール
URLリンク(people.freenet.de)
AutoItX - マウス・キーボード・クリップボード操作
URLリンク(www.hiddensoft.com)

4:名無し~3.EXE
06/08/08 21:43:41 hqaA5ks/
●WSH(COM)参考書籍

「はじめてのWindows Scripting Host」 (株)アンク著 技術評論社
URLリンク(www.amazon.co.jp)

「[改訂版] VBScriptポケットリファレンス」
URLリンク(www.amazon.co.jp)

「使いながら覚えるWindows Scripting Hostプログラミング入門」 竹田英雄著 エーアイ出版
URLリンク(www.amazon.co.jp)

「Windows Scripting Host入門 with VBScript」 毎日コミュニケーションズ
URLリンク(www.amazon.co.jp)

「WSHで楽しむWindows95/98/NT4.0版 ウィンドウズ・スクリプティング入門 VBScript編」 メディアテック出版
URLリンク(www.amazon.co.jp)

「WSHクイックリファレンス」 羽山博著 オライリー・ジャパン
URLリンク(www.amazon.co.jp)

「Rubyを256倍使う本 邪道編」 arton著 ASCII
URLリンク(www.amazon.co.jp)

「ADSIスクリプトによるWindows2000システム管理 Windows2000管理者ガイドブック」ピアソン・エデュケーション トーマス・エック 著
URLリンク(www.amazon.co.jp) (どちらかというとVBによる操作本?)

「標準ASPテクニカルリファレンス」山田祥寛著 SOFTBANK
URLリンク(www.amazon.co.jp)

5:名無し~3.EXE
06/08/08 21:44:21 hqaA5ks/
●JavaScript、VBScript 以外のWSHで使える言語

TCLScript
URLリンク(tclscript.sourceforge.net)
Perl
URLリンク(www.activestate.com)
Ruby
URLリンク(www.geocities.co.jp)
Python
URLリンク(www.python.jp)
PHP
URLリンク(www.php.net)
REXX
URLリンク(www.borg.com)

6:名無し~3.EXE
06/08/08 21:47:19 hqaA5ks/
テンプレ終わり。なかったので立てました。
リンク切れ修正したり、簡潔にしたり、書籍をAmazonでまとめたり、色々追加したりしてみました。
まずかったらごめんなさい。

7:名無し~3.EXE
06/08/08 22:44:29 m2nJYuN9
やっと立ったか
>>1

8:名無し~3.EXE
06/08/09 02:18:52 HZLszs1m
おつりんこ


9:名無し~3.EXE
06/08/09 21:29:00 3ZEp9c5C
元ネタURLリンク(www.apple.com)

10:名無し~3.EXE
06/08/10 01:20:51 dgC59hri
そろそろ、大学入試に採用して欲しいものだ。

11:11
06/08/10 02:20:10 /7XeLnYy
こっそり。
連載って大変です・・・

12:名無し~3.EXE
06/08/10 11:10:30 QZ8c+eSn
>>11
ただの11に興味はありません。

13:名無し~3.EXE
06/08/13 11:50:50 41wVJTOD
「VBScrip逆引き大全 500の極意」 井川はるき著 秀和システム
URLリンク(www.shuwasystem.co.jp)

14:名無し~3.EXE
06/08/13 20:54:27 8j+UDFyv
ファイルをD&Dすれば、その配下に「2006年08月」の年月フォルダを作って
振り分けてくれるスクリプトはどこかにないですか?

15:名無し~3.EXE
06/08/13 21:14:49 mVE7+F6R
見当たらないものを作るのがこのスレ。とにかく書いてみろよ。

16:名無し~3.EXE
06/08/13 22:15:18 Th0qG/nU
簡単っぽいね

現在の年・月取得
→「y年m月」というフォルダがないなら作る
→引数のファイルをそのフォルダにコピーor移動

>>14
がんばれ

17:名無し~3.EXE
06/08/15 17:13:21 5toxITo3
本当にスクリプトで画面の解像度を変更できませんか

18:名無し~3.EXE
06/08/15 20:34:44 5SvS0Mip
>>17
WScript.exe自体の機能では出来ない。
そういう機能のあるCOMを探すか作るかすれば出来る。
WMIのWin32_DisplayConfigurationあたりでも出来るかもしれないが
面倒なので自分で調べて。

というか、コマンドラインから解像度変更するツールは確かあったから
そいつをWshShellのRunで呼ぶのが一番手っ取り早いかも。

19:名無し~3.EXE
06/08/18 02:23:11 huYxnQWS
IE7をCOMで扱うときの資料ってどこかにありますか? メソッド一覧とか。

自作のIE自動運転ツールで、CreateObject("InternetExplorer.Application")ってやって新規IEをいくつも立ち上げてるんですが、
IE7のタブ機能で、同じIEの新規タブを使うように変更したいんです。


20:名無し~3.EXE
06/08/18 03:20:19 huYxnQWS
あと、CreateObject("InternetExplorer.Application") みたいな感覚で、
FireFoxって扱えないのでしょうか?
どっかに資料があったら教えてください。

21:名無し~3.EXE
06/08/18 05:52:24 X3GM4s/3
前まで使っていたHTAがある日突然文字化けして使えなくなってしまいました。
拡張子をHTMLにすると文字化けも解消し、動作します
なんとか元通りHTAのまま動作するようにしたいのですが、なにが原因なんでしょうか
ちなみに他のHTAは文字化けしませんでした

22:名無し~3.EXE
06/08/18 06:09:17 Y6b9lzs3
>>21
<meta http-equiv="Content-Type" content="text/html; charset=****" />

を入れてみたら?****はshift_jis, EUC-JP, UTF-8など

HTAスレがありますよ
HTAをもっと流行らせる計画
スレリンク(tech板)l50

23:名無し~3.EXE
06/08/18 10:26:16 cwDh88nh
>>19
URLリンク(msdn.microsoft.com)

IE7は使ったことないから分からないけど
タブで開くには Navigate2で第2引数のフラグ(BrowserNavConstants)に
navOpenBackgroundTab = 0x1000を立てればいいんじゃないかな


24:名無し~3.EXE
06/08/18 10:27:46 cwDh88nh
ああ間違えた
navOpenInNewTab = 0x0800
でもいいね

URLリンク(msdn.microsoft.com)


25:名無し~3.EXE
06/08/19 21:40:24 Ax5AbTvR
789 名無し~3.EXE [sage] 2006/08/19(土) 13:35:26 ID:IAl43imz
MS06-023で指摘された脆弱性対応版ですかね?
バージョンは 5.6.0.8831

Windows 98、Windows Millennium Edition (Windows Me)、および Windows NT 4.0 用の Windows Script 5.6
※OS本体はサポート終了、しかも何故か→【要認証】
URLリンク(www.microsoft.com)
URLリンク(download.microsoft.com)

Windows 2003 用の Windows Script 5.6 【要認証】
URLリンク(www.microsoft.com)
URLリンク(download.microsoft.com)

簡単な説明
このダウンロードは、Visual Basic Script Edition (VBScript) Version 5.6、JScript Version 5.6、Windows Script Components、
Windows Script Host 5.6、および Windows Script Runtime Version 5.6 からなる Microsoft Windows Script をインストールします。

スレリンク(win板:789番)

26:名無し~3.EXE
06/08/26 08:36:17 7AZj00I6
バッチファイルの結果って、wsh からコピーできないんでしょうか。
Alt + Space を SendKeys してもメニューが出ないので、困ってます。
かなりぐぐったけど、結局できなかったって話しかないし。

-- 8< Login-FTP.bat 8< --
@echo off
TITLE FTP-Tool
ftp hoge
echo "FTP 終わったら [OK] をクリックしてください"

-- 8< FTPcopy.wsf 8< --
set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run "cmd.exe /k Login-FTP.bat", 1, false
MsgBox "[OK] をクリックしてください"
Do Until objShell.AppActivate("FTP-Tool")
WScript.Sleep 100
Loop
objShell.SendKeys "%({ }ES)%({ }EY)"
WScript.Sleep 100
Set objExec = objShell.Exec("notepad.exe")
Do Until objShell.AppActivate(objExec.ProcessID)
WScript.Sleep 100
Loop
objShell.SendKeys "%(EP)"
WScript.Sleep 100
objShell.SendKeys "%(FA)"
WScript.Sleep 500
objShell.SendKeys "FTP.log"

27:名無し~3.EXE
06/08/26 09:21:16 NGHbsPUz
>>26
Run じゃなくて Exec を使う。
WshShell.Exec の返り値として WshScriptExec のオブジェクトが返ってくるから
その StdOut を読めばいいよ。

28:26
06/08/26 11:18:57 7AZj00I6
>>27
サンクス! 全然考えてなかったやりかたでした。

試しました・・・ら、かんじんの FTP 処理がコマンドプロンプト上で
入力できないんですね・・・。
WSH から標準入力としてコマンドを送りつければよいのでしょうが、
FTP を自由に使いたいのでそういうわけにも行かず・・・。

うーむ・・・。
標準入力だけは WSH を経由しないようにできないものか・・・。


29:26
06/08/26 11:31:17 7AZj00I6
あ、標準入力っていうか、普通にコマンドプロンプト上で操作できて、
その後で Exec の結果を取得できなくちゃいけないのか。

・・・できそうにないな・・・。

30:名無し~3.EXE
06/08/26 12:03:52 X5Z8XRwb
出来ることをできそうにないとか言って諦めきれるならやらなきゃいいさ。
諦めきれないなら調べるなり試行錯誤するなりすればいいさ。

それが出来ないと本当に困るという状況で必死になってるなら自分で解決まで
這い蹲ってでも辿り着くだろうし、解決できないなら出来なくてもたいして困らないから
必死になりきれてないだけ。本人が別に解決しなくてもいいや程度に考えてるなら
俺等が手を掛けることでもないし、これ以上教えることは何も無さそうだな。

31:26
06/08/26 12:23:05 7AZj00I6
いや、まだやってますけど・・・。

32:名無し~3.EXE
06/08/26 22:54:38 caN/FdXT
HTAって、背景透過できない?

33:名無し~3.EXE
06/08/26 23:22:22 NGHbsPUz
このスレ的な回答なら COM を作ればできる かな。

34:名無し~3.EXE
06/08/27 18:11:11 iJpflacd
難しいそうでつね。

35:19
06/08/27 23:34:30 7+PWpyeP
>>23-24
情報感謝です。そんなIE7を反映した資料があるの、全然知らなかった。

複数サイトに対して自動巡回をするため、これまでは
CreateObject("InternetExplorer.Application") でIEをいくつも立ち上げてたんですが、

・IEインスタンスが存在しない→
  ・CreateObject("InternetExplorer.Application")
  ・それに対してNavigate2 URL (これまでどおりの処理)
・IEインスタンスが存在する→
  ・インスタンス取得
  ・それに対してNavigate2 URL, navOpenInNewTab
  ・新規タブで作った新インスタンスを取得、それに対して巡回操作

こう改造することで、1つの窓の複数タブにまとめることができました。
縮小表示で複数の巡回を一覧できて快適です。

ただし、IE7beta3がめちゃめちゃ落ちやすい罠。実用にはちょっと厳しいです。
いっぺん落ちるとDOM関係の内部構造がぐちゃぐちゃになるらしく、
IE7を再起動してもDHTML要素が取得できなくなります。
タスクスケジューラでexplorer.exeを全部殺して立ち上げなおすと、なぜか治る。
あと、普通に使ってても、Formで日本語入力できなくなったりすることがやたら多い。

9月のIE7正式版登場までには、もうちょい使い物になるようになってくれないと…。


36:26
06/08/29 01:28:54 o0XsAnyT
Alt + Space を SendInput する .exe を作って
wsh から呼び出すことにして解決しましたです。

37:名無し~3.EXE
06/09/03 02:10:24 9m7JaXWT
フォルダAにあるファイル全てと(サブフォルダ内のファイルを含む)
フォルダBにあるファイル全てを(サブフォルダ内のファイルを含む)比較して
同じファイル名のものがあれば、フォルダAのファイルをフォルダBのファイルに
上書きしたいのですが、どのような繰り返し処理を行えばいいのかわかりません。
初歩的な質問で申し訳ないのですが、どなたか参考になるご意見を聞かせて下さい。

38:名無し~3.EXE
06/09/03 02:23:00 M/8yjKeF
まずFileSystemObjectを使ってフォルダAにあるファイル全てを列挙して
配列(または連想配列)に入れておく。
あとはフォルダBのファイルを1つずつ調べていき、配列に同じ名前があれば
フォルダAのファイルを上書きコピーすればいいんじゃない?

列挙→GetFolder + Files 辺り
上書きコピー→CopyFile もしくは GetFile + Copy 辺り

39:37
06/09/03 23:36:27 9m7JaXWT
>>38
レスありがとうございます。
参考書片手に四苦八苦していたところに
ヒントを頂けて大変助かります。
早速試してみますね。

40:名無し~3.EXE
06/09/04 00:42:41 4RNTB77S
念のため言っとくと、GetFolder + Filesの列挙処理は、再帰的にな。
下層フォルダもぜんぶ処理対象にするためには。
もしわかんなきゃ「再帰」をキーワードに入れてぐぐること。

41:名無し~3.EXE
06/09/04 16:42:27 QYJv5P/p
JScriptからフォルダ共有の解除を行いたいと考えているのですが、外部からアクセスされている場合、
「この操作を続行しますか? (Y/N) [N]:」ってプロンプトが表示されてうまく動きません。
調べた感じでは標準入力(StdIn)に"Y"って送ってあげれば良い気がするのですが、うまく動いてくれません。
私が作ったjsファイルの内容は...

var WShell = WScript.CreateObject("WScript.Shell");
var objNet = WShell.Exec("net share Share /DELETE");
while (!objNet.StdOut.AtEndOfStream)
{
var strLine=objNet.StdOut.ReadLine();
var nPos=strLine.indexOf("この操作を続行しますか?");
if (nPos>=0)
{
objNet.StdIn.WriteLine("Y");
}
}

ちなみに誰も使用していない場合はちゃんと共有が解除されます。
対象はWindows2000 Serverです。
どうすればうまく動くようになりますか?
教えてエライ人!

42:名無し~3.EXE
06/09/06 02:31:02 6VRM8O2+
WShell.Exec("cmd /c echo y | net share airplane /DELETE");

あーあ、なんだよこの旧世代プログラマがやりそうな力技は
こんなことを考えついて試してしまう自分が嫌だ


43:名無し~3.EXE
06/09/06 03:14:37 W4o+AU9u
>>42
なるほどw パイプ便利だな

44:名無し~3.EXE
06/09/06 03:46:18 mG/64ktE
むしろ当然の解決策だと思った

45:名無し~3.EXE
06/09/06 08:24:38 Z523kT6K
stdinを読んでるわけでないようだから>>42もうまくいかない

46:41
06/09/06 11:01:06 B7U19HoE
>>42,43,44,45
レスありがとうございます。
wktkしながら試しましたが私の環境ではダメでした... (´・ω・`)
なんでだろうな...

47:名無し~3.EXE
06/09/07 00:01:08 Sux4zrox
>>46
var prc = GetObject("winmgmts:{impersonationLevel=impersonate}")
.ExecQuery("SELECT * FROM Win32_Share");
for ( var e = new Enumerator(prc); !e.atEnd(); e.moveNext() ) {
var sd = e.item();
if ( sd.Caption == "Share" ) sd.Delete();
}

48:47
06/09/07 00:02:48 7NNz2Yc3
しまった。プロセス操作のヤツからコピペしたから変数名が変だ。

49:名無し~3.EXE
06/09/07 10:45:44 EZRTppgw
>>47
同様のスクリプトを作ってやったことあるけれど
誰かが共有フォルダにアクセスしていると共有解除されないような


50:41
06/09/07 11:25:34 kklWKgcq
>>47
レスありがとうございます。
試したところ無事動作しているみたいです!
もしやあなたはネ申でつか。
...WMIは色々使えそうですね (. .)〆

>>49
簡単にやってみたところ大丈夫そうです。
もう少し色んなケースを試して見たいと思います。

PS.
レスくれた方々ありがとうございます。


51:名無し~3.EXE
06/09/12 17:21:16 6aj+7wdR
指定したフォルダのmp3ファイルをランダムで実行したい。

Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "C:\MP3\*.mp3",3,true

これじゃエラー出るんだけど何故?この場合ってワイルドカード使えない?

52:名無し~3.EXE
06/09/12 17:22:50 8qFdY5Hd
    _, ,_  パーン
 ( ‘д‘)  
   ⊂彡☆))Д´) 

53:名無し~3.EXE
06/09/12 17:47:46 A3UEU+1f
*はランダムではない。
任意の文字列という意味。
Runの引数にワイルドカードなんて認められてない……はず。

ランダムで実行したかったら
すべてのファイルパスを配列にぶちこむ

Rndとかでファイル数以下のランダムな整数作る

それをインデックスにしてファイル実行する




54:名無し~3.EXE
06/09/12 19:29:56 5GCyJ/an
var WSHShell = WScript.CreateObject("WScript.Shell");
var Fso = new ActiveXObject("Scripting.FileSystemObject");
// .mp3ファイル名をmp3[]配列に格納
var folder = Fso.GetFolder("C:\\MP3");
var mp3 = [];
for (var e = new Enumerator(folder.Files); ! e.atEnd(); e.moveNext()) {
    var f = e.item();
    if (/\.mp3$/i.test(f))
        mp3.push(f);
}
var i;
do {
    // ランダムに並べ替え
    for (i = 0; i < files.length; i++) {
        var r = Math.floor(files.length * Math.random());
        var t = mp3[i];
        mp3[i] = mp3[r];
        mp3[r] = t;
    }
    // プレイ
    for (i = 0; i < files.length; i++)
        WSHShell.Run(mp3[i], 3, true);
} while (true); // trueで無限ループ

55:名無し~3.EXE
06/09/12 19:41:04 jll2Gkhp
WSHで、既に作成されているExcelファイルを開き、そこにある
イメージコントロールに画像を表示させるにはどうしたら良いの
でしょうか?

Option Explicit
Dim objExcel
Dim objExcelBook
Dim objExcelSheet

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Set objExcelBook = objExcel.Workbooks.Open("D:\Book1.xls")
Set objExcelSheet = objExcelBook.Worksheets(1)

objExcelSheet.cells(1,1).value = "aaa"
objExcelSheet.Image1.Picture = LoadPicture("D:\test.jpg")

objExcel.Quit
Set objExcelSheet = Nothins
Set objExcelBook = Nothing
Set objExcel = Nothing

を実行すると、A1に"aaa"が入る所までは良いのですが、LoadPictureの
行で「致命的なエラーです」が出てしまいます。
おそらく、Image1の指定方法に問題があるかと思うのですが、具体的な
指定方法または、それについて記載されているURLなどを教えて頂けない
でしょうか?

56:名無し~3.EXE
06/09/12 20:01:14 5GCyJ/an
>>54
× files.length
○ mp3.length
です

57:51
06/09/12 23:16:11 rMXBUJr8
>>53
>>54
サンクス。動作は確認できたが、出来ればWSHで書いて欲しかった。javascriptはウヴォア

58:名無し~3.EXE
06/09/12 23:30:42 5MYDPybn
WSH は VBScript だけのもんじゃないよ?

59:名無し~3.EXE
06/09/12 23:36:25 muCQp/dj
JavaScriptもPerlもRubyもPythonも。

60:名無し~3.EXE
06/09/13 00:08:35 ry6CWKuK
あーそうなのかー
無知ですまぬ

61:名無し~3.EXE
06/09/13 10:17:38 74VYdgSO
>>55
> おそらく、Image1の指定方法に問題があるかと思うのですが、
問題ないよ。試しにその前で
MsgBox TypeName(objExcelSheet.Image1)
ってやってみな。これで「Image」が返るなら、正しくImageオブジェクトを参照出来てる。

問題があると言えば、objExcel.Quitの前にobjExcelBook.Closeが必要なのと
Set objExcelSheet = Nothingの、Nothingのスペルが間違ってることくらいだが
エラーが出ている部分は問題なし。おそらく間違ってるのではなく、仕様として出来ないんだろうね。
Picture = LoadPictureをブックのVBAモジュールに書いて、VBSからそのプロシージャを読んでみれば?
画像のパスはVBS側で指定することも可能だし。

62:55
06/09/13 11:01:41 P4go6OWL
>>61
御回答ありがとうございます。

> MsgBox TypeName(objExcelSheet.Image1)
> ってやってみな。

 こうすれば、オブジェクトの確認が出来るんですね。
 やってみた所、「Image」と表示され、参照方法には問題が無かった様です。

> 問題があると言えば、objExcel.Quitの前にobjExcelBook.Closeが必要なのと
> Set objExcelSheet = Nothingの、Nothingのスペルが間違ってることくらいだが

 そこに行く前に、エラーで止まっていたので気付きませんでした。

> おそらく間違ってるのではなく、仕様として出来ないんだろうね。

 御指摘の方法等を含め、別の方法を検討してみます。

63:55
06/09/13 20:42:40 8lTHFtaw
>>61
御指摘の通り、Excel側にVBAを仕込み、VBS側から実行したら画像の表示が出来ました。

やった事は、

1. Module1の下に、下記の様なマクロを仕込む。

Sub Macro1()
Worksheets("Sheet1").Image1.Picture = LoadPicture("D:\test.jpg")
End Sub

2. VBS側のLoadPictureの行を下記の様に変更

objExcel.Run ("Book1.xls!Module1.Macro1")

です。

Macroの実行方法が分からなかったのですが、
URLリンク(suiten.wig.nu)
が参考になりました。

今回は、ありがとうございました。

64:名無し~3.EXE
06/09/14 23:27:15 XRemmWNN
VBScriptから別のVBScriptを呼び出すことはできますか?
あとユーザライブラリの関数を呼び出す的なことをしたいのですができますか?
一度作った関数をコピペするのが面倒で。
よろしくお願いします。

65:名無し~3.EXE
06/09/14 23:36:11 6COp2u2i
ファイル読み込んで Eval
後者は意味が良く分からんが ユーザライブラリって何?

66:名無し~3.EXE
06/09/14 23:40:30 8WXwarb4
外部のスクリプトを読み込みたいんでしょ
wshなら素直に.wsfファイル作って、

<package>
<job>
<script language="VBScript" src="外部スクリプト1.vbs" />
<script language="VBScript" src="外部スクリプト2.vbs" />
<script language="VBScript" src="メイン.vbs" />
</job>
</package>

67:名無し~3.EXE
06/09/15 00:22:29 MxvWsxE+
あとついでに、ライブラリはクラス化すると吉。
VBScriptのクラス機能って存在感なさすぎて忘れがちだけどね。


68:名無し~3.EXE
06/09/15 00:49:05 6z+vLxyz
>>65,66,67
ありがとです。外部スクリプトの呼び出しは最初
Set obj = WScript.CreateObject("WScript.Shell")
Set obj2 = obj.Run("RunNotepad.vbs")
ってやってWin32オブジェクトじゃないって怒られたんですが、2行目を
obj.Run "RunNotepad.vbs"
で出来ました。いろんなやり方があるようですね。
ライブラリはクラス化して中にメソッド書けばいいのですかね?
いや、皆さん作られた関数をどうやって再利用されているのかと思いまして。

69:名無し~3.EXE
06/09/15 00:50:34 1e9FhoNf
コピペさ

70:名無し~3.EXE
06/09/15 00:54:36 3qVVhzeE
wsh で使うようなのは書き捨てが基本だな、私は。
String とか Date とか Number とかの prototype にいくつかメソッドは突っ込んでるけど(JScript)。

71:名無し~3.EXE
06/09/15 01:49:36 hZMJWHVe
wshしこしこ書くのとドトネトでアプリ作るのと
作業量が大して変わらないことに最近気付いた

72:print.vbs
06/09/17 03:36:23 pIeGPZjs
ファイルをまとめて印刷するツールです。
'Print files

Option Explicit

Dim Fs
Set Fs = WScript.CreateObject("Scripting.FileSystemObject")

Dim ws
Set ws = CreateObject("WScript.Shell")

Dim argv,file,name,ret
Set argv = WScript.Arguments

Dim tpad,i,code

If argv.Count > 0 Then
For Each file In argv
If Fs.FileExists(file) Then
name = Fs.GetFileName(file)
Set tpad = ws.Exec("C:\Free\TPad\TeraPad.exe """ & file & """")
WScript.Sleep 100
i=0
Do
ret = ws.AppActivate(tpad.ProcessID)
WScript.Sleep 100


73:print.vbs
06/09/17 03:38:27 pIeGPZjs
i=i+1
If i>100 Then
MsgBox "Activate 失敗 print前"
WScript.Quit
End If
Loop While ret = False
ws.SendKeys "^pp"
WScript.Sleep 5000
i=0
Do
ret = ws.AppActivate(tpad.ProcessID)
WScript.Sleep 100
i=i+1
if i>100 Then
MsgBox "Activate 失敗 print後"
WScript.Quit
End If
Loop While ret = False
tpad.terminate
set tpad = Nothing
Else
MsgBox file & "というファイルは存在しません。"
End If
Next
Else
MsgBox "ファイルをD&Dしてください"
End If


74:print.vbs
06/09/17 03:56:30 pIeGPZjs
ソースが無駄に長くてすみません。そういう書き方がしみ付いているもので

前スレまであったソースアップ板は、無くなったのでしょうか?

使い方は、印刷したいファイルをドラッグ&ドロップするつもりで作ったのですが、
過去スレを読みなおして見るとSendToで使うほうが便利そうです。

中でteraPadを呼び出しています。(作った当時使っていたエディタだったので)
sendkeysで操作しているだけなのでそういう操作ができるほかのエディタ用にも書きかえれると思います。

一応私の環境(Win98)では、3,4ページのファイル4,5個は、まとめて印刷できました
あまり大きなファイルを印刷するには、むいていないと思います。

まだあまり、wshにはなれてなくて、マニュアルを見ながら作りました。
sleepの値などもいいかげんで、その辺も含めて添削していただいたらありがたいです。

75:名無し~3.EXE
06/09/17 10:41:23 GAjliUIS
プリントアウトはFileSystemObjectを使って出来たはず、と思って
URLリンク(www.microsoft.com) を参考に
こんなん書いてみたけど、エラーは出ないのにプリントアウトできない。なんで?
\\MyPC\BJF9000 はUSBポートに接続したプリンタで、共有してます。

var fso = new ActiveXObject("Scripting.FileSystemObject");
var objWSHNet = new ActiveXObject("WScript.Network");
objWSHNet.AddPrinterConnection("LPT2:", "\\\\MyPC\\BJF9000");
var printer = fso.CreateTextFile("LPT2:", true);
try { printer.Write("printout test");} catch(e) {;}
printer.Close();
objWSHNet.RemovePrinterConnection("LPT2:");

76:print.vbs
06/09/17 14:54:53 pIeGPZjs
>>75

AddPrinterConnection
リモートの MS-DOS ベースのプリンタ接続をコンピュータ システムに追加します。

ちょっと前、メーカーに
「プリンタ(CANON PIXUS 550i)をMS-DOSで使えるようにできるかどうか」たずねたところ、
「MS-DOSで使えるようにはできない」という回答でした。
多分私の環境では、このスクリプトは使えないと思います。

77:名無し~3.EXE
06/09/17 15:50:48 8OXBNlvH
WshScriptExec オブジェクトについて質問させてください。

var sh = new ActiveXObject("WScript.Shell");
var exe = sh.Exec("cmd.exe /c dir");
while (exe.Status == 0) { WScript.Sleep(100); }
WScript.Echo("完了");
if (!exe.StdOut.AtEndOfStream) { WScript.Echo("出力結果\n" + exe.StdOut.ReadAll()); }

上記のスクリプトで "cmd.exe /c dir" を実行して結果を取得しようとしています。
しかしファイル数の多いフォルダではいつまで待っても (exe.Status == 1) になりません。
どうやら StdOut の容量制限があり、Read されるまで実行が止まってしまうようです。

(exe.Status == 1) を待たずに StdOut.ReadAll() をすればすぐに終了するのですが
StdOut.ReadAll() は、EOFまで(プログラム終了まで)帰ってきませんので
実行待ちの間に Terminate() したりすることができなくなってしまいます。
StdOut.Read() も入力があるまで待つので使えません。

良い解決策はないでしょうか?

78:名無し~3.EXE
06/09/17 16:36:09 RpCl687c
>>77
こういうふう(↓)にはしたくないってことかな

var sh = new ActiveXObject("WScript.Shell");
var exe = sh.Exec("cmd.exe /c dir");
var dir = [];
while (! exe.StdOut.AtEndOfStream) { dir.push(exe.StdOut.ReadLine()); }
WScript.Echo("完了");
WScript.Echo("出力結果\n" + dir.join("\n"));

それなら、こういうのは?

var sh = new ActiveXObject("WScript.Shell");
var dirfile = "dir.txt";
var exe = sh.Exec("cmd.exe /c dir > " + dirfile);
while (exe.Status == 0) { WScript.Sleep(100); }
WScript.Echo("完了");
var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.OpenTextFile(dirfile);
WScript.Echo("出力結果\n" + f.ReadAll());
f.Close();

79:目民 ◆xQYoLwVGxQ
06/09/17 16:41:19 oMWuro07
まぁ、>>78と同じだけど。

var sh = new ActiveXObject("WScript.Shell");
var exe = sh.Exec("cmd.exe /c dir");
var str = "";
while (!exe.StdOut.AtEndOfStream){
    str += exe.StdOut.ReadLine() + "\n";
}
WScript.Echo("完了");
WScript.Echo("出力結果\n" + str );

ファイルの多いフォルダで実行してみると、最後の一行に異常に時間がかかるね。
実用的側面からは、単にファイルにリダイレクトするのが早いと思う。

80:77
06/09/17 17:30:31 8OXBNlvH
>>78-79様ありがとうございます。

最終的には hta でつかおうと思ってるんですが
StdOut.ReadLine(), Read(),ReadAll() を使うと出力待ちの間、どうしても画面がフリーズしちゃうんです。
出力がない時は StdOut.AtEndOfStream が true になってくれればいいのですが・・・

あんまりファイルに書き出したくないのですが、やっぱそうするしかないでしょうか。

81:目民 ◆xQYoLwVGxQ
06/09/17 17:52:05 oMWuro07
>>80
while (!exe.StdOut.AtEndOfStream){
    str += exe.StdOut.ReadLine() + "\n";
    // ココで必要な処理
}
じゃ、ダメなの?


82:77
06/09/17 18:24:19 8OXBNlvH
>>81
そこで Sleep() や setTimuout() しちゃうと 時間がかかりすぎるし
どっちにしても ReadLine() のところで止まっちゃうので・・・

あ、すいません。実際には dir だけじゃなくて時間のかかるコマンドも使いたいと思ってます。

83:名無し~3.EXE
06/09/17 18:30:11 DkiP0mWC
>>77
URLリンク(www.vector.co.jp)
URLリンク(www.vector.co.jp)


84:目民 ◆xQYoLwVGxQ
06/09/17 18:32:31 oMWuro07
>>82
なるほど~。
やっぱり、ファイルに書き出すのがいいと思うよ。

85:77
06/09/17 20:06:55 8OXBNlvH
ファイル使うことにします。わがまま言ってすみません。
しかし >>83 すごいですね。
これだけ苦労されてるということはやっぱ簡単な方法はないということですね。

86:名無し~3.EXE
06/09/18 16:03:23 0Yyqe12A
>>77
HTAなら、これも。
URLリンク(www.vector.co.jp)


87:dir_+w.vbs
06/09/18 21:14:02 TkVYNr1Z
フォルダを再帰的に検索して中のファイルを書きこみ可能にする

' chmod +w **

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

Sub FileRW(filespec)
Set f = fso.GetFile(filespec)
ReadOnly=1
If f.attributes and ReadOnly Then
f.attributes = f.attributes - ReadOnly
End If
End Sub

Sub FolderRW(filespec)
Set subf = fso.GetFolder(filespec)
For Each FileName In subf.Files
FileRW(FileName)
Next
For Each FolderName In subf.Subfolders
FolderRW(FolderName)
Next
End Sub


88:dir_+w.vbs
06/09/18 21:14:40 TkVYNr1Z
Set argv = WScript.Arguments
If argv.Count <= 0 Then
Wscript.Echo "ファイルをD&Dしてください"
WScript.Quit
End If
For Each file In argv
If fso.FolderExists(file) Then
FolderRW(file)
ElseIf fso.FileExists(file) Then
FileRW(file)
Else
Wscript.Echo file & "というファイル・フォルダは存在しません。"
End If
Next
Wscript.Echo "書きこみ可 終わり"


89:dir_+w.vbs
06/09/18 21:21:50 TkVYNr1Z
こんなのwshで書かなくても標準のやり方があるのでしょうか?

いろいろなところのサンプルプログラムをつぎはぎして作ったので自信がないです。
特にBASICでの再帰呼び出しが。
間違いや他のやり方があったら指摘してください。

一応自分で動作チェックした限りは正常に動いているみたいです。

90:名無し~3.EXE
06/09/18 21:35:28 IGnQYkUN
attrib /s -r *.*

91:名無し~3.EXE
06/09/18 21:35:41 1rgAgV0s
attrib -r %1 /s /d

92:89
06/09/18 22:13:54 TkVYNr1Z
>>90 >>91
試してみたのですが、うまくいきません。
win98ではできないんじゃないでしょうか

93:名無し~3.EXE
06/09/18 23:23:17 j9Uaecc1
cygwinでchmod -R +w でできないかな?

94:名無し~3.EXE
06/09/19 03:10:53 +HpwiHbO
>>92
できる。コマンドプロンプト開いて attrib /? してみ。

95:名無し~3.EXE
06/09/19 03:26:44 X9V4Hq4y
>>93
UnxUtils の chmod でできました。

cygwin は、昔入れて日本語化するだけで一週間ぐらいかかっていたような気がするので
とりあえずパス

>>92は、今から試します

96:名無し~3.EXE
06/09/19 03:30:30 PvS6FX5U
システムついてると一緒に指定しないと外せなかったりとか
変な規制がついてるよね。あととりぶ

97:名無し~3.EXE
06/09/19 03:39:25 X9V4Hq4y
>>94
attrib /? を行うとフォルダも受け付けるようなニュアンスなんですが、
実際に試してみるとファイルは受け取るけど、フォルダはだめみたいなんですが?

98:77
06/09/19 12:50:31 PvS6FX5U
>>86
どうもです。

すれ違い気味(htaねた)でわるいけど、
Exec() の代わりに Run()を使ったら実行中でもhtmlがフリーズしないことがわかった。

これってJavaScriptでマルチスレッドみたいな動作だけど、普通に使ってても大丈夫なのかな?

99:名無し~3.EXE
06/09/20 14:48:55 NLxtOcqj
98の頃のバッチファイルを見つけた。

ffind . -attr dh | xargs attrib -h

ATTRIBでディレクトリを操作するときは1個ずつでないと駄目なようだ。
ffindもxargsも外部ツールなので、OS標準コマンドだけでは一括は無理だったのかも。


100:名無し~3.EXE
06/09/24 22:24:37 zXp/H8j6
ネット株取引でEトレを使っていますが
wsh で自作した便利なツールがあれば、ただで暗号化しないでクレ。

101:名無し~3.EXE
06/09/25 02:23:37 VGXX8PLt
見積もりは無料ですよ?

102:名無し~3.EXE
06/09/26 20:51:06 OGK5SGUc
作ってもらうほどではないので退散します。

103:名無し~3.EXE
06/09/28 13:45:46 P5EUWFW0

Windows Script File( .wsf )についての質問です。OSはWinXP SP1。
wsfは
<script language="VBScript" src="パス"/>
と定義すると、src属性値で指定したパスのファイルを参照できますが、
特定のディレクトリに置いたvbsを、別のディレクトリに置いたwsfから
ファイル名のみで参照する方法を教えてください。

相対パスが使えるので、同一ディレクトリに置けば、ファイル名のみで参照可能ですが
別ディレクトリの場合は、もちろんそのままではファイル名のみでの参照は出来ません。
パスを通せば出来るかとも思ったのですが、パスを通してもダメでした。
(WshShell.Runではファイル名だけで呼べるので、パスがきちんと通っているのは間違いないのです。)
参照するvbsを置くディレクトリは固定ですが、wsfは別ドライブに置く可能性もあるし
作成後、移動する可能性もあります。wsf、vbs側では、もう出来ることは無いので、
後はOS側の設定になると思いますが、どこをどのようにすれば解決するかが解りません。
どうかご教示願います。


104:名無し~3.EXE
06/09/28 16:34:28 H6IHIklM
htmlと同じ要領でいいんじゃないの?

test1.wsf
└testfolder
  └test2.vbs
って配置した時、

testfolder/test2.vbs
or
./testfolder/test2.vbs
でパスを指定したら動いたぉ

105:名無し~3.EXE
06/09/28 16:37:36 H6IHIklM
ごめん、ちゃんと読んでなかった
wsfはいろいろ動かすのね
誰かまかせた

106:目民 ◆xQYoLwVGxQ
06/09/28 17:31:22 McUJ8oIU
>>103
"VBSDir"みたいなユーザー環境変数を作って、
(システムのプロパティ→詳細設定タブ→環境変数(XPの場合))

var WshShell = WScript.CreateObject ("WScript.Shell");
with( WshShell ){
    CurrentDirectory = ExpandEnvironmentStrings("%VBSDir%");
}

とか?

// VBSの話なのにJScriptだけど気にしないでw

107:名無し~3.EXE
06/09/29 15:56:35 KPftmCI3
>>103
WSCを使う。

108:名無し~3.EXE
06/09/29 16:18:18 KPftmCI3
>>72
terapadには/pがないのかと思ったらあるじゃないですか。
terapad.exe /p
じゃ駄目なの?


109:103
06/10/01 11:02:53 WUxruDIK
>>106
残念ながらダメでした。
ご教示いただいたものを参照を書いてる行の前に入れても、
job分けしても、コードが実行される前に参照が評価されてしまうようで
ファイルが見つからないというエラーが出ます。

>>107
現在いくつか使ってます。
しかしwscは>>103の条件を満たしていません。なぜならwscは1ファイル単位の登録が必要で、
「特定のディレクトリに置いた」もの全てに対して有効になるようなものではないからです。
レジストリを使うのは全く構いませんが、「特定のvbs」ではなく「特定のディレクトリに置いたvbs」に
有効な方法をお願いします。
特定のディレクトリに置いた物を個別登録無しで使える方法があるならwscでも構いませんが。



ということで、ご回答には感謝しますが解決には至っておりませんので引き続き宜しくお願いします。


110:名無し~3.EXE
06/10/01 11:27:13 Mjb4Qp/j
ディレクトリさえ分かったならあとはファイル読み込んで Eval で評価すれば良いじゃん?

111:名無し~3.EXE
06/10/01 12:27:11 kCPKYKBO
wscの中に
<script language="VBScript" src="パス"/>
を並べて、
wsfからは、
wsc.メソッド名
で呼び出せ。
という意味だったけど通じなかった?
getobject("script:wscのフルパス")ならレジストリは不要だけど、これはどっちでも。


112:名無し~3.EXE
06/10/01 16:52:54 kCPKYKBO
>>75
form feed \f を送るとか。


113:名無し~3.EXE
06/10/02 04:29:12 +WL/W97H
>109
ここで究極の選択。スクリプトで wsf ファイルを書いて実行。

114:名無し~3.EXE
06/10/02 19:14:34 bWQ93X+m
すいません。知ってたら教えて頂きたいんですが
WScript.CreateObject(strProgID[,strPrefix])
などで作成したオブジェクトのプロパティやメソッドを調べる方法ご存知の方いますか?

115:名無し~3.EXE
06/10/02 19:19:41 9vzbPfN/
URLリンク(www.google.com)

116:名無し~3.EXE
06/10/02 20:00:19 kbswuek+
>>111
wscの<script>にsrc属性が使えるなんて初耳だけどできるの?
仕様的に他のファイルに実装を書けるとは思えんのだが

117:名無し~3.EXE
06/10/02 20:21:15 V60uXU1H
>>114
URLリンク(www.vector.co.jp)


118:114
06/10/02 21:36:01 bWQ93X+m
>>115,117
私の探し方が足りなかったみたいですね
解決しました、ありがとうございます

119:名無し~3.EXE
06/10/06 21:09:26 e+UOKJbW
DynaCallにEnumWindowsのサンプルがついてますが、
これを参考に特定文字列を含むウインドウにメッセージを送るってのを作ったのだけど、
なんかClassなのに変にグローバルになってて、どれをどう再利用できるのかよくわからんのです。
うまくカプセル化できませんか?

120:名無し~3.EXE
06/10/06 22:28:17 drRRZZ4o
日本語でおk

121:名無し~3.EXE
06/10/14 17:33:06 COmDsoWy
hosyu

122:名無し~3.EXE
06/10/14 22:13:32 kOCNeboH
DOS窓から行う作業があったので、wscript.execにやらせようとしているのですが、DOS窓では数秒で完了するコマンドがexecでは動作中のまま帰ってきません。
動くコマンドと動かないコマンドがあったりするのでしょうか?
ちなみに動かそうとしているのは業務用のソフトです

123:名無し~3.EXE
06/10/14 22:27:57 3YNrV18h
そもそも WScript オブジェクトに exec メソッドなんて無かったような気がするのだが。
何を以て返ってこないと判断したのか分からんし。

124:名無し~3.EXE
06/10/14 22:52:54 kOCNeboH
WshScriptExec の間違いでした
DOSだとすぐ出力結果のファイルが出来るんですが、WshScriptExecだと黒いウィンドウが開いてそこから進まないです

125:名無し~3.EXE
06/10/15 00:23:27 0zheqdL0
プロンプト画面に何も出力されないのは仕様。
WshScriptExec オブジェクトは StdIn / StdOut プロパティ使って入力したり出力受け取ったりする。
MSDN にサンプルコードも多分あるだろ。
進まないってのは入力待ちしてるんじゃね?

126:名無し~3.EXE
06/10/15 00:44:16 bYSqBt4L
>>122
以下のVBSスクリプトが参考になるかも。

Option Explicit
Dim ws,i
Set ws = CreateObject("WScript.Shell")
i = ws.Run("%COMSPEC% /C DIR C:\ > C:\sample.log" , 1, true)
ws.Run "NOTEPAD C:\sample.log" , 1, true
Set ws = Nothing
WScript.Quit(i)

127:名無し~3.EXE
06/10/15 21:08:26 Tn/lrPJD
私も122さんと同様にDOSの業務用ソフトをwshで動かそうとしているのですが、
以下の部分が分からず困っています。便乗して質問させてください。

動かそうとしているDOSの業務ソフトは実行するとメニューが出力され
メニューから番号を選択して、出力ファイルを得るものなのですが、
番号の選択を自動化したいと思い、「入力=」が表示されたら、
Sendkeysをしようと以下のようなvbsを作成したのですが、
Exec メソッドがプログラムの実行終了後に行われるため、
業務ソフトが終了するまで、StdOutが取得できず困っています。


Set ws = CreateObject("WScript.Shell")
Set wsExec = ws.exec("業務ソフト.exe")

Do Until wsExec.StdOut.AtEndOfStream
If InStr(strLine,"入力=") <> Then
wsExec.Sendkeys.("1")
End If


Loop


メニューが出力されるDOSをwshから操作する良い方法がありましたら
教えてください。

128:名無し~3.EXE
06/10/15 21:21:46 ZvvyBgQg
StdIn 使えばいいんじゃね?
と思ったが GUI アプリか? それにしちゃ StdOut 読んでるよな。
つか strLine が書き変わってないようだが。

> Exec メソッドがプログラムの実行終了後に行われる
の意味が分からん。

129:名無し~3.EXE
06/10/15 22:05:37 Qx1lq3WL
strLine = wsExec.StdOut.ReadLine は要らないの?
InStr(strLine,"入力=") > 0 じゃないの?
SendKeys と ("1") の間にある . は必要なの?

ごめん、VBScriptはあんまわかんないけど、これは明らかに動くわけないよね。

130:127
06/10/15 22:08:50 Tn/lrPJD
>>128さん
127のvbsを実行すると、DOS窓で黒いウィンドウが開いた状態で業務アプリが
入力待ちになったまま止まってしまいます。
StdOutが出来ているかを確かめるために、127のIf文を以下のように書き換えて
実行しました。

If InStr(strLine,"入力=") <> Then
  WScript.Echo strLine
End If

DOS窓で黒いウィンドウが開いた状態で業務アプリが入力待ちになり、
ずっと止まったままになります。
真っ黒で止まっているDOS窓に業務ソフトを終了させる番号の「9」を入力すると
WScript.Echo strLine が実行され、
メッセージボックスに「入力=」が表示されました。

某HPでExecメソッドは、Execを使って実行されたスクリプトまたはプログラムの実行終了後、
実行開始前のいずれかに行われると書いてあったので、業務ソフトが終了するまで
メッセージボックスが表示されなかったのかな?と思ったのです。

勘違だったらすみません。

131:名無し~3.EXE
06/10/15 22:23:29 bYSqBt4L
>>130
例えば"1"の1バイト分だけ記録されたテキストファイルを"stdin.txt"とすると、コマンドプロンプト画面で

業務ソフト.exe < stdin.txt

と打ち込んで実行させる事はできる?
もしできるのであれば、>>126の応用で解決できそうな気がするんだけど・・・

132:127
06/10/15 22:35:28 Tn/lrPJD
>>129さん
>SendKeys と ("1") の間にある . は必要なの?

ご指摘の通り、間違いです。お恥ずかしい。

>>128さん
その業務ソフトはGUI アプリというか、
DOS窓に
==メニュー===
 1)実行
 2)変更
 9)終了
入力=

のように表示され、DOS窓にメニューの番号を
入力するようなタイプのアプリです。
Sendkeysで番号を自動入力できないかなっと思ってWSHを調べながら
始めてみたのですがどうも難しくって・・


133:127
06/10/15 22:42:05 Tn/lrPJD
>>131さん
レスありがとうございます。

業務ソフト.exe < stdin.txt

もDOS窓で直接試してみたのですが、
メニューの後に複数のメニュー画面が続くせいか、
stdin.txtに選択したい番号を記述して実行では思うような結果が
得られませんでした。


134:名無し~3.EXE
06/10/15 22:58:29 Qx1lq3WL
え、てか Exec の戻り値の WshScriptExec に SendKeys なんてメソッドはないんじゃ。
wsExec.StdIn.Write "1" & VbCrLf
とかじゃないとダメでしょう。

135:名無し~3.EXE
06/10/16 11:08:32 FXtLk26/
1{Enter}なら、
(
ECHO 1
MORE
) | 業務ソフト.exe


136:名無し~3.EXE
06/10/16 13:42:42 FXtLk26/
Set wShell=CreateObject("WScript.Shell")
wShell.Run """業務ソフト.exe"""
Do While Not wShell.AppActivate("タイトル")
WScript.Sleep 100
Loop
wShell.SendKeys "1{Enter}"

137:名無し~3.EXE
06/10/17 00:39:00 MOegLLqX
>>127
ReadLineじゃ駄目なのは、「入力=」の最後に改行がないからだと思う。
>>130の「止まったまま」というのは改行待ちしてる状態と予想。

Read(1) で一字ずつ読みながら「入力=」との一致をチェックすればいけるかもよ。
一致したところでReadを止めてWrite。

138:名無し~3.EXE
06/10/17 13:34:51 oUFoO9T0
VBScript使用で、a.vbsはmusic1.mp3を再生する。b.vbsはmusic2.mp3を再生する。

最初にa.vbsを実行して、曲の再生が終わったら自動でb.vbsを実行することは可能ですか?
つまり、曲が終わったことを何らかの形で取得することは出来ますか?

139:名無し~3.EXE
06/10/17 14:11:45 cfn5xPeC
>>138
頭を柔軟に。
VBSで曲が終わったことを検知する方法ばかりに拘らないで
曲が終わったことをVBSに検知させられるような再生方法というのを考えてみよう。
答えはすぐ出るはずだ。

140:138
06/10/17 14:58:00 oUFoO9T0
感謝です。色々やってみたのですが、

Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "music1.mp3",1,true
WSHShell.Run "b.vbs",1,true

これだと、曲が終わった後にwinampを手動で終了させることでb.vbsが実行されることになります。
自動で実行するにはどうしたらいいでしょうか・・・

141:名無し~3.EXE
06/10/17 15:36:42 muV3yV8A
music1.mp3
music2.mp3

ってm3uファイルに書き出してvbsで実行

じゃ駄目?

142:138
06/10/17 15:43:39 oUFoO9T0
>>141
最終的に、複数のm3uファイルを用意して、一曲再生されるごとに別のm3uに移動する、
という方法にしたいの不可です。すまぬ。

143:名無し~3.EXE
06/10/17 22:23:32 V4I4jpE0
>>140
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "%COMSPEC% /C START /W music1.mp3",1,true
WSHShell.Run "b.vbs",1,true

これはどう?

144:名無し~3.EXE
06/10/17 22:28:18 CmV+fzlF
つかアプリ決め撃ちでない以上どうしようもないんじゃない?
再生が終わったからってアプリそのものが終了するとも限らないんだし。

145:名無し~3.EXE
06/10/17 22:42:21 V4I4jpE0
>144
ほとんどの再生ソフトは、再生終了時にソフト自体も終了させる事ができるだろ。
それに質問者本人は>140で再生ソフトがWinampという海外製の定番フリーソフトである事を
晒しているから、イザとなればどうにでもなるんじゃないかな?

146:名無し~3.EXE
06/10/17 22:45:40 kaR5WnBM
>>142
最初に複数のm3uファイルを読み込んで、vbsで合成したm3uファイルを作成後、再生するとか。

147:138
06/10/18 01:23:50 rHQCrCuO
再生終わったとあとに、どうしてもアプリを一旦終了させる必要がありそうですか。
流石にそれは無駄な動作なので避けたい所ですが('A`)  ちなみに再生はwinampでも何でもいいです。

>>143
コマンドプロンプトが邪魔に感じてしまう('A`)  でも工夫次第で何とかなるかも

>>146
プレイリストに手を加えるというのはアリかも


みなさんありがとうございました。何とかやってみます。

148:名無し~3.EXE
06/10/18 01:47:36 u9ZZOnu7
HTAで、こんな感じ。
<object id=WMP classid="clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95">
</object>
<script language=vbscript>
wmp.ShowAudioControls=True
wmp.AutoStart=True
wmp.Open "C:\...\....mp3"
</script>
<script language=vbscript for=WMP event="EndOfStream(Result)">
MsgBox Result
window.close
</script>


149:名無し~3.EXE
06/10/18 03:35:55 d04WcGTs
>>148に似てるけどこれを応用するとか( .htmでなく .hta です)

<html>
<head>
<script>resizeTo(269, 283);</script>
<hta:application /><title>Player</title>
<style>body{margin:0px}</style>
<script>
var Playlist = ["C:/WINDOWS/Media/tada.wav", "C:/WINDOWS/Media/chimes.wav"];
function Play() { Player.URL = Playlist.shift(); }
</script>
</head>
<body onload="Play()">
<object id="Player" classid="clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6"></object>
<script for="Player" event="playStateChange(NewState)">
if (NewState==1) {
if (Playlist.length)
setTimeout("Play()", 1000);
else
window.close();
}
</script>
</body>
</html>

150:名無し~3.EXE
06/10/18 19:45:28 u9ZZOnu7
原始的に、
mplay32.exe /play /close "...mp3"


151:名無し~3.EXE
06/10/20 17:33:52 wRng55we
WSHを使う上でのjsとvbsの違いって何ですか?

152:名無し~3.EXE
06/10/20 17:54:19 UVRHvNiX
違いはないと思うよ。

言語の仕様上、vbsの方がfor eachとかでファイル再帰とかやりやすいけど。
おれはVBっぽいのに拒否感があるので、見た目Cっぽいjsを主に使ってる

153:名無し~3.EXE
06/10/20 18:17:10 Ut0WGun7
>>151
JSは引数の参照渡しができないのが致命的欠点。
JSのいい加減な配列になれていると、VBSの配列は使いにくい。
使いにくい分実行速度はVBSが有利。

154:名無し~3.EXE
06/10/20 20:30:17 xavmQ34J
大文字と小文字を打ち間違えて、なんでエラーになるんだー、と悩むのが嫌でVBScriptです。



155:名無し~3.EXE
06/10/20 21:14:36 XTKLReLW
>>153
オブジェクトは参照渡しじゃね? 文字列とか整数みたいな、プリミティブな型は値渡しだけど。
でも、やろうと思えばオブジェクトを媒介にして参照渡しはできる。

function hoge(o) {
o.a += 10;
o.b -= 10;
}
var o = { a: 10, b: 10 };
hoge(o);
WScript.Echo( o.a + "\n" + o.b );


個人的には、正規表現が組み込まれてて文字列処理に強いのと、
プロトタイプ指向なOOPが好きなので、JavaScript 使ってます><
でも、VBSにもJSにもそれぞれ良いところがあるから、結局自分で選んだ方がいいね。

156:名無し~3.EXE
06/10/20 21:26:38 /EMq1zH6
>>155
参照の値渡し、と言うべきかな。

JScript は(ECMAScript は、なのかな)正規表現が言語組み込みな割りに
グローバル変数に結果が格納されるという謎仕様が台無し感たっぷり。

157:名無し~3.EXE
06/10/20 21:35:11 Ut0WGun7
>>155
自作関数ではなくて、引数に値を返してくるCOMがやっかいなのよ。
おれもJSの方が楽なのでCOM周辺だけVBS使ってる。

158:名無し~3.EXE
06/10/20 21:46:52 XTKLReLW
>>156
> グローバル変数に結果が格納される
RegExp オブジェクトの事かな?
match メソッドとか exec メソッドとか、結果をちゃんと返してくれるんだから
RegExp オブジェクトを使わずに返り値を使うようにすれば済む話では?

>>157
なるほど。それはやっかいですね(´・ω・)

159:122,124
06/10/20 22:07:43 G2VMMq1m
業務ソフトをwshshell.execで走らせると窓が止まってしまうと言っていた者です。
wshshell.run で同じコマンドを走らせると動きました。
stderrが使えないのが不満ですが・・・

runとexecで使えるコマンドに違いがあるのでしょうか?文字数とか使用できる文字とか。

160:名無し~3.EXE
06/10/20 22:11:13 Ut0WGun7
stdoutかstderrのバッファがあふれてるとか?

161:122,124
06/10/20 22:23:31 G2VMMq1m
>>160 バッファあふれ対策ってあるのでしょうか?runだと不便で不便で

162:名無し~3.EXE
06/10/20 22:37:34 Ut0WGun7
Readすりゃいいけど、stdoutとstderrの両方があふれる可能性がある場合はお手上げ。
ファイルにリダイレクトすれば・・・・・Runと変らないw

163:名無し~3.EXE
06/10/20 22:37:50 xavmQ34J
パイプはタンクじゃないんだから、出口から読み出さないと、入り口へ書き込めないよ。


164:名無し~3.EXE
06/10/20 22:40:50 xavmQ34J
Set oExec=wShell.Exec("cmd.exe /c,""業務アプリ.exe"" 2>&1")
hoge=oExec.StdOut.ReadAll()


165:122,124
06/10/20 22:47:21 G2VMMq1m
皆さんありがとうございます
DOS窓やrunで実行するとメッセージが1~2秒くらいスクロールしていますからたぶんstdoutのバッファあふれだと思います。
月曜日に>>164 を解読して応用してみたいと思います。

166:名無し~3.EXE
06/10/21 00:22:05 EplX6k6g
C:\> type test01.js
p = function(s) { WScript.Echo(s); }

re = /^ABC(.*)$/i;

if(r1 = "abcdefg".match(re)) {
if(r2 = "abcxyz".match(re)) {
if(r3 = re.exec("abchijkl")) {
if(r4 = re.exec("abcllll")) {
p(r1[1]);
p(r2[1]);
p(r3[1]);
p(r4[1]);
}
}
}
}

C:\> cscript test01.js
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

defg
xyz
hijkl
llll

C:\>

167:名無し~3.EXE
06/10/22 01:06:53 2EaEsyDk
VBSの正規表現って「任意の文字列」ってありますか?
いろいろネットで調べたんですが「.」が任意の一文字っつーのはわかったんですが
どうしても任意の文字列が見つからんのです。
そういう正規表現はVBSではサポートされてないのでしょうか?
ちなみにやりたいことは、テキストから「~ABC」という文字列を検索して
replaceで「XYZ」に置換したので、「~」の部分を正規表現で表せないのかなと。

168:名無し~3.EXE
06/10/22 01:13:55 liwxrQBE
終了条件(ABC)は分かった。
開始条件は何よ。

169:名無し~3.EXE
06/10/22 01:30:45 sou1ELwq
> 「任意の文字列」

普通に".*"だろ(空文字列も含む)

170:名無し~3.EXE
06/10/22 02:38:07 SSdwCjK5
検索: .+ABC
置換: XYZ

もちろん、テキストの先頭から ABC まで「任意の文字列」として置換の対象になります^^

171:167
06/10/22 11:14:01 2EaEsyDk
>>168
>>169
>>170
レスサンクスです。

>>168
開始条件はありません。先頭から「ABCで終わる」文字列をXYZに置換したいのです。
「あいABC」「かきくABC」「さしすせABC」をXYZへ置換したいのです。

>>169 >>170
「.*」「 .+」さっそく試してみます。
ちなみにこの2つは全く同じという解釈でいいですか?

172:名無し~3.EXE
06/10/22 11:23:38 liwxrQBE
>>171
> 先頭から「ABCで終わる」文字列
あるじゃん、開始条件。>先頭から

* や + は正規表現の超基本なのでそれくらい調べれ。
わざわざ別の文字を割り当ててる以上別モンである。

173:目民 ◆xQYoLwVGxQ
06/10/22 11:29:46 2pGZNsvG
>>171
「開始条件はない」と言ってるけど、無意識に
空白文字以外で始まる文字列を前提にしているんじゃないの?
それなら、「\S*ABC」でやってみるといい。


174:名無し~3.EXE
06/10/22 12:22:00 8Mbhr02c
>>171
こういう処理に慣れてないとしょうがないけど、条件の書き方があいまい。

> 先頭から

どの先頭から?

行なの? 単語なの?

単語としたら、単語ってなに?

>>173 が言うように空白意外の塊?

> 「ABCで終わる」文字列

文字列ってなに?

例えば、"あいABCD" は、"XYZD" に変換されてもいいの?

あと細かいところだけど、~ABC の「~」の部分は、空でもいいの?

175:名無し~3.EXE
06/10/22 15:27:40 N3BdT48Y
「あいABC」「かきくABC」「さしすせABC」をXYZへ置換したいのです。
----------------------------------------------------------
というのがどういう状況でデータになっているのかが重要、

あいABC
かきくABC
さしすせABC
おばかXXX

というように、データが一行に一個あるのか。
あるいは文章がずらずらと並んでいるのか。その場合、先頭って何?

あいABCでかきくABCがさしすせABC

なのか?
正規表現は行頭、行末もマッチさせることができるし、それらの情報
なくして回答なしだよ。

176:名無し~3.EXE
06/10/22 21:18:46 OIBpBobZ
WSHをはじめたいけど、何からはじめたらいいのかわかりません。


環境:WindowsXP SP2
PG経験:Cをちょっと

177:名無し~3.EXE
06/10/22 21:24:38 mrzCrOm0
>>176
まずはWMIあたりから始めると面白いかも。

178:名無し~3.EXE
06/10/22 21:29:03 vQXb6UKC
>>176
必要になったらやればいいのに、、、

179:名無し~3.EXE
06/10/22 22:13:29 EOcMerY5
>>176
つまり、>>1

180:名無し~3.EXE
06/10/22 22:55:08 afcuKUls
>>176
まずは>>2の「Windows Script 5.6 ドキュメント ダウンロード」を落として
隈無く読むこと。今とくにやりたいことも無いならそこから入れ。
まあ、やりたいことがあってもここから入るのが基本だが。

181:176
06/10/22 23:35:43 OIBpBobZ

返信ありがとうございます。

目的は、PCの単純作業を出来る限り自動化です。


「Windows Script 5.6 ドキュメント」を隈なく読みます。
それでわからなかったらまた質問に来させて頂きます。


ありがとう御座いました。

182:名無し~3.EXE
06/10/23 17:09:37 IlmEYWFd
まあでもそのドキュメントがWSHでやれることの全てだと思われても困るが。

183:名無し~3.EXE
06/10/23 22:29:02 p8IXQ+tm
え゛、あのドキュメントが全てだろ。

184:名無し~3.EXE
06/10/23 22:39:08 Mp53qbOD
COM があれば可能性はおおよそ無限だ

185:名無し~3.EXE
06/10/23 23:04:41 BYV9Z446
COMさえあればモテモテだね!

186:名無し~3.EXE
06/10/23 23:07:04 CBFP8CuU
>>182
俺もアレがほぼ全てだと思うけど。そりゃ、COMだのWMIだのを使えば、出来ることの幅は広がるが
それらはWSHの機能でもなければ、WSH専用のコンポーネントですら無いから、(WSH同梱のCOMはあるが)
全てに置いてリファレンスが載ってるわけではないが、それらが利用できることはきちんと書いてあるし。

例えば自分はWSHがサポートしていないxml要素を作り、それを利用して変数の値を保持したり
次回実行時にそれを読み込んだりしているが、wsfがxml準規であることと、COMが使えることが書かれている以上、
定形外のwsfを作りMSXML2.DOMDocumentを利用したこの使い方も、あのドキュメントから導き出される使い方の一つだ。

「加算演算が出来ます」と書かれていたら、1+1の演算が可能です、1+2の演算が可能ですといちいち書かれていなくても
それらの演算が可能なことを意味するのと同じ。言語製品は応用するのは当然のことだが、応用ではなく機能として見た場合に
あのドキュメントに書かれていない機能って何がある?絶対無いとは言い切れないけど、俺はすぐには思いつかないな。

187:名無し~3.EXE
06/10/23 23:40:51 j0qOB48K
3行でかけることをよくもまぁ

188:名無し~3.EXE
06/10/24 00:01:18 wYm/9FA1
別に構わないよ、苦ではないし。
わざわざそいいうことを書き込む理由が分からない。

189:名無し~3.EXE
06/10/24 00:11:33 P1PufmL8
内容が無い書き込みを読む方が苦痛ですぅ

190:名無し~3.EXE
06/10/24 04:22:05 e4iNvxC6
MSDNとか見難くて見てられんのよね・・

191:名無し~3.EXE
06/10/30 00:01:11 /XauOmlM
hozyu

192:名無し~3.EXE
06/10/31 19:28:20 WW2MnT8D
WSHクイックリファレンス 第2版
URLリンク(www.amazon.co.jp)

193:名無し~3.EXE
06/10/31 21:00:56 iFG+tSJz

> 紙のリファレンスとして
>  ある意味では,本書のカバーする範囲はWSHのヘルプに書かれている範囲をそう越えてはいない。
>  基礎的な知識があることを前提にすれば,一読したあとは紙のリファレンスであることが最大のメリットということになる。
>
>  紙のリファレンスの価値は,プログラマの人ならよくわかっているだろうとは思う。
>  はたして,紙としてまとめられていることにどれだけの価値を見いだすか,というのは議論のわかれるところだろう。
>  入門書というにはやや記述が少なく,解説書というにはリファレンス的側面が強すぎるため,それ以外には魅力を見いだせないということなのだ。

確かに紙面リファレンスは有ると便利だが、それだけの為に4000円出すバカは居ないだろう。
早速改訂版が入荷してたので立ち読みしてみたが、サンプルとかもショボすぎて使い物にならないし。
4000円出してでも、script56.chmの紙面版が欲しいってなら、絶対に買うなとは言わないが、
俺にとっては100円ショップに置いてあるなら買ってもいいかなってレベルの出来だな。


194:名無し~3.EXE
06/11/01 02:00:10 M0Co5/Ld
WSHヘルプを見る時は、「窓使いの憂鬱」と「HHプラグイン」を使うと読み易いです

195:名無し~3.EXE
06/11/02 02:30:30 dDmy4YyL
.vbsのショートカットにドロップしても引数が消えなくする方法
スレリンク(win板:341番)


196:名無し~3.EXE
06/11/04 10:36:34 gFg82ib7
.vbsを登録してD&Dで引数が渡せる良い感じのプログラムランチャーって無いですか?

197:名無し~3.EXE
06/11/04 11:12:19 4Dsu/0i6
あるよ。
但しスレ違いな上に、「良い感じ」の定義は個人によって違うので具体的な紹介はしないけど。
具体的に紹介して欲しいなら、ソフ板のソフト紹介スレで、
具体的にどういうものが君にとって「良い感じ」なのかをきちんと書いて質問してみな。

198:名無し~3.EXE
06/11/04 13:43:08 gFg82ib7
自分で探した方が早そうだね

199:名無し~3.EXE
06/11/06 04:44:13 6BsyJ6Fg
>>193 の引用部分は↓から。

URLリンク(www.cmagazine.jp)

200:名無し~3.EXE
06/11/08 19:11:29 PcQgSeRB
うっしゅ

201:名無し~3.EXE
06/11/09 18:28:17 /TzE/TZH
既定のブラウザをIE5.01SP4とfirefox2(J) とに交互に切り替えるJscript を恵んでくださいな。

202:名無し~3.EXE
06/11/09 20:33:49 nGi8ytVm
>201
交互っつったって、どんなタイミングで切り替えるんだ?
既定ブラウザ自体はレジストリ変更でどうにかなりそうだが…

203:名無し~3.EXE
06/11/09 21:13:34 /TzE/TZH
(既定ブラウザを切り替えたいときに、机の上にある jscript ファイルをダブルクリックする。)
// 1 変数の初期設定
// 2 該当レジストリを読み出す。
// 3 既定ブラウザが IE だったら、とある変数に firefox2 を代入する。
// 4 既定ブラウザが firefox2 だったら、とある変数に IE を代入する。
// 5 既定ブラウザが上記以外だったら、とある変数に 逝ってよし を代入する。
// 6 とある変数が逝ってよし以外なら、 該当レジストリに書き込んで、とある変数 に切り替えましたと表示する。
// 7 とある変数が逝ってよしなら、とある変数をそのまま表示する。

こんな感じです。

204:名無し~3.EXE
06/11/09 21:48:39 qNCmXvkB
何にしてもここは「スクリプトの作成を依頼するスレ」じゃないからね。
自分で作る気が無いなら帰れってことになる。

205:名無し~3.EXE
06/11/09 23:00:35 /TzE/TZH
じゃ帰りまつ。

206:名無し~3.EXE
06/11/10 02:09:09 AYtg+sjS
Windowsがロック(Win+L)されてると、AppActivate→SendKeysではキー送れない…ですよね?
何か代替策ありますでしょうか?

WshShell.Run('notepad.exe', 1, false);
WshShell.AppActivate('メモ帳');
WshShell.SendKeys('0{ENTER}');


207:名無し~3.EXE
06/11/10 02:31:12 ktKvkKru
>>206
COM使ってSendMessage
具体的な方法はCOM付属のドキュメントやWeb上の解説読んで

208:名無し~3.EXE
06/11/10 08:13:38 AYtg+sjS
>>207
㌧クス!
まだまだ知らないことばっかりだ(゚∀゚;)

209:名無し~3.EXE
06/11/11 04:37:38 jLixVM07
PowerShellって完成遅くね?
もしかしてVistaに入ってない?

210:名無し~3.EXE
06/11/11 07:33:18 OPUQTd1+
XMLHTTPでWebから落としてきたテキストファイルが文字化けするんだけど
文字化けしないで表示させるるにはどうな感じにやればいいの?

var xmlhttp = new ActiveXObject("MSXML2.XMLHTTP");
xmlhttp.open( ~ );
xmlhttp.send( ~ );
win1.document.open();
win1.document..clear();
win1.document..write(xmlhttp.responseText);
win1.document..close();
xmlhttp.abort();

↑はスゲー適当にしたけど、今はこんな感じ。処理の流れを言葉で表せは、
win1からコンテキストメニュー経由でスクリプト起動、xmlhttpでアクセス、ページ落としてそれをwin1にそのまま表示。
って感じ。

あと、落すのは普通のwebページ。ゆえにサーバーの方は弄れないし、文字コードは予め判らない。
そして、ググッていくつかの参考サイト見たけど、全然理解できなかったぐらいおれは馬鹿。

よろしくお願いします。

211:名無し~3.EXE
06/11/11 09:34:07 OPUQTd1+
桃子って馬鹿っぽい声だな

212:名無し~3.EXE
06/11/11 09:36:39 yLvGNxuk
URLそのまま表示するだけなら、普通にwin1.location.href="URL"でええやん(´・ω・)

213:名無し~3.EXE
06/11/11 19:52:55 fv8aBk4Z
>>203
「とある変数」は冗長。


214:名無し~3.EXE
06/11/11 21:17:05 OPUQTd1+
>>212
フォームのアクションへ POST して取ってくる感じ

215:名無し~3.EXE
06/11/11 21:55:05 yLvGNxuk
>>210
内容を一旦テンポラリファイルに保存してから、それを開くって感じではどう?
ADODB.Stream 使って XMLHTTP.responseBody を保存すれば、正確に表示できる。

216:名無し~3.EXE
06/11/12 09:26:37 paxoE75X
>>215
やってみたら文字化けしませんね。
一度保存するってのをベースにこれから作ってみます。
どもありがとです。

217:名無し~3.EXE
06/11/12 09:53:43 UX7xiFXQ
ファイルに書き出さんでも、Write した後 Position を 0 にしてやれば
Type やら Charset やら ReadText やら可能になるよ。

218:名無し~3.EXE
06/11/12 10:13:55 2A2d5Z9x
ファイルに保存せずに、ストリームを直接ブラウザに表示なんてできる?

219:名無し~3.EXE
06/11/12 12:41:42 eheFZjLZ
wshであるサーバがtelnetできるかというのを自動化しようとしてます。

Runメソッドでtelnet.exeを動かすスクリプトを作ってみたのですが、
ログインしている状態では動くのですが、
ログアウトしてスケジューラで動かしてみると、パスワードとかの入力ができません。

' Connect Server
strCMD = "telnet.exe -a -l root -f telnet.log 192.168.1.100
set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run strCMD,2
' Send Password
WScript.Sleep 5000' Wait 5 sec
WshShell.AppActivate "Telnet"
WshShell.SendKeys "rootpsaaword~"
' Exit Telnet
WScript.Sleep 2000' Wait 2 sec
WshShell.AppActivate "Telnet"
WshShell.SendKeys "exit~"


Execメソッドにしてみたところ、telnetが動いてもくれません。
Dim WshShell, oExec
strCMD = "telnet.exe -a -l root -f telnet.log 192.168.1.100
Set WshShell = CreateObject("WScript.Shell")
Set oWshExec = WshShell.Exec(strCMD)

telnetできなかったらメールを送るとかのスクリプトを作りたいのですが
どなたか同じことをやられている方はいませんでしょうか。

220:名無し~3.EXE
06/11/12 14:13:34 2A2d5Z9x
メールを送るだけなら CDO.Message でできる。
詳細はググってください。

221:名無し~3.EXE
06/11/12 15:18:11 0ftkh14m
>>219
標準のtelnet.exeじゃなくて、
ログインまで自動化できる別のソフトを使えば?


222:名無し~3.EXE
06/11/13 23:10:05 qiz2dlwS
>>219
> WshShell.SendKeys "rootpsaaword~"
> WshShell.SendKeys "exit~"

CRLF は送らなくていいのか?

223:名無し~3.EXE
06/11/14 20:48:44 eUOyYwez
ローカルPCのプロセス一覧を書き出す VBScript があります。
これは正常に動作します。

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_Process",,48)
For Each objItem in colItems
Wscript.Echo "Name: " & objItem.Name
Next


これをJScriptに変換しようとしているのですが、
var strComputer = ".";
var objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2");

この行で既に
「Microsoft JScript 実行時エラー: オートメーションの操作中にファイル名または
 クラス名を見つけられませんでした。」となってしまい、実行できません。
\記号が何か変なことになってるんでしょうか?

どうすればいいのでしょうか?
WSH 5.6 / Windows XP SP1 Professional の環境です。

224:223
06/11/14 20:50:34 eUOyYwez
あ、ごめんなさい。
エラーの行に WScript をつけて、以下のようにしても同様でした。
var obj = WScript.GetObject("winmgmts:\\" & strComputer & "\root\CIMV2");

225:名無し~3.EXE
06/11/14 20:53:15 7Tv2z1qt
JScript の文字列連結演算子は + だが。

226:名無し~3.EXE
06/11/14 21:43:55 7Vc/ugR3
\→\\

227:名無し~3.EXE
06/11/15 05:49:24 eq52+nBC
PowerShell正式版来たな

228:名無し~3.EXE
06/11/15 08:49:19 eq52+nBC
PowerShell 1.0
URLリンク(support.microsoft.com)
これおもしろいな。昔Monadスレあった気がしたけど、消えた?

229:223
06/11/15 10:11:55 8Giezelv
>>224-225
初歩的なことですみません&ありがとうございます。

var obj = WScript.GetObject("winmgmts:\\\\" + strComputer + "\\root\\CIMV2");

のようにしてみましたが、今度は
(null): 0x800C000D
のようなエラーで止まってしまいます。

試しに
var obj = WScript.GetObject("winmgmts:");
とすると上記と同じエラーが、

var obj = WScript.GetObject("winmgmts"); // ←コロンを取った
とすると>>223と同じエラーが出てしまいます。

原因として何が考えられるでしょうか?

230:223
06/11/15 10:18:39 8Giezelv
解決しました。

var obj = WScript.GetObject("winmgmts:\\\\" + strComputer + "\\root\\CIMV2");

はダメで

var obj = GetObject("winmgmts:\\\\" + strComputer + "\\root\\CIMV2");

ならOKでした。ムムム。

231:名無し~3.EXE
06/11/15 23:24:20 F3PSFGj/
>228
Windows Server 2003 Service Pack 1 および Windows XP Service Pack 2 用ってのがアレだけどな。

232:名無し~3.EXE
06/11/16 10:54:00 X8pn6xyi
PowerShell入れてみたけど、気に入ったw。
wsh捨てる決心ついたよ。


233:名無し~3.EXE
06/11/16 12:14:40 qnfm5A7w
コマンド入力まで時間かかるんだが、どうにかならんの

234:名無し~3.EXE
06/11/17 00:37:42 qH260wvA
Me使いのオレは移行したくとも出来んのだよ。

235:名無し~3.EXE
06/11/17 01:02:22 rS+zXwC5
PowerShellってパイプを流れるのもオブジェクトなのな。
CMDで
dir | sort
dir | sort /r

PSで
dir | sort
dir | sort -des
と比べて、頭の古い俺はちょっとびびった。

cd hklm:
でおいおい俺レジストリにいるよ、とか。

Vistaにデフォで入っていない上にデフォのセキュリティもガチガチだけど
やれること考えたら仕方ないか…。

236:名無し~3.EXE
06/11/17 12:14:12 tuTlaVuD
explorer切ってこっちをシェルにできんかな

237:名無し~3.EXE
06/11/18 02:21:35 OLX52wf8
ご案内

Windows PowerShell (正式版リリース)1.0
スレリンク(win板)

238:名無し~3.EXE
06/11/18 15:10:02 AegbpAMY
ADODB.Stream関連のプロパティを紹介してるHPを知りませんか?

239:名無し~3.EXE
06/11/18 15:16:39 rOSuiBco
>>238
Microsoft Data Access SDK 2.8
をダウンロードしたら?

240:名無し~3.EXE
06/11/18 15:20:25 mdx8HK1h
>>238
URLリンク(msdn.microsoft.com)


241:名無し~3.EXE
06/11/22 21:59:57 Hl8ABRjt
エクセルの中身をスクリプトで抜きたいんですが、可能でしょうか?
アクセスに移行しないと無理ですかね?

242:名無し~3.EXE
06/11/22 22:12:10 ag1e260U
エクセルの中身というのを xls ファイルの中身であると解釈して。
Excel.Application からオートメーションすればいいっしょ。

243:名無し~3.EXE
06/11/22 22:36:18 FtHukSom
>>241
できる

244:名無し~3.EXE
06/11/22 23:20:06 t8oZlpFH
>>241
ADO使えばできる
URLリンク(homepage3.nifty.com)

245:名無し~3.EXE
06/11/22 23:47:23 EyhEga7i
皆様ありがとうございます。
>>244のって工夫すればなかなか便利に使えそうですね

246:名無し~3.EXE
06/11/25 04:54:10 fL/fbuiK
>>244
いろいろいじってみたけど、これすげく楽しいな
ADOでのSQLについて詳しいページってありませんか?

247:名無し~3.EXE
06/11/25 12:16:26 Z7NXJrJB
ググれ

248:名無し~3.EXE
06/11/25 12:41:31 qXN1g3LQ
  _____
  \  _ _/
   ( *゚∀゚)
   ( 9 ⌒)9゙ ググッ
  "⊂_)∪,,

249:名無し~3.EXE
06/11/25 23:07:22 OspuG9g+
>>248

( ゚∀゚)o彡゚ wsh!wdh!

250:名無し~3.EXE
06/11/26 21:34:24 tNFTdH9d
OutLookExpress内の任意のメールを特定のフォルダへドロップ(コピー)するような
スクリプトは、どのような関数を使えばよいでしょうか?

emlファイルに出来ればOKです。
WSHに詳しい先輩達にご意見をお聞きしたいです。




251:名無し~3.EXE
06/11/27 00:56:10 1iJUdyxp
COMってコム?それともシーオーエム?
WSHは?ウィンドウズスクリプトホスト?ダブリュエスエイチ?ウーシュ?

252:名無し~3.EXE
06/11/27 01:06:33 nxeZfR/d
COMはコムって読んでる
WSHはそのままW・S・H

253:名無し~3.EXE
06/11/27 01:20:04 YbmUHCoW
wshはウッシュだなあ
関係ないけど、zshはズッシュ、tcshはティッシュと
呼んでた俺。

254:名無し~3.EXE
06/11/27 02:33:55 nUiU//Yl
        lヽ ノ l        l l l ヽ   ヽ
  )'ーーノ(  | |  | 、      / l| l ハヽ  |ー‐''"l
 / W  | | |/| ハ  / / ,/ /|ノ /l / l l l| l  W ヽ
 l   ・  i´ | ヽ、| |r|| | //--‐'"   `'メ、_lノ| /  ・  /
 |  S  l  トー-トヽ| |ノ ''"´`   rー-/// |  S |
 |  ・   |/     | l ||、 ''"""  j ""''/ | |ヽl  ・ |
 |  H   |       | l | ヽ,   ―   / | | l  H  |
 |   !!  |     / | | |   ` ー-‐ ' ´|| ,ノ| | |  !! |
ノー‐---、,|    / │l、l         |レ' ,ノノ ノハ、_ノヽ
 /        / ノ⌒ヾ、  ヽ    ノハ,      |
,/      ,イーf'´ /´  \ | ,/´ |ヽl      |
     /-ト、| ┼―- 、_ヽメr' , -=l''"ハ    |  l
   ,/   | ヽ  \  _,ノーf' ´  ノノ  ヽ   | |
、_    _ ‐''l  `ー‐―''" ⌒'ー--‐'´`ヽ、_   _,ノ ノ
   ̄ ̄   |           /       ̄


255:名無し~3.EXE
06/11/27 18:31:52 uqV36mAE
>>254 W-WSHのアニメはイマイチだったぞ。

256:名無し~3.EXE
06/11/27 22:04:40 mEhuqTrR
>>250
やっぱり、難しいですよね。


257:名無し~3.EXE
06/11/28 00:54:51 Tv1LYONy
htaやwsfファイル中でPerlScriptからVBScriptやJScriptの関数って呼べます?
逆は普通に呼べるんだが...

258:名無し~3.EXE
06/11/28 01:03:28 V4pOQQjQ
ランチャをWSHで組んだとして
起動させたアプリからの、read/writeを規制することは
可能でしょうか?
例えば、~/tmp以外書き込み禁止とか...

259:名無し~3.EXE
06/11/28 01:12:07 Tv1LYONy
>>258
何でそんなことしたいのか知らんけど,Windows2000かXPであれば,新しくユーザ作成して適切なパーミッション設定して,runasでそのユーザで起動するようにすればできなくはないかも?

260:名無し~3.EXE
06/11/28 01:14:36 kOxlRyob
>>257
呼べる。とりあえずwshのリファレンス読め。
htaも同じ方法で呼べるから。

>>258
不可能。というかスクリプトの仕事じゃない。
まともなプログラム言語使え。

261:名無し~3.EXE
06/11/28 01:25:26 Tv1LYONy
>>260
呼べるのか.

<job id="main">
<script language="PerlScript">
sub perlfunc() {
$WScript->Echo("PerlScript");
}
</script>
<script language="JScript">
perlfunc();
</script>
</job>

これはいけるけどPerlScriptからJScriptのfunctionを呼ぶにはどうすれば?
wshやperlのマニュアル見ても見つからないの.サンプルプリーズ.


262:名無し~3.EXE
06/11/28 01:27:02 RRJTB0rw
&jscriptfunc()
で呼べるんでないの?

263:名無し~3.EXE
06/11/28 01:33:50 Tv1LYONy
>>262
それで呼べないんで困ってるんですわ.

264:名無し~3.EXE
06/11/28 01:34:54 ZRVbZfL6
method(); でいけるはずだが

265:名無し~3.EXE
06/11/28 01:44:28 dX4vnSDr
strconvはもちろんストア昆布だよな

266:257
06/11/28 01:57:32 Tv1LYONy
いろいろ試してたら分かってきた.
PerlScriptからVBScriptの関数は普通に呼べました.
JScriptの関数オブジェクトはPerlScriptからは扱えないみたい.
$WScript->Echo(&jsfunc());とかやるとfunctionの中身がdumpされた.

JScriptで作ったライブラリとか使えねー
PerlScriptなんて使うなってことですか...

<job id="main">

<script language="VBScript">
  sub vbsfunc()
    WScript.Echo("VBScript")
  end sub
</script>

<script language="JScript">
  function jsfunc() {
    WScript.Echo("JScript");
  }
</script>

<script language="PerlScript">
  # VBScript OK
  &vbsfunc();
  # JScript NG
  &jsfunc();
  $WScript->Echo(&jsfunc());
</script>

</job>

267:名無し~3.EXE
06/11/28 02:35:59 BAbEyrhQ
引数があれば呼べるんじゃないかな

268:名無し~3.EXE
06/11/28 02:40:16 RRJTB0rw
適当な引数を付ければ呼べるみたいだね。例えば、
&jsfunc(0);

269:名無し~3.EXE
06/11/28 02:47:47 g8pNCyQB
ScriptControlを使う手もあります 呼び出し先ではWScript使えないけど><

<job id="main">
<script language="PerlScript">
my $jscript = <<EOS;
    function jsfunc() {
        return "Perl meets JavaScript!";
    }
EOS

my $sc = $WScript->CreateObject("ScriptControl");
$sc->{Language} = "JScript";
$sc->AddCode($jscript);
$WScript->Echo( $sc->Run("jsfunc") );
</script>
</job>

270:258
06/11/28 02:49:32 V4pOQQjQ
>>259
データ管理上、ローカルにデータ放置させたくないのです
小生Win環境詳しくないので、感謝
早速試してみます

>>260
元がAIX上でPerl/Tkで動いている認証機能付ランチャなのです
Win環境は詳しくないものですいません

271:名無し~3.EXE
06/11/28 07:36:45 AQr+bFyx
OutLookExpress内の任意のメールを特定のフォルダへドロップ(コピー)するような
関数を教えてください。

頭の良い方達揃いと思い、お願いします。


272:名無し~3.EXE
06/11/28 12:16:59 h8kiq/Ct
>>271
この辺の情報を参考に作ってみたら?

OE dbx file format
URLリンク(oedbx.aroh.de)

273:名無し~3.EXE
06/11/28 13:51:02 77idGO9L
>>271
バックアップならこういうのを使ったほうがいい。
URLリンク(www.tietew.net)

274:名無し~3.EXE
06/11/28 15:46:44 eQt+KJMG
>>269
>ScriptControlを使う手もあります 呼び出し先ではWScript使えないけど><
使えます。VBScriptの記述では、
sc.AddObject "WScript",WScript
みたいにSC側にWScriptを渡せばよいのです。


275:名無し~3.EXE
06/11/28 19:56:04 eQt+KJMG
>>258
>>259
タスクスケジューラに登録しておいて、FolderItem.InvokeVerbで実行する。


276:名無し~3.EXE
06/11/28 19:58:54 g8pNCyQB
>>274
それは知らなかった。thx!

277:名無し~3.EXE
06/11/28 20:03:14 eQt+KJMG
>>257
あてずっぽうですが、
jscriptfunc()
で呼べませんかね。結構、非常識な発想が通ったりする世界ですから。。。


278:257
06/11/28 20:21:36 Tv1LYONy
>>267 >>268
無事呼べました.情報ありがとう.
perlじゃ引数なし()は省略されるってことね.

>>269
ふむふむ.それはVBA上からperl呼ぶとか便利に使えそうだね.
vbsやjsにできてperlにできないことはまずないから,wshでは使わないだろうけど.


279:名無し~3.EXE
06/11/28 21:48:29 tFRKZPTE
スクリプトから自動でメールを出すってできますか?
WEBページにあるフォームに入力させて「送信」ボタンを押すみたいなことをスクリプトで実現したいんですが

280:名無し~3.EXE
06/11/28 21:53:30 mWvA7je0
MsgBox でフォントの大きさを変えることはできませんか?
(全体を大きくするのではなくて、MsgBox のウインドウで
使われるフォントだけ)。


281:名無し~3.EXE
06/11/28 22:06:15 g8pNCyQB
>>279
CDO.Message で検索してみて。

>>280
一からウィンドウを作らないとダメかと。

282:280
06/11/28 22:18:48 mWvA7je0
>>281
Wsh では1からウインドウを作るのはどうやるんでしょうか?
VBScript でも JScript でもこの際なんでも構いません。
(機能はメッセージを出して OK 押したら消えるだけでいいんです。
但し大きく目立つように出したいということです)。かといって
後から何か特別なソフトをインストールしたくはないので Wsh の
VBScript の MsgBox でやっていたんですが、何か方法ありませんかね?


283:名無し~3.EXE
06/11/28 22:23:19 HgwQULRQ
HTAにしてみるとか

284:名無し~3.EXE
06/11/28 22:23:44 E3q0nv4b
>>282
WSHから使えるGUIウィンドウは
COMとして作るしか無いかと。
又はWSHではなくHTAを使うって手もある。

285:名無し~3.EXE
06/11/28 22:39:47 mWvA7je0
>>283-284
HTAというのは知りませんでした。検索したら出ましたが。これですよね。
URLリンク(www.microsoft.com)
調べてみます。ありがとうございました。


286:名無し~3.EXE
06/11/28 23:15:36 eQt+KJMG
PowerShellを使うと
>>36
>>206
などが簡単に出来るようになるんでしょうか?


287:名無し~3.EXE
06/11/28 23:23:34 45tW03Iv
CDO.Messageについて調べたんですが、送信元のアドレスをソースに入れないで(自動で補完)つくれないでしょうか
スクリプトを知らない多数の人が使用するという想定でつくりたいのです

288:名無し~3.EXE
06/11/28 23:42:30 Tv1LYONy
>>282
TclScript, PerlScript, RubyScriptとかならTkが使えるからGUIが自前で作れる.
それぞれの処理系をインストールしなきゃならんのでHTAの方がいいだろうけど.

>>287
1. スクリプトの先頭にadress = "foo@bar.com"とか書いておいて,各自そこだけ書き換えてもらう.
2. InputBoxやHTA使ってアドレス入力させる.毎回入力するのは面倒なので,ファイルに保存しておいて次回からはそれを読む.
など

289:名無し~3.EXE
06/11/29 00:33:36 2/mGVRQo
>286
↓で訊いてみたら?

Windows PowerShell (正式版リリース)1.0
スレリンク(win板)

290:名無し~3.EXE
06/11/29 22:17:21 1dkZEY39
>>272
>>273
ありがとうございます。

ただ、もっと簡単にスクリプトを組んで関数をチャチャっとやって、
できないものか思案中です。

あまり、プログラムって組んだ経験がないので・・・。

何か良いアイデア、ないでしょうかね?


291:名無し~3.EXE
06/11/29 22:41:40 DKiaM1yK
自力でプログラム書く気がないなら、このスレ向きじゃないよ。

292:名無し~3.EXE
06/11/30 01:16:13 WPzp0DQP
標準出力を使いたいので、ファイル名.vbs(wscript.exe)で実行しても
cscript.exeで実行するような書き方ってありますか

293:名無し~3.EXE
06/11/30 01:40:47 f/8+PZe+
>>292
cscript //H:CScript

294:名無し~3.EXE
06/11/30 02:14:43 oHR/u/8E
>>292
vbsじゃないけどお手製のライブラリがあるので晒そう.

以下をたとえばstdio.jsというファイル名で保存
//---------ここから------------
(function(){
  if (/wscript\.exe$/i.test(WScript.FullName)) {
    var args = new Array();
    for ( var i = 0; i < WScript.Arguments.length; i++ ) {
      var arg = WScript.Arguments.Item(i);
      if ( /\s/.test(arg) ) arg = '"' + arg + '"';
      args.push(arg);
    }

    var cmd = 'cscript.exe //Nologo "' + WScript.ScriptFullName + '" ' + args.join(' ');
    WScript.CreateObject('WScript.Shell').Run(cmd, 1, false);
    WScript.Quit();
  }
})();
//---------ここまで------------

使い方はwsfファイルの最初でインクルードしてやるだけ.
<job>
<script language="JScript" src="stdio.js"></script>
<script language="VBScript">
'ここに好きなコードを書く
WScript.StdIn.ReadLine
</script>
</job>

既定のスクリプトホストはwscriptのままでOK.
まあ自分で使うだけなら >>293 が一番楽でしょう.

295:名無し~3.EXE
06/11/30 02:42:53 v82cYZy4
>>292
vbcという拡張子をcscriptに関連付けて、cscriptで実行したいものはvbcで作る方法がオススメ。

>>294のようにwsfでやるならjob分けした方が良い。または引数が無ければ
URLリンク(winscript.s41.xrea.com)
でもいける。ぶっちゃけ>>294はこれの引数対応版なだけの話だし。

まぁ固定環境で使うものなら関連付けしちゃうのが一番煩わしくないよ。
コード一切必要ないし、条件分岐も、実行し直しも、引数の処理も無いからいくらか早いし。

296:名無し~3.EXE
06/11/30 07:51:25 oeVEhWch
>>295
> vbcという拡張子をcscriptに関連付けて、cscriptで実行したいものはvbcで作る方法がオススメ。

なるほどなあ、その発想はなかった

297:名無し~3.EXE
06/11/30 10:53:55 4A8n4oNd
>>292
先頭に
REM:&@CScript.exe //E:VBS //NoLogo "%~f0" %* & GOTO :EOF
を書いて、拡張子をCMDに変える。


298:名無し~3.EXE
06/11/30 19:27:18 4A8n4oNd
>>295
関連付けで標準入出力が使えない障害はありましたが、もういいのかなぁ。
もし、駄目なときはVectorのVBCFILEを参照。


299:名無し~3.EXE
06/12/02 15:02:40 AkJV6Sni
これでアクセス権限のないレジストリキーを
自動で削除する事ってできますか?

300:名無し~3.EXE
06/12/02 20:48:03 0XNYfzVD
WScript.ShellのPopup(,nSecondsToWait)が効かないってことありませんか?
HTMLやHTAのときは、そういう仕様か、と思っていましたが、WSHでも起こります。
どうもCPUが他の処理で忙しいときに抜けるみたいです。
さすがに、それは障害だと思いますが。使うときはご用心。

301:名無し~3.EXE
06/12/07 15:43:36 EC5LjnO7
>>282
こういうときは、WSHからIEを起こして操作するのが簡単。

302:名無し~3.EXE
06/12/09 18:45:02 P6CN1pgP
バッチファイルをリモートからWebに埋め込んで使う
ということをwsh使ってできますか?

303:名無し~3.EXE
06/12/09 19:13:49 pifhS49b
うん、出来る。。面倒だから普通はやらないけど。
どうしても面倒なことやりたいなら勝手にやればよい。

304:名無し~3.EXE
06/12/09 19:49:26 0qa9SSE3
>302
で、それを知って何をやりたいんだ?

305:名無し~3.EXE
06/12/10 00:08:13 UaBqXVVZ
>>296
それより、RunWithArgs.CMDを関連付けると、便利だわい。


306:名無し~3.EXE
06/12/11 22:02:52 YncVWVUZ
age

307:名無し~3.EXE
06/12/13 14:27:42 /++eaESB
WSHでDDE使う方法ないかな?

308:名無し~3.EXE
06/12/13 15:44:43 npJjnYln
>>307
DDE使えるCOMを探すか作る。

そんな回答アリかよ、と言うかも知れないが
拡張無しにWSH自身が出来る事なんてほとんど無いんだから
COMなどの外部拡張に頼らざるを得ないのは仕方ない。

309:名無し~3.EXE
06/12/13 16:38:28 5aDfYNEq
VBScript(.vbs)からExcelを操作して文字列の置換をしたいんですが、ループでセルを一つずつ見て置換していくしかないのでしょうか?

Excelの置換ダイアログみたいに一括でブック全体を置換したいんですが。

ちなみに優先順位としては
処理スピード > コードの複雑さ
です。

310:名無し~3.EXE
06/12/13 17:06:25 npJjnYln
>>309
RangeメンバのReplaceメソッドで置換すれば良いだけだよ。
Replaceメソッドの使い方はExcelVBAヘルプに載ってる。
因みに組み込み関数のReplaceじゃないので間違わないように。

ちなみに対象のシートオブジェクトを取得したら、置換は1行コードで終わる。
ループよりは速いが、どのくらい速いかはCPU依存。

311:名無し~3.EXE
06/12/13 17:48:44 5aDfYNEq
>>310
ありがとうございました!標準オプションなら↓だけで行けますね。

objApp.ActiveSheet.Range("A1").Replace <検索文字列>, <置換文字列>

後は各シートでコレを実行させました。十分実用に耐えるスピードです。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch