[表示 : 全て 最新50 1-99 101- 201- 301- 2chのread.cgiへ]
Update time : 05/09 15:36 / Filesize : 105 KB / Number-of Response : 324
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

お前ら、wsh使ってますか? part6



1 名前:名無し~3.EXE [2006/08/08(火) 21:41:13 ID:hqaA5ks/]
こんなことコンピュータにやらせろよ。そう思ったことはありませんか?
簡易的な実行環境も含めて普通のOSだったら当たり前に備わっている自動実行。
Windowsの標準に備わっているそれがWSH(Windows Script Host)です。
また、ここではWSHだけに限らずWMI、ADSIなどのネタもOKです。

・煽りや荒らしは無視の方針で。基本的にsage進行です。

・ここでヒントを得て完成したスクリプトは、出来れば皆さんにお披露目してください。
 同じことで悩んでいる人のためになります。

・質問する際は、OS及び使用するコンポーネントのバージョンもお忘れなく。

●過去スレ
#1 pc.2ch.net/test/read.cgi/win/1009175619/
#2 pc2.2ch.net/test/read.cgi/win/1022248379/
#3 pc8.2ch.net/test/read.cgi/win/1058829737/
#4 pc8.2ch.net/test/read.cgi/win/1100489339/
#5 pc8.2ch.net/test/read.cgi/win/1126543183/

その他 >>1-10 あたり

2 名前:名無し~3.EXE [2006/08/08(火) 21:42:04 ID:hqaA5ks/]
●便利なリンク
Windows Script
www.microsoft.com/japan/msdn/scripting/default.asp
MSDN Library (オンラインドキュメント)
msdn.microsoft.com/library/ja/
Windows Script 5.6 ドキュメント ダウンロード (exe 形式; 1.67 MB)
download.microsoft.com/download/winscript56/Install/5.6/W98NT42KMe/JA/scd56jp.exe
OLE/COM Object Viewer ダウンロード (exe 形式; 656 KB)
download.microsoft.com/download/win2000platform/oleview/1.00.0.1/NT5/EN-US/oleview_setup.exe

Sesame Script (スクリプト作成初心者向けコラム)
www.microsoft.com/japan/technet/scriptcenter/resources/begin/default.mspx
Hey, Scripting Guy! (スクリプトのQ&A・ハウトゥ集)
www.microsoft.com/japan/technet/scriptcenter/resources/qanda/default.mspx
Windows管理者のためのWindows Script Host入門 (@IT内記事)
www.atmarkit.co.jp/fwin2k/operation/wsh01/wsh01_01.html
Windows XP に含まれるコマンドラインツールの紹介 (@IT内記事)
www.atmarkit.co.jp/fwin2k/xp_feature/013commandtool/commandtool.html
ADSI (Active Directory Service Interfaces) の特集記事全文
web.archive.org/web/20050309045811/http://www.galliver.co.jp/writing/nikkei_tokushu/wad002/index.html

●個人サイト
Windows Script Wiki
ttp://winscript.s41.xrea.com/wiki/index.php
趣味のJavaScriptなページ
ttp://homepage3.nifty.com/aya_js/
Windows Scripting Host Laboratory
ttp://www.roy.hi-ho.ne.jp/mutaguchi/wsh/
Tips - (小技にも満たない)微ワザ集
ttp://www1.u-netsurf.ne.jp/~tomo_c/tips/Scr002.html

3 名前:名無し~3.EXE [2006/08/08(火) 21:42:58 ID:hqaA5ks/]
●コンポーネント関連リンク

○Microsoft 製外部コンポーネント
DCOM
(98/Me) www.microsoft.com/japan/com/dcom/dcom98/dcom13.asp
(95)  www.microsoft.com/japan/com/dcom/dcom95/dcom13.asp
MDAC - データベース・メールボックス・WebDAV・バイナリの操作
msdn.microsoft.com/data/ref/mdac/downloads/
WMI(95/98/NT4.0) - 統一されたコンピュータオブジェクト化モデルを提供するスクリプティングAPI、リモート管理
www.microsoft.com/downloads/release.asp?releaseid=23142
ADSI - Active Dictoryの機能を操作
www.microsoft.com/downloads/release.asp?releaseid=11093
MSXML - XMLパーサ、SAX・DOM API、XSLT変換、POST/HTTPダウンロード
www.microsoft.com/downloads/details.aspx?familyid=993c0bcf-3bcf-4009-be21-27e85e1857b1

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

4 名前:名無し~3.EXE [2006/08/08(火) 21:43:41 ID:hqaA5ks/]
●WSH(COM)参考書籍

「はじめてのWindows Scripting Host」 (株)アンク著 技術評論社
www.amazon.co.jp/gp/product/477410650X/

「[改訂版] VBScriptポケットリファレンス」
www.amazon.co.jp/gp/product/4774127930/

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

「Windows Scripting Host入門 with VBScript」 毎日コミュニケーションズ
www.amazon.co.jp/gp/product/4839900906/

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

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

「Rubyを256倍使う本 邪道編」 arton著 ASCII
www.amazon.co.jp/gp/product/4756136036/

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

「標準ASPテクニカルリファレンス」山田祥寛著 SOFTBANK
www.amazon.co.jp/gp/product/4797314001/

5 名前:名無し~3.EXE [2006/08/08(火) 21:44:21 ID:hqaA5ks/]
●JavaScript、VBScript 以外のWSHで使える言語

TCLScript
tclscript.sourceforge.net/
Perl
www.activestate.com/Products/Download/Download.plex?id=ActivePerl
Ruby
www.geocities.co.jp/SiliconValley-PaloAlto/9251/ruby/
Python
www.python.jp/Zope/download
PHP
www.php.net/downloads.php
REXX
www.borg.com/~jglatt/rexx/win32/rxusrw32.htm

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

7 名前:名無し~3.EXE mailto:sage [2006/08/08(火) 22:44:29 ID:m2nJYuN9]
やっと立ったか
>>1

8 名前:名無し~3.EXE mailto:sage [2006/08/09(水) 02:18:52 ID:HZLszs1m]
おつりんこ


9 名前:名無し~3.EXE mailto:sage [2006/08/09(水) 21:29:00 ID:3ZEp9c5C]
元ネタttp://www.apple.com/jp/macosx/features/applescript/

10 名前:名無し~3.EXE mailto:sage [2006/08/10(木) 01:20:51 ID:dgC59hri]
そろそろ、大学入試に採用して欲しいものだ。



11 名前:11 mailto:sage [2006/08/10(木) 02:20:10 ID:/7XeLnYy]
こっそり。
連載って大変です・・・

12 名前:名無し~3.EXE mailto:sage [2006/08/10(木) 11:10:30 ID:QZ8c+eSn]
>>11
ただの11に興味はありません。

13 名前:名無し~3.EXE [2006/08/13(日) 11:50:50 ID:41wVJTOD]
「VBScrip逆引き大全 500の極意」 井川はるき著 秀和システム
ttp://www.shuwasystem.co.jp/cgi-bin/detail.cgi?isbn=4-7980-1379-X

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

15 名前:名無し~3.EXE mailto:sage [2006/08/13(日) 21:14:49 ID:mVE7+F6R]
見当たらないものを作るのがこのスレ。とにかく書いてみろよ。

16 名前:名無し~3.EXE mailto:sage [2006/08/13(日) 22:15:18 ID:Th0qG/nU]
簡単っぽいね

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

>>14
がんばれ

17 名前:名無し~3.EXE mailto:sage [2006/08/15(火) 17:13:21 ID:5toxITo3]
本当にスクリプトで画面の解像度を変更できませんか

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

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

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

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


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



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

22 名前:名無し~3.EXE mailto:sage [2006/08/18(金) 06:09:17 ID:Y6b9lzs3]
>>21
<meta http-equiv="Content-Type" content="text/html; charset=****" />

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

HTAスレがありますよ
HTAをもっと流行らせる計画
pc8.2ch.net/test/read.cgi/tech/1124559962/l50

23 名前:名無し~3.EXE mailto:sage [2006/08/18(金) 10:26:16 ID:cwDh88nh]
>>19
msdn.microsoft.com/library/default.asp?url=/workshop/browser/webbrowser/reflist_cpp.asp

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


24 名前:名無し~3.EXE mailto:sage [2006/08/18(金) 10:27:46 ID:cwDh88nh]
ああ間違えた
navOpenInNewTab = 0x0800
でもいいね

msdn.microsoft.com/library/default.asp?url=/workshop/browser/webbrowser/reference/enums/browsernavconstants.asp


25 名前:名無し~3.EXE mailto:sage [2006/08/19(土) 21:40:24 ID: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本体はサポート終了、しかも何故か→【要認証】
www.microsoft.com/downloads/details.aspx?FamilyID=0a8a18f6-249c-4a72-bfcf-fc6af26dc390&DisplayLang=ja
download.microsoft.com/download/3/a/0/3a09aa38-a01d-437d-aff0-517d1d47746e/Windows9x-Script56-KB917344-x86-jpn.exe

Windows 2003 用の Windows Script 5.6 【要認証】
www.microsoft.com/downloads/details.aspx?FamilyID=887fce82-e3f5-4289-a5e3-6cbb818623aa&DisplayLang=ja
download.microsoft.com/download/5/8/2/582f8ad3-c9c2-40db-a7cd-e30bdf8c6e70/WindowsServer2003-Script56-KB917344-x86-jpn.exe

簡単な説明
このダウンロードは、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 をインストールします。

pc8.2ch.net/test/read.cgi/win/1133803512/789

26 名前:名無し~3.EXE mailto:sage [2006/08/26(土) 08:36:17 ID: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 mailto:sage [2006/08/26(土) 09:21:16 ID:NGHbsPUz]
>>26
Run じゃなくて Exec を使う。
WshShell.Exec の返り値として WshScriptExec のオブジェクトが返ってくるから
その StdOut を読めばいいよ。

28 名前:26 mailto:sage [2006/08/26(土) 11:18:57 ID:7AZj00I6]
>>27
サンクス! 全然考えてなかったやりかたでした。

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

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


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

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

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

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



31 名前:26 mailto:sage [2006/08/26(土) 12:23:05 ID:7AZj00I6]
いや、まだやってますけど・・・。

32 名前:名無し~3.EXE mailto:sage [2006/08/26(土) 22:54:38 ID:caN/FdXT]
HTAって、背景透過できない?

33 名前:名無し~3.EXE mailto:sage [2006/08/26(土) 23:22:22 ID:NGHbsPUz]
このスレ的な回答なら COM を作ればできる かな。

34 名前:名無し~3.EXE mailto:sage [2006/08/27(日) 18:11:11 ID:iJpflacd]
難しいそうでつね。

35 名前:19 mailto:sage [2006/08/27(日) 23:34:30 ID: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 mailto:sage [2006/08/29(火) 01:28:54 ID:o0XsAnyT]
Alt + Space を SendInput する .exe を作って
wsh から呼び出すことにして解決しましたです。

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

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

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

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

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



41 名前:名無し~3.EXE mailto:sage [2006/09/04(月) 16:42:27 ID: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 mailto:sage [2006/09/06(水) 02:31:02 ID:6VRM8O2+]
WShell.Exec("cmd /c echo y | net share airplane /DELETE");

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


43 名前:名無し~3.EXE mailto:sage [2006/09/06(水) 03:14:37 ID:W4o+AU9u]
>>42
なるほどw パイプ便利だな

44 名前:名無し~3.EXE mailto:sage [2006/09/06(水) 03:46:18 ID:mG/64ktE]
むしろ当然の解決策だと思った

45 名前:名無し~3.EXE mailto:sage [2006/09/06(水) 08:24:38 ID:Z523kT6K]
stdinを読んでるわけでないようだから>>42もうまくいかない

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

47 名前:名無し~3.EXE mailto:sage [2006/09/07(木) 00:01:08 ID: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 mailto:sage [2006/09/07(木) 00:02:48 ID:7NNz2Yc3]
しまった。プロセス操作のヤツからコピペしたから変数名が変だ。

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


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

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

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




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

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

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

52 名前:名無し~3.EXE mailto:sage [2006/09/12(火) 17:22:50 ID:8qFdY5Hd]
    _, ,_  パーン
 ( ‘д‘)  
   ⊂彡☆))Д´) 

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

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

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

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




54 名前:名無し~3.EXE mailto:sage [2006/09/12(火) 19:29:56 ID: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 mailto:sage [2006/09/12(火) 19:41:04 ID: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 mailto:sage [2006/09/12(火) 20:01:14 ID:5GCyJ/an]
>>54
× files.length
○ mp3.length
です

57 名前:51 mailto:sage [2006/09/12(火) 23:16:11 ID:rMXBUJr8]
>>53
>>54
サンクス。動作は確認できたが、出来ればWSHで書いて欲しかった。javascriptはウヴォア

58 名前:名無し~3.EXE mailto:sage [2006/09/12(火) 23:30:42 ID:5MYDPybn]
WSH は VBScript だけのもんじゃないよ?

59 名前:名無し~3.EXE mailto:sage [2006/09/12(火) 23:36:25 ID:muCQp/dj]
JavaScriptもPerlもRubyもPythonも。

60 名前:名無し~3.EXE mailto:sage [2006/09/13(水) 00:08:35 ID:ry6CWKuK]
あーそうなのかー
無知ですまぬ



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

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

62 名前:55 mailto:sage [2006/09/13(水) 11:01:41 ID:P4go6OWL]
>>61
御回答ありがとうございます。

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

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

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

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

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

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

63 名前:55 mailto:sage [2006/09/13(水) 20:42:40 ID: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の実行方法が分からなかったのですが、
suiten.wig.nu/index.php?itemid=289
が参考になりました。

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

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

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

66 名前:名無し~3.EXE mailto:sage [2006/09/14(木) 23:40:30 ID: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 mailto:sage [2006/09/15(金) 00:22:29 ID:MxvWsxE+]
あとついでに、ライブラリはクラス化すると吉。
VBScriptのクラス機能って存在感なさすぎて忘れがちだけどね。


68 名前:名無し~3.EXE [2006/09/15(金) 00:49:05 ID: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 mailto:sage [2006/09/15(金) 00:50:34 ID:1e9FhoNf]
コピペさ

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



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

72 名前:print.vbs [2006/09/17(日) 03:36:23 ID: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 [2006/09/17(日) 03:38:27 ID: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 [2006/09/17(日) 03:56:30 ID:pIeGPZjs]
ソースが無駄に長くてすみません。そういう書き方がしみ付いているもので

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

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

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

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

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

75 名前:名無し~3.EXE mailto:sage [2006/09/17(日) 10:41:23 ID:GAjliUIS]
プリントアウトはFileSystemObjectを使って出来たはず、と思って
ttp://www.microsoft.com/japan/msdn/columns/server/server033099.aspx を参考に
こんなん書いてみたけど、エラーは出ないのにプリントアウトできない。なんで?
\\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 [2006/09/17(日) 14:54:53 ID:pIeGPZjs]
>>75

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

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

77 名前:名無し~3.EXE mailto:sage [2006/09/17(日) 15:50:48 ID: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 mailto:sage [2006/09/17(日) 16:36:09 ID: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 mailto:sage [2006/09/17(日) 16:41:19 ID: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 mailto:sage [2006/09/17(日) 17:30:31 ID:8OXBNlvH]
>>78-79様ありがとうございます。

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

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



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


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

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

83 名前:名無し~3.EXE mailto:sage [2006/09/17(日) 18:30:11 ID:DkiP0mWC]
>>77
ttp://www.vector.co.jp/soft/winnt/util/se373943.html
ttp://www.vector.co.jp/soft/winnt/util/se363385.html


84 名前:目民 ◆xQYoLwVGxQ mailto:sage [2006/09/17(日) 18:32:31 ID:oMWuro07]
>>82
なるほど〜。
やっぱり、ファイルに書き出すのがいいと思うよ。

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

86 名前:名無し~3.EXE mailto:sage [2006/09/18(月) 16:03:23 ID:0Yyqe12A]
>>77
HTAなら、これも。
ttp://www.vector.co.jp/soft/winnt/util/se405418.html


87 名前:dir_+w.vbs [2006/09/18(月) 21:14:02 ID: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 [2006/09/18(月) 21:14:40 ID: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 [2006/09/18(月) 21:21:50 ID:TkVYNr1Z]
こんなのwshで書かなくても標準のやり方があるのでしょうか?

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

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

90 名前:名無し~3.EXE mailto:sage [2006/09/18(月) 21:35:28 ID:IGnQYkUN]
attrib /s -r *.*



91 名前:名無し~3.EXE mailto:sage [2006/09/18(月) 21:35:41 ID:1rgAgV0s]
attrib -r %1 /s /d

92 名前:89 [2006/09/18(月) 22:13:54 ID:TkVYNr1Z]
>>90 >>91
試してみたのですが、うまくいきません。
win98ではできないんじゃないでしょうか

93 名前:名無し~3.EXE mailto:sage [2006/09/18(月) 23:23:17 ID:j9Uaecc1]
cygwinでchmod -R +w でできないかな?

94 名前:名無し~3.EXE mailto:sage [2006/09/19(火) 03:10:53 ID:+HpwiHbO]
>>92
できる。コマンドプロンプト開いて attrib /? してみ。

95 名前:名無し~3.EXE [2006/09/19(火) 03:26:44 ID:X9V4Hq4y]
>>93
UnxUtils の chmod でできました。

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

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

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

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

98 名前:77 mailto:sage [2006/09/19(火) 12:50:31 ID:PvS6FX5U]
>>86
どうもです。

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

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

99 名前:名無し~3.EXE mailto:sage [2006/09/20(水) 14:48:55 ID:NLxtOcqj]
98の頃のバッチファイルを見つけた。

ffind . -attr dh | xargs attrib -h

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


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



101 名前:名無し~3.EXE mailto:sage [2006/09/25(月) 02:23:37 ID:VGXX8PLt]
見積もりは無料ですよ?

102 名前:名無し~3.EXE mailto:sage [2006/09/26(火) 20:51:06 ID:OGK5SGUc]
作ってもらうほどではないので退散します。

103 名前:名無し~3.EXE [2006/09/28(木) 13:45:46 ID: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 [2006/09/28(木) 16:34:28 ID:H6IHIklM]
htmlと同じ要領でいいんじゃないの?

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

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

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

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

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

とか?

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

107 名前:名無し~3.EXE mailto:sage [2006/09/29(金) 15:56:35 ID:KPftmCI3]
>>103
WSCを使う。

108 名前:名無し~3.EXE mailto:sage [2006/09/29(金) 16:18:18 ID:KPftmCI3]
>>72
terapadには/pがないのかと思ったらあるじゃないですか。
terapad.exe /p
じゃ駄目なの?


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

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



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


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



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


112 名前:名無し~3.EXE mailto:sage [2006/10/01(日) 16:52:54 ID:kCPKYKBO]
>>75
form feed \f を送るとか。


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

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

115 名前:名無し~3.EXE mailto:sage [2006/10/02(月) 19:19:41 ID:9vzbPfN/]
www.google.com/search?q=strProgID

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

117 名前:名無し~3.EXE mailto:sage [2006/10/02(月) 20:21:15 ID:V60uXU1H]
>>114
ttp://www.vector.co.jp/soft/win95/util/se406129.html


118 名前:114 mailto:sage [2006/10/02(月) 21:36:01 ID:bWQ93X+m]
>>115,117
私の探し方が足りなかったみたいですね
解決しました、ありがとうございます

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

120 名前:名無し~3.EXE mailto:sage [2006/10/06(金) 22:28:17 ID:drRRZZ4o]
日本語でおk



121 名前:名無し~3.EXE mailto:sage [2006/10/14(土) 17:33:06 ID:COmDsoWy]
hosyu

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

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

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

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

126 名前:名無し~3.EXE mailto:sage [2006/10/15(日) 00:44:16 ID: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 mailto:sage [2006/10/15(日) 21:08:26 ID: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 mailto:sage [2006/10/15(日) 21:21:46 ID:ZvvyBgQg]
StdIn 使えばいいんじゃね?
と思ったが GUI アプリか? それにしちゃ StdOut 読んでるよな。
つか strLine が書き変わってないようだが。

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

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

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

130 名前:127 mailto:sage [2006/10/15(日) 22:08:50 ID: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 mailto:sage [2006/10/15(日) 22:23:29 ID:bYSqBt4L]
>>130
例えば"1"の1バイト分だけ記録されたテキストファイルを"stdin.txt"とすると、コマンドプロンプト画面で

業務ソフト.exe < stdin.txt

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

132 名前:127 mailto:sage [2006/10/15(日) 22:35:28 ID:Tn/lrPJD]
>>129さん
>SendKeys と ("1") の間にある . は必要なの?

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

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

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


133 名前:127 mailto:sage [2006/10/15(日) 22:42:05 ID:Tn/lrPJD]
>>131さん
レスありがとうございます。

業務ソフト.exe < stdin.txt

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


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

135 名前:名無し~3.EXE mailto:sage [2006/10/16(月) 11:08:32 ID:FXtLk26/]
1{Enter}なら、
(
ECHO 1
MORE
) | 業務ソフト.exe


136 名前:名無し~3.EXE mailto:sage [2006/10/16(月) 13:42:42 ID: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 mailto:sage [2006/10/17(火) 00:39:00 ID:MOegLLqX]
>>127
ReadLineじゃ駄目なのは、「入力=」の最後に改行がないからだと思う。
>>130の「止まったまま」というのは改行待ちしてる状態と予想。

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

138 名前:名無し~3.EXE mailto:sage [2006/10/17(火) 13:34:51 ID:oUFoO9T0]
VBScript使用で、a.vbsはmusic1.mp3を再生する。b.vbsはmusic2.mp3を再生する。

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

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

140 名前:138 mailto:sage [2006/10/17(火) 14:58:00 ID: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 mailto:sage [2006/10/17(火) 15:36:42 ID:muV3yV8A]
music1.mp3
music2.mp3

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

じゃ駄目?

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

143 名前:名無し~3.EXE mailto:sage [2006/10/17(火) 22:23:32 ID: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 mailto:sage [2006/10/17(火) 22:28:18 ID:CmV+fzlF]
つかアプリ決め撃ちでない以上どうしようもないんじゃない?
再生が終わったからってアプリそのものが終了するとも限らないんだし。

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

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

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

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

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


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

148 名前:名無し~3.EXE mailto:sage [2006/10/18(水) 01:47:36 ID: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 mailto:sage [2006/10/18(水) 03:35:55 ID: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 mailto:sage [2006/10/18(水) 19:45:28 ID:u9ZZOnu7]
原始的に、
mplay32.exe /play /close "...mp3"




151 名前:名無し~3.EXE [2006/10/20(金) 17:33:52 ID:wRng55we]
WSHを使う上でのjsとvbsの違いって何ですか?

152 名前:名無し~3.EXE mailto:sage [2006/10/20(金) 17:54:19 ID:UVRHvNiX]
違いはないと思うよ。

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

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

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



155 名前:名無し~3.EXE mailto:sage [2006/10/20(金) 21:14:36 ID: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 mailto:sage [2006/10/20(金) 21:26:38 ID:/EMq1zH6]
>>155
参照の値渡し、と言うべきかな。

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

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

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

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

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

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

160 名前:名無し~3.EXE mailto:sage [2006/10/20(金) 22:11:13 ID:Ut0WGun7]
stdoutかstderrのバッファがあふれてるとか?



161 名前:122,124 mailto:sage [2006/10/20(金) 22:23:31 ID:G2VMMq1m]
>>160 バッファあふれ対策ってあるのでしょうか?runだと不便で不便で

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

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


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


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

166 名前:名無し~3.EXE mailto:sage [2006/10/21(土) 00:22:05 ID: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 [2006/10/22(日) 01:06:53 ID:2EaEsyDk]
VBSの正規表現って「任意の文字列」ってありますか?
いろいろネットで調べたんですが「.」が任意の一文字っつーのはわかったんですが
どうしても任意の文字列が見つからんのです。
そういう正規表現はVBSではサポートされてないのでしょうか?
ちなみにやりたいことは、テキストから「〜ABC」という文字列を検索して
replaceで「XYZ」に置換したので、「〜」の部分を正規表現で表せないのかなと。

168 名前:名無し~3.EXE mailto:sage [2006/10/22(日) 01:13:55 ID:liwxrQBE]
終了条件(ABC)は分かった。
開始条件は何よ。

169 名前:名無し~3.EXE mailto:sage [2006/10/22(日) 01:30:45 ID:sou1ELwq]
> 「任意の文字列」

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

170 名前:名無し~3.EXE mailto:sage [2006/10/22(日) 02:38:07 ID:SSdwCjK5]
検索: .+ABC
置換: XYZ

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



171 名前:167 [2006/10/22(日) 11:14:01 ID:2EaEsyDk]
>>168
>>169
>>170
レスサンクスです。

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

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

172 名前:名無し~3.EXE mailto:sage [2006/10/22(日) 11:23:38 ID:liwxrQBE]
>>171
> 先頭から「ABCで終わる」文字列
あるじゃん、開始条件。>先頭から

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

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


174 名前:名無し~3.EXE mailto:sage [2006/10/22(日) 12:22:00 ID:8Mbhr02c]
>>171
こういう処理に慣れてないとしょうがないけど、条件の書き方があいまい。

> 先頭から

どの先頭から?

行なの? 単語なの?

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

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

> 「ABCで終わる」文字列

文字列ってなに?

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

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

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

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

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

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

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

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


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

177 名前:名無し~3.EXE mailto:sage [2006/10/22(日) 21:24:38 ID:mrzCrOm0]
>>176
まずはWMIあたりから始めると面白いかも。

178 名前:名無し~3.EXE mailto:sage [2006/10/22(日) 21:29:03 ID:vQXb6UKC]
>>176
必要になったらやればいいのに、、、

179 名前:名無し~3.EXE mailto:sage [2006/10/22(日) 22:13:29 ID:EOcMerY5]
>>176
つまり、>>1

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



181 名前:176 mailto:sage [2006/10/22(日) 23:35:43 ID:OIBpBobZ]

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

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


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


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

182 名前:名無し~3.EXE mailto:sage [2006/10/23(月) 17:09:37 ID:IlmEYWFd]
まあでもそのドキュメントがWSHでやれることの全てだと思われても困るが。

183 名前:名無し~3.EXE mailto:sage [2006/10/23(月) 22:29:02 ID:p8IXQ+tm]
え゛、あのドキュメントが全てだろ。

184 名前:名無し~3.EXE mailto:sage [2006/10/23(月) 22:39:08 ID:Mp53qbOD]
COM があれば可能性はおおよそ無限だ

185 名前:名無し~3.EXE mailto:sage [2006/10/23(月) 23:04:41 ID:BYV9Z446]
COMさえあればモテモテだね!

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

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

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

187 名前:名無し~3.EXE mailto:sage [2006/10/23(月) 23:40:51 ID:j0qOB48K]
3行でかけることをよくもまぁ

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

189 名前:名無し~3.EXE mailto:sage [2006/10/24(火) 00:11:33 ID:P1PufmL8]
内容が無い書き込みを読む方が苦痛ですぅ

190 名前:名無し~3.EXE mailto:sage [2006/10/24(火) 04:22:05 ID:e4iNvxC6]
MSDNとか見難くて見てられんのよね・・



191 名前:名無し~3.EXE mailto:sage [2006/10/30(月) 00:01:11 ID:/XauOmlM]
hozyu

192 名前:名無し~3.EXE mailto:sage [2006/10/31(火) 19:28:20 ID:WW2MnT8D]
WSHクイックリファレンス 第2版
www.amazon.co.jp/gp/product/4873113091

193 名前:名無し~3.EXE mailto:sage [2006/10/31(火) 21:00:56 ID:iFG+tSJz]

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

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


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

195 名前:名無し~3.EXE mailto:sage [2006/11/02(木) 02:30:30 ID:dDmy4YyL]
.vbsのショートカットにドロップしても引数が消えなくする方法
ttp://pc8.2ch.net/test/read.cgi/win/1152544955/341


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

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

198 名前:名無し~3.EXE mailto:sage [2006/11/04(土) 13:43:08 ID:gFg82ib7]
自分で探した方が早そうだね

199 名前:名無し~3.EXE [2006/11/06(月) 04:44:13 ID:6BsyJ6Fg]
>>193 の引用部分は↓から。

www.cmagazine.jp/bookreview/20000302.html

200 名前:名無し~3.EXE [2006/11/08(水) 19:11:29 ID:PcQgSeRB]
うっしゅ



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

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

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

こんな感じです。

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

205 名前:名無し~3.EXE mailto:sage [2006/11/09(木) 23:00:35 ID:/TzE/TZH]
じゃ帰りまつ。

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

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


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

208 名前:名無し~3.EXE mailto:sage [2006/11/10(金) 08:13:38 ID:AYtg+sjS]
>>207
dクス!
まだまだ知らないことばっかりだ(゚∀゚;)

209 名前:名無し~3.EXE mailto:sage [2006/11/11(土) 04:37:38 ID:jLixVM07]
PowerShellって完成遅くね?
もしかしてVistaに入ってない?

210 名前:名無し~3.EXE [2006/11/11(土) 07:33:18 ID: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 [2006/11/11(土) 09:34:07 ID:OPUQTd1+]
桃子って馬鹿っぽい声だな

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

213 名前:名無し~3.EXE mailto:sage [2006/11/11(土) 19:52:55 ID:fv8aBk4Z]
>>203
「とある変数」は冗長。


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

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

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

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

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

219 名前:名無し~3.EXE [2006/11/12(日) 12:41:42 ID: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 mailto:sage [2006/11/12(日) 14:13:34 ID:2A2d5Z9x]
メールを送るだけなら CDO.Message でできる。
詳細はググってください。



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


222 名前:名無し~3.EXE mailto:sage [2006/11/13(月) 23:10:05 ID:qiz2dlwS]
>>219
> WshShell.SendKeys "rootpsaaword~"
> WshShell.SendKeys "exit~"

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

223 名前:名無し~3.EXE [2006/11/14(火) 20:48:44 ID: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 mailto:sage [2006/11/14(火) 20:50:34 ID:eUOyYwez]
あ、ごめんなさい。
エラーの行に WScript をつけて、以下のようにしても同様でした。
var obj = WScript.GetObject("winmgmts:\\" & strComputer & "\root\CIMV2");

225 名前:名無し~3.EXE mailto:sage [2006/11/14(火) 20:53:15 ID:7Tv2z1qt]
JScript の文字列連結演算子は + だが。

226 名前:名無し~3.EXE mailto:sage [2006/11/14(火) 21:43:55 ID:7Vc/ugR3]
\→\\

227 名前:名無し~3.EXE mailto:sage [2006/11/15(水) 05:49:24 ID:eq52+nBC]
PowerShell正式版来たな

228 名前:名無し~3.EXE mailto:sage [2006/11/15(水) 08:49:19 ID:eq52+nBC]
PowerShell 1.0
ttp://support.microsoft.com/?kbid=926140
これおもしろいな。昔Monadスレあった気がしたけど、消えた?

229 名前:223 [2006/11/15(水) 10:11:55 ID: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 mailto:sage [2006/11/15(水) 10:18:39 ID:8Giezelv]
解決しました。

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

はダメで

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

ならOKでした。ムムム。



231 名前:名無し~3.EXE mailto:sage [2006/11/15(水) 23:24:20 ID:F3PSFGj/]
>228
Windows Server 2003 Service Pack 1 および Windows XP Service Pack 2 用ってのがアレだけどな。

232 名前:名無し~3.EXE mailto:sage [2006/11/16(木) 10:54:00 ID:X8pn6xyi]
PowerShell入れてみたけど、気に入ったw。
wsh捨てる決心ついたよ。


233 名前:名無し~3.EXE mailto:sage [2006/11/16(木) 12:14:40 ID:qnfm5A7w]
コマンド入力まで時間かかるんだが、どうにかならんの

234 名前:名無し~3.EXE mailto:sage [2006/11/17(金) 00:37:42 ID:qH260wvA]
Me使いのオレは移行したくとも出来んのだよ。

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

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

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

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

236 名前:名無し~3.EXE mailto:sage [2006/11/17(金) 12:14:12 ID:tuTlaVuD]
explorer切ってこっちをシェルにできんかな

237 名前:名無し~3.EXE mailto:sage [2006/11/18(土) 02:21:35 ID:OLX52wf8]
ご案内

Windows PowerShell (正式版リリース)1.0
pc8.2ch.net/test/read.cgi/win/1163764836/

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

239 名前:名無し~3.EXE mailto:sage [2006/11/18(土) 15:16:39 ID:rOSuiBco]
>>238
Microsoft Data Access SDK 2.8
をダウンロードしたら?

240 名前:名無し~3.EXE mailto:sage [2006/11/18(土) 15:20:25 ID:mdx8HK1h]
>>238
msdn.microsoft.com/library/en-us/ado270/htm/mdobjstream.asp




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

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

243 名前:名無し~3.EXE [2006/11/22(水) 22:36:18 ID:FtHukSom]
>>241
できる

244 名前:名無し~3.EXE mailto:sage [2006/11/22(水) 23:20:06 ID:t8oZlpFH]
>>241
ADO使えばできる
ttp://homepage3.nifty.com/aya_js/wsh/wsh27.htm

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

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

247 名前:名無し~3.EXE mailto:sage [2006/11/25(土) 12:16:26 ID:Z7NXJrJB]
ググれ

248 名前:名無し~3.EXE mailto:sage [2006/11/25(土) 12:41:31 ID:qXN1g3LQ]
  _____
  \  _ _/
   ( *゚∀゚)
   ( 9 ⌒)9゙ ググッ
  "⊂_)∪,,

249 名前:名無し~3.EXE mailto:sage [2006/11/25(土) 23:07:22 ID:OspuG9g+]
>>248

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

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

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






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

252 名前:名無し~3.EXE mailto:sage [2006/11/27(月) 01:06:33 ID:nxeZfR/d]
COMはコムって読んでる
WSHはそのままW・S・H

253 名前:名無し~3.EXE mailto:sage [2006/11/27(月) 01:20:04 ID:YbmUHCoW]
wshはウッシュだなあ
関係ないけど、zshはズッシュ、tcshはティッシュと
呼んでた俺。

254 名前:名無し~3.EXE mailto:sage [2006/11/27(月) 02:33:55 ID: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 mailto:sage [2006/11/27(月) 18:31:52 ID:uqV36mAE]
>>254 W−WSHのアニメはイマイチだったぞ。

256 名前:名無し~3.EXE [2006/11/27(月) 22:04:40 ID:mEhuqTrR]
>>250
やっぱり、難しいですよね。


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

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

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

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

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



261 名前:名無し~3.EXE mailto:sage [2006/11/28(火) 01:25:26 ID: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 mailto:sage [2006/11/28(火) 01:27:02 ID:RRJTB0rw]
&jscriptfunc()
で呼べるんでないの?

263 名前:名無し~3.EXE mailto:sage [2006/11/28(火) 01:33:50 ID:Tv1LYONy]
>>262
それで呼べないんで困ってるんですわ.

264 名前:名無し~3.EXE mailto:sage [2006/11/28(火) 01:34:54 ID:ZRVbZfL6]
method(); でいけるはずだが

265 名前:名無し~3.EXE mailto:sage [2006/11/28(火) 01:44:28 ID:dX4vnSDr]
strconvはもちろんストア昆布だよな

266 名前:257 mailto:sage [2006/11/28(火) 01:57:32 ID: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 mailto:sage [2006/11/28(火) 02:35:59 ID:BAbEyrhQ]
引数があれば呼べるんじゃないかな

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

269 名前:名無し~3.EXE mailto:sage [2006/11/28(火) 02:47:47 ID: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 mailto:sage [2006/11/28(火) 02:49:32 ID:V4pOQQjQ]
>>259
データ管理上、ローカルにデータ放置させたくないのです
小生Win環境詳しくないので、感謝
早速試してみます

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



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

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


272 名前:名無し~3.EXE mailto:sage [2006/11/28(火) 12:16:59 ID:h8kiq/Ct]
>>271
この辺の情報を参考に作ってみたら?

OE dbx file format
ttp://oedbx.aroh.de/

273 名前:名無し~3.EXE mailto:sage [2006/11/28(火) 13:51:02 ID:77idGO9L]
>>271
バックアップならこういうのを使ったほうがいい。
ttp://www.tietew.net/soft/OE2/

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


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


276 名前:名無し~3.EXE mailto:sage [2006/11/28(火) 19:58:54 ID:g8pNCyQB]
>>274
それは知らなかった。thx!

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


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

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


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

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




281 名前:名無し~3.EXE mailto:sage [2006/11/28(火) 22:06:15 ID:g8pNCyQB]
>>279
CDO.Message で検索してみて。

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

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


283 名前:名無し~3.EXE mailto:sage [2006/11/28(火) 22:23:19 ID:HgwQULRQ]
HTAにしてみるとか

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

285 名前:名無し~3.EXE mailto:sage [2006/11/28(火) 22:39:47 ID:mWvA7je0]
>>283-284
HTAというのは知りませんでした。検索したら出ましたが。これですよね。
www.microsoft.com/japan/msdn/workshop/author/hta/overview/htaoverview.asp
調べてみます。ありがとうございました。


286 名前:名無し~3.EXE mailto:sage [2006/11/28(火) 23:15:36 ID:eQt+KJMG]
PowerShellを使うと
>>36
>>206
などが簡単に出来るようになるんでしょうか?


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

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

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

289 名前:名無し~3.EXE mailto:sage [2006/11/29(水) 00:33:36 ID:2/mGVRQo]
>286
↓で訊いてみたら?

Windows PowerShell (正式版リリース)1.0
pc8.2ch.net/test/read.cgi/win/1163764836/

290 名前:名無し~3.EXE [2006/11/29(水) 22:17:21 ID:1dkZEY39]
>>272
>>273
ありがとうございます。

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

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

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




291 名前:名無し~3.EXE mailto:sage [2006/11/29(水) 22:41:40 ID:DKiaM1yK]
自力でプログラム書く気がないなら、このスレ向きじゃないよ。

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

293 名前:名無し~3.EXE mailto:sage [2006/11/30(木) 01:40:47 ID:f/8+PZe+]
>>292
cscript //H:CScript

294 名前:名無し~3.EXE mailto:sage [2006/11/30(木) 02:14:43 ID: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 mailto:sage [2006/11/30(木) 02:42:53 ID:v82cYZy4]
>>292
vbcという拡張子をcscriptに関連付けて、cscriptで実行したいものはvbcで作る方法がオススメ。

>>294のようにwsfでやるならjob分けした方が良い。または引数が無ければ
ttp://winscript.s41.xrea.com/wiki/index.php?%5B%5B%A5%C6%A5%AF%A5%CB%A5%C3%A5%AF%5D%5D#content_1_4
でもいける。ぶっちゃけ>>294はこれの引数対応版なだけの話だし。

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

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

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

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


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


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

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



301 名前:名無し~3.EXE mailto:sage [2006/12/07(木) 15:43:36 ID:EC5LjnO7]
>>282
こういうときは、WSHからIEを起こして操作するのが簡単。

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

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

304 名前:名無し~3.EXE mailto:sage [2006/12/09(土) 19:49:26 ID:0qa9SSE3]
>302
で、それを知って何をやりたいんだ?

305 名前:名無し~3.EXE mailto:sage [2006/12/10(日) 00:08:13 ID:UaBqXVVZ]
>>296
それより、RunWithArgs.CMDを関連付けると、便利だわい。


306 名前:名無し~3.EXE [2006/12/11(月) 22:02:52 ID:YncVWVUZ]
age

307 名前:名無し~3.EXE mailto:sage [2006/12/13(水) 14:27:42 ID:/++eaESB]
WSHでDDE使う方法ないかな?

308 名前:名無し~3.EXE mailto:sage [2006/12/13(水) 15:44:43 ID:npJjnYln]
>>307
DDE使えるCOMを探すか作る。

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

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

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

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

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

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



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

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

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

312 名前:名無し~3.EXE [2006/12/13(水) 22:14:37 ID:hw3Bn7Em]
IEから右クリックで動作させるスクリプトなんですが、
その右クリックされた場所にある画像のURL(リンクではなくIMGタグ)
を取得するにはどうすればいいでしょうか?

313 名前:名無し~3.EXE mailto:sage [2006/12/13(水) 22:49:12 ID:qNFDZs3m]
external.menuArguments.document.elementFromPoint(external.menuArguments.event.clientX, external.menuArguments.event.clientY).href
らしい。Irvine のスクリプトによると。

314 名前:312 mailto:sage [2006/12/14(木) 00:28:11 ID:7FtNx5qL]
>>313
ありがとうございます

315 名前:名無し~3.EXE [2006/12/14(木) 00:29:42 ID:DjAdsCMN]
InternetExplorer.Applicationとかの情報ってWSHのリファレンスに
のってないけど、どっから情報獲ってくるんだ?

316 名前:名無し~3.EXE mailto:sage [2006/12/14(木) 00:42:56 ID:WjQ1wjr4]
IE オブジェクトなら MSDN にいくらでもあるっしょ

317 名前:名無し~3.EXE mailto:sage [2006/12/14(木) 01:39:10 ID:XilSwh1W]
>>315
つ OLEView.exe


318 名前:名無し~3.EXE mailto:sage [2006/12/17(日) 09:32:44 ID:A0dC8xU5]
以下のようにした場合、メッセージボックス(?)が表示される前に
コマンドプロンプト・ウインドウが表示されるのですが、結果の
メッセージだけを表示させるにはどうすれば… ?

Set objWshShell = WScript.CreateObject("WScript.Shell")
Set objExecCmd = objWshShell.Exec("ruby\bin\ruby -Ks search.rb")
WScript.Echo "検索結果:" & objExecCmd.StdOut.ReadAll


319 名前:名無し~3.EXE mailto:sage [2006/12/17(日) 11:44:36 ID:H95I1sD8]
rubyw.exe

320 名前:名無し~3.EXE mailto:sage [2006/12/17(日) 14:04:16 ID:A0dC8xU5]
>>319 ギガddd!



321 名前:スレッドを超えたコテハン mailto:sage [2006/12/17(日) 15:02:58 ID:EP+mDiGm]
WSCの場合は、プロパティで定数を公開して、wsc.nameで定数を参照したほうが、
衝突の心配がないし、WSFだけでなく、VBSやJSでも使えてよさそうですが、
もし、nameだけで、参照したいときは、WSC側でreferenceメソッド作って、
function reference(Me){
Me['xxx']=111;
Me['yyy']=222;
}
VBS側で
wsc.reference me
WScript.Echo xxx
JS側で
wsc.reference(this);
WScript.Echo(xxx);
とすれば、WSFだけでなく、VBSやJSからも使えます。

322 名前:名無し~3.EXE mailto:sage [2006/12/18(月) 14:59:23 ID:P40MScLH]
WSHでIEオブジェクトを作成してそれのProcessIDを取得する方法を教えて欲しいのですが。

今は下記の手順でブラウザにキー送信をしていますが、「タイトルの文字列」が変更した場合には通用しません。
なので、ProcessID指定で確実にSendKeysをしたいのです。
InternetExplorer.Application + ProcessIDでぐぐっても見つけられませんでした。
よろしくお願いします。

Set IE = WScript.CreateObject("InternetExplorer.Application","IE_")
Set sShell = WScript.CreateObject("WScript.Shell")
sShell.AppActivate("ブラウザのwebページのタイトル文字列")
sShell.SendKeys "ほげほげ"

参考にしたページ
ttp://www.atmarkit.co.jp/fwin2k/operation/wsh05/wsh05_04.html
> 一方のプロセスIDは、Execを使って起動したプログラムでは、WshScriptExecオブジェクトのProcessIDプロパティから取得できる。



323 名前:名無し~3.EXE mailto:sage [2006/12/19(火) 21:38:05 ID:4I7Im65l]
マルチするならせめて一言断り入れとけよ。あとリンク。

つか IE オブジェクト使うなら大凡の操作は可能だと思うのだが。わざわざ SendKeys 使わんでも。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<105KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef