1 名前:デフォルトの名無しさん [2008/04/23(水) 20:00:50 ] ( ´ゝ`) 誰か詳しい情報キボンヌ ●過去スレ WSH(・∀・)スレッド! pc11.2ch.net/test/read.cgi/tech/1055075469/ WSH(・∀・)スレッド! Part 2 pc11.2ch.net/test/read.cgi/tech/1176698934/ ●関連スレ お前ら、wsh使ってますか? Part7 pc11.2ch.net/test/read.cgi/win/1190548945/ HTAをもっと流行らせる計画 pc11.2ch.net/test/read.cgi/tech/1124559962/ ★WSHでCGI★JScriptVBScript pc11.2ch.net/test/read.cgi/php/1059745064/ ●公式サイト Windows Script www.microsoft.com/japan/msdn/scripting/ ●個人サイト Windows Scripting Host homepage3.nifty.com/aya_js/wsh/index.htm Windows Scripting Host Laboratory www.roy.hi-ho.ne.jp/mutaguchi/wsh/ Windows Script Wiki winscript.s41.xrea.com/wiki/index.php
116 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 13:04:13 ] いまでもtry-catchつかえないよ
117 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 15:50:29 ] .NETなら使える
118 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 17:37:06 ] >>117 で?ややこしくならないようにまとめてくれ。
119 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 21:20:46 ] まとめるとJScriptを使えばよい
120 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 21:27:22 ] 超シンプルなデータベースを作りたいと思っています フォルダ内に100のテキストがあったとして その中に a="赤" とか a="白"と書いてあり それを読み取り 最終的に割合を出すようにしたいのですが いいサンプルなどないでしょうか?
121 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 22:05:46 ] var fso = new ActiveXObject("Scripting.FileSystemObject"); var Shukei = {}; var Sum = 0; // カレントフォルダの全ての *.txt ファイルの1行目を読み,Shukeiに集計する var f = fso.GetFolder("."); for (var fc = new Enumerator(f.Files); !fc.atEnd(); fc.moveNext()) { var file = fc.item(); if (/\.txt$/.test(file.Name)) { var stream = file.OpenAsTextStream(); var s = stream.ReadLine(); stream.Close(); eval(s); if (a in Shukei) Shukei[a]++; else Shukei[a] = 1; Sum++; } } // 結果表示 for (var i in Shukei) WScript.Echo(i + ": " + (100 * Shukei[i] / Sum) + "%");
122 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 22:16:21 ] サンプルまで作ってもらってありがとうございます 行:1、文字:28、コード:800A0401、ソース:Micosoft VBScriptコンパイルエラー これがでて試せないんですが何が問題なんでしょうか?
123 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 22:25:59 ] >>122 拡張子は .js です
124 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 22:30:24 ] ありがとうございます vbsだけじゃなくて jsもつかえるんですね
125 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 22:32:25 ] JScriptだから
126 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 23:56:31 ] >>113 On Error Goto ErrLabel エラー ErrLabel: msgbox "キャッチ" これをやってみたけど、ダメだった。VBAならできた。
127 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 15:32:51 ] helpよめ
128 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 13:00:54 ] パスワード入力の時どうしてる?
129 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 17:15:30 ] バッチとか、シェルとかPHPしか経験無いんですが、 Wshってマスターするのに、どのくらいの時間が掛かりますか?
130 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 17:29:40 ] マスターってなんだよ と、突っ込まざるを得ない
131 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 17:43:18 ] プログラミング言語をマスターしようといっている時点で終わってる。
132 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 17:47:23 ] ライブラリの仕様とか、用意されてるものとか、その開発環境で実現できることが さっと頭に浮かぶほうが、「マスターした」に近いよね。
133 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 17:49:39 ] しかも聞いてるのが時間って・・・
134 名前:129 mailto:sage [2008/07/13(日) 19:33:27 ] >>132 そういうことですね。 ある程度バッチで出来ちゃうから なかなかwshやろうと思わないんだよね
135 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 19:59:02 ] まぁ、WSHはCOM使うのが得意で、VBかJSで書きますってだけで、 そのCOMと同じ機能を持ったCLIプログラムが最初から用意されて、 それに精通しているなら、それらを組み合わせてバッチでやろうと思うよね。 でもWSHのほうが、多少細かいハンドルできるから、覚えたいという気持ちはわかる。 ちょっとしたファイルの入出力とか、シェル周り、FileSystemObject周りは便利。
136 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 20:36:51 ] シェル周り便利なの?
137 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 20:48:06 ] >>136 FSOで一通りのファイル操作はできるし、それ以外はShell.Runとかでいいからという発想での話。
138 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 20:51:41 ] コマンドプロンプトが一瞬表示されてしまうと嫌がられる
139 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 20:57:08 ] >>138 runの第二引数に0じゃだめだっけ?
140 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 09:18:44 ] >>135 VB≠VBS
141 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 09:33:15 ] >>140 どゆこと?
142 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 21:05:26 ] >>141 VBSはVBライクで、VBとは違うって言いたいだけなのかな?
143 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 22:35:20 ] WSH スレに VB はいらんでしょ ってことじゃないかな。 まあ、>>135 の勘違いか typo なんだろうけど、ちいせい奴としか思えない >>140
144 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 22:54:40 ] >>128 htmlでフォームを作って、パスワード入力欄に入力してもらう。 Enterを押したら、submitボタンが反応して、ページを読み込もうとするから、それを検出して・・・ って、もっといい方法があると思う >>138 表示されないようにコマンドから返ってくる文字列を取得する 妙に複雑なコードを見たことがあるな
145 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 23:24:12 ] >>138 タスク WScript.exe //E:JScript hoge.CMD hoge.CMD @if(0==0)WScript.Quit(new ActiveXObject('WScript.Shell').Run('"'+WScript.ScriptFullName+'"',0,true));@else REM バッチファイルだよーん :@end
146 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 23:31:47 ] >>128 Hey, Scripting Guy! www.microsoft.com/japan/technet/scriptcenter/resources/qanda/feb05/hey0204.mspx
147 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 17:30:06 ] VBScriptを書く時、みなさんは、どんなエディターを 使っていますか?
148 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 21:20:28 ] Excel
149 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 21:45:51 ] 男は黙ってメモ帳。
150 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 21:53:42 ] 男じゃない場合↓
151 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 22:04:04 ] Microsoft Visual Web Developer 2008 Express Edition
152 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 22:11:39 ] サクラ
153 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 01:35:27 ] コントロールパネルの「コンポーネントの追加と削除」一覧と インストールの状態の有無を出力したいと考えているのですが WSHやWMIで可能でしょうか?
154 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 13:07:01 ] まぁ、レジストリ管理されてるものっぽいし、 レジストリ操作か、WMIでかのうじゃないの?
155 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 17:06:08 ] でもまあ、具体的なやり方は自分で調べろってことで
156 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 17:57:35 ] www.microsoft.com/japan/technet/scriptcenter/scripts/apps/user/usapvb07.mspx
157 名前:マイク ◆yrBrqfF1Ew mailto:sage [2008/07/19(土) 07:10:06 ] >>147 ずっとterapadを使ってる。 テキストファイルはほとんどterapadとxyzzyとnotepadで開いてる。
158 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 01:06:42 ] フォーカスされたチェックボックスをオンに する方法がありますか? お願いします。 obj.SendKeys " " 上記でスペースを押せば、オンオフが切り替わります。 しかし、切り替えたいのでなくて、オンにしたいのです。
159 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 02:57:56 ] どんな状況で、何をやっているのか想像つかね。
160 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 14:27:59 ] obj.SendKeys "On"
161 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 17:58:33 ] >>160 つまらん。
162 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 01:56:06 ] シリアルポートに文字出力して、その応答を受け取るにはどうすれば 出力だけならCreateTextFile → WriteLineでできたっぽいですが、ReadLineすると怒られます
163 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 23:30:55 ] >>162 できたって、え?
164 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 05:08:00 ] 指定位置、指定サイズ、指定表示状態(アイコン、詳細表示など)でフォルダウィンドウ(エクスプローラー)を起動できちゃったりしますか?
165 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 08:44:21 ] 出来ちゃいますよ アレ使えば
166 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 15:17:40 ] Shell.Explorer System.Object など、使い道が無さそうなProgIDがレジストリにいっぱいあるのはなぜ?
167 名前:デフォルトの名無しさん [2008/07/24(木) 18:35:25 BE:555198645-2BP(802)] >>165 ヤダァ♪ もう、えっちぃ♥
168 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 23:48:00 ] COmってリファレンスないもの、多いよな
169 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 00:08:03 ] アレってなあに?
170 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 00:12:34 ] >>166 System.Objectは.NET Frameworkのもの。 確かにWSH (COM)ではこれだけあっても役立つとは思えないけど。
171 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 16:23:19 ] set x=createobject("explorer.application") x.top=100 x.left=100 x.visible=true だろ
172 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 22:07:11 ] 実行したら ActiveXコンポーネントはオブジェクトを作成できません:'explorer.application' って出た
173 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 00:24:26 ] C08AFD90-F2A1-11D1-8455-00A0C91F3880 にprogidを登録しろ
174 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 00:27:13 ] internetをつけてみろ
175 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 00:32:51 ] それだとIEになるぞなもし
176 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 15:29:30 ] レジストリに C08AFD90-F2A1-11D1-8455-00A0C91F3880 がないのに、使えるのはなぜ?
177 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 17:16:08 ] なぜWSHでwindowsを終了させられないのですか?
178 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 21:00:13 ] WSHスクリプトを起動するより、電源ボタンを押すほうが簡単だからかも?
179 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 21:05:03 ] >>177 出来るけど、なにか?
180 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 23:21:04 ] WMI使ってできるよねぇ。
181 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 23:50:19 ] WScript.Echo("電源ボタンを押してください");
182 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 19:35:52 ] createobject("shell.application").shutdown
183 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 10:37:00 ] フォームの自動入力させているんだけど、 IEじゃなくて、IEコンポーネントつかったブラウザとかソフトに入力する方法って無いですかね。
184 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 11:17:45 ] ありますよ。 因みに「どうやるの?」とか「具体的なやり方は?」とか、ネチっこく聞いてこないでで。 ただでさえ暑いんだから。
185 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 11:24:00 ] ヒントだけでも教えてもらえないでしょうか?
186 名前:デフォルトの名無しさん [2008/08/01(金) 20:42:35 BE:333119243-2BP(802)] >>184 キサマは湘南海岸でプログラミングしてるのかと、小1時間…
187 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 21:28:43 ] set o2 = createobject("vb2ch.clsThread") o2.sage
188 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 22:03:23 ] if nothing is nothing then msgbox (nothing is nothing)
189 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 23:03:27 ] >>183 EnumWindowsしてWindowの中にInternet_Explorer_Serverクラスがあるか探せばいいと思う
190 名前:デフォルトの名無しさん [2008/08/03(日) 03:14:00 ]
191 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 03:39:35 ] For Each ObjFile in CreateObject("Scripting.FileSystemObject").getFolder(CreateObject("Wscript.Shell").CurrentDirectory).Files ObjFile.name = "new" & ObjFile.name msgbox ObjFile.name Next フォルダに2つのファイルがあり、上記を実行します。 Forで2ループしてほしいのですが、4ループします。 なぜですか?
192 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 03:55:42 ] ループの中でリネームするから
193 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 08:07:09 ] >>191 普通に2回しか回らないぞ (@Windows2000SP4)
194 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 14:43:26 ] a ->newa b ->newb newa -> newnewa newb -> newnewb
195 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 16:47:09 ] それが起るなら、無限ループになりそうなもんだが。
196 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 22:38:20 ] 隠しファイルが2つあるとか
197 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 23:19:39 ] ファイル名によるんじゃないの? ファイルのコレクションを得る時内部でどういったソートしてんのか知らんけど。 リネーム後のファイルが、処理済ファイルと未処理ファイルのどちらに振り分けられるかの違い。 経験則でいうと、ファイルコレクションに対してリネーム処理をするといったような場合は 一旦全ファイル名の配列を得るとかして、 その配列に対して、即ち明示的にファイル名を指定してループ処理しなければおかしくなる。 for ... in でコレクションからひとつひとつファイルを取り出しつつリネームしていく、 といったオンザフライな処理では恐らく望んだ結果は得られない。 リネームすることで大元のコレクションの内容がリアルタイムで変わっちゃう感じ。 泥臭いけど俺はいつもこうしてる。 var f1 = objFSO.GetFolder(folderspec); var f2 = new Enumerator(f1.Files); var arr = new Array(); for (; !f2.atEnd(); f2.moveNext()) arr.push(f2.item().Name); var f, i; for (i = 0; i < arr.length; i++) { f = objFSO.GetFile(objFSO.BuildPath(folderspec, arr[i])); f.Name = "new" + f.Name; }
198 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 05:15:53 ] 自分もそこでよく悩んだな ループ中でリネームするとリネーム後のファイルがFilesコレクションに追加されてそのファイルも処理対象になっちゃうんだよな そして延々と"new"が付加されていく それ理解するのに時間かかった
199 名前:191 mailto:sage [2008/08/04(月) 05:24:31 ] >>192 たしかにリネームしなければ正常です。 >>193-195 回る数は2,3,4と不定ですが、無限はないです。 >>196 隠しファイルはないです。 >>197 >コレクションの内容がリアルタイムで変わっちゃう感じ 特にこの一言でイメージできて分った気がします。 なので頑張ったのですが、どうしてもコードが読めません。 >>197 をVBScriptにしてくれないでしょうか?
200 名前:デフォルトの名無しさん [2008/08/04(月) 05:47:12 ] ええええ!?
201 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 07:07:03 ] うちも普通に2回しか回らないよ、XP SP3
202 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 08:10:08 ] >>199 コード読めなくても、その上で文章説明してるんだから その通りにVBSで書けば良いだけだろ ここはPC初心者板ではなくプログラム技術板なので ここに来る以上、そのくらいは自分でやれなくちゃね
203 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 11:03:45 ] 「PC初心者板」という言葉を持ち出してくる奴は この板で有名な基地外の特徴なので 構わなくていいですよ。
204 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 11:04:03 ] 普通に2回しか回らないね。(XP SP3) 2回以上回ってる人はどんな環境でやってるの?
205 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 11:11:10 ] プログラミングに関しては全く初心者なんで、変なこと言ってるかも知れないけど For Each ObjFile in CreateObject("Scripting.FileSystemObject").getFolder(CreateObject("Wscript.Shell").CurrentDirectory).Files これって毎回オブジェクト作ってるわけじゃなくて、最初の1回作ったときに コレクションは出揃ってメモリに書き込まれるというわけじゃないの? 2回以上回る時は内容にアクセスするたびにオブジェクトを作り直してるわけ?
206 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 15:00:36 ] For Each ObjFile in CreateObject("Scripting.FileSystemObject").getFolder(CreateObject("Wscript.Shell").CurrentDirectory).Files If Left(ObjFile.name,3)<>"new" Then ObjFile.name = "new" & ObjFile.name msgbox ObjFile.name Next で、どう?
207 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 15:03:32 ] For Each ObjFile in CreateObject("Scripting.FileSystemObject").getFolder(".").Files
208 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 15:12:10 ] >2回以上回る時は内容にアクセスするたびにオブジェクトを作り直してるわけ? 作り「直して」るわけ、ではなかろう
209 名前:199 mailto:sage [2008/08/04(月) 16:48:49 ] >>202 の言う通りですね。 >>199 レスでのコード依頼は、躊躇しながらも書いてしまったのですが、 やはり場違いなので取り消します。 さまざまなレスありがとうございます。
210 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 18:34:22 ] 環境書いておくれよ
211 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 21:27:00 ] XPSP2/WSH5.7 上の簡単なリネームで試してみたら2回だったけど ちょっと前に書いた自分のごちゃごちゃしたリネームのスクリプトだと なんかリネームしたのが追加された覚えがあるな… 特定のメソッドを使ったりとかでコレクションへの追加が発動するんかな そのスクリプトもどこかいったから確かめようがないな、ごめんよ
212 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 22:21:43 ] For Each ObjFile in Folder.Files ObjFile.name = "new" & ObjFile.name msgbox Folder.Files.Count Next してみ
213 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 22:42:35 ] VBscriptでApplication型のオブジェクトの宣言ってもしかして出来ない?
214 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 23:01:07 ] >>212 普通に2が2回表示されたよ XP SP3
215 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 23:10:30 ] >>191 Set Files = CreateObject("Scripting.FileSystemObject").getFolder(CreateObject("Wscript.Shell").CurrentDirectory).Files For Each File In Files File.Name = "new" & File.Name For Each File1 In Files WScript.Echo File1.Name Next Next ってやると、Files の内容はリアルタイムに変わってる。 でも、外側のループは正常に2回しか回らない。 ファイルをコピーするようにすると、Files はちゃんと増えるけど、 それでも外側のループは最初にあったファイルしか対象にしない。 なので、For Each の In に続く部分は一回しか評価してないみたい。 じゃあと言うことで、ループ中にファイルを削除すると今度は削除 した奴はそ知らぬ顔でスキップする。 う〜む、どうやっても >>191 の4ループは再現しない。 とりあえず、環境と再現した時のファイル名を書いてくれないか。 >>213 VBScript ではそもそも型付の宣言なんかできません。
216 名前:デフォルトの名無しさん [2008/08/04(月) 23:14:33 ] >>213 createobject("Excel.Application") createobject("Word.Application") createobject("Autocad.Application")