1 :
名無し~3.EXE :
2006/08/08(火) 21:41:13 ID:hqaA5ks/
2 :
名無し~3.EXE :2006/08/08(火) 21:42:04 ID:hqaA5ks/
3 :
名無し~3.EXE :2006/08/08(火) 21:42:58 ID:hqaA5ks/
4 :
名無し~3.EXE :2006/08/08(火) 21:43:41 ID:hqaA5ks/
5 :
名無し~3.EXE :2006/08/08(火) 21:44:21 ID:hqaA5ks/
テンプレ終わり。なかったので立てました。 リンク切れ修正したり、簡潔にしたり、書籍をAmazonでまとめたり、色々追加したりしてみました。 まずかったらごめんなさい。
おつりんこ
そろそろ、大学入試に採用して欲しいものだ。
11 :
11 :2006/08/10(木) 02:20:10 ID:/7XeLnYy
こっそり。 連載って大変です・・・
13 :
名無し~3.EXE :2006/08/13(日) 11:50:50 ID:41wVJTOD
ファイルをD&Dすれば、その配下に「2006年08月」の年月フォルダを作って 振り分けてくれるスクリプトはどこかにないですか?
見当たらないものを作るのがこのスレ。とにかく書いてみろよ。
簡単っぽいね
現在の年・月取得
→「y年m月」というフォルダがないなら作る
→引数のファイルをそのフォルダにコピーor移動
>>14 がんばれ
本当にスクリプトで画面の解像度を変更できませんか
>>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の新規タブを使うように変更したいんです。
あと、CreateObject("InternetExplorer.Application") みたいな感覚で、 FireFoxって扱えないのでしょうか? どっかに資料があったら教えてください。
前まで使っていたHTAがある日突然文字化けして使えなくなってしまいました。 拡張子をHTMLにすると文字化けも解消し、動作します なんとか元通りHTAのまま動作するようにしたいのですが、なにが原因なんでしょうか ちなみに他のHTAは文字化けしませんでした
バッチファイルの結果って、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"
>>26 Run じゃなくて Exec を使う。
WshShell.Exec の返り値として WshScriptExec のオブジェクトが返ってくるから
その StdOut を読めばいいよ。
28 :
26 :2006/08/26(土) 11:18:57 ID:7AZj00I6
>>27 サンクス! 全然考えてなかったやりかたでした。
試しました・・・ら、かんじんの FTP 処理がコマンドプロンプト上で
入力できないんですね・・・。
WSH から標準入力としてコマンドを送りつければよいのでしょうが、
FTP を自由に使いたいのでそういうわけにも行かず・・・。
うーむ・・・。
標準入力だけは WSH を経由しないようにできないものか・・・。
29 :
26 :2006/08/26(土) 11:31:17 ID:7AZj00I6
あ、標準入力っていうか、普通にコマンドプロンプト上で操作できて、 その後で Exec の結果を取得できなくちゃいけないのか。 ・・・できそうにないな・・・。
出来ることをできそうにないとか言って諦めきれるならやらなきゃいいさ。 諦めきれないなら調べるなり試行錯誤するなりすればいいさ。 それが出来ないと本当に困るという状況で必死になってるなら自分で解決まで 這い蹲ってでも辿り着くだろうし、解決できないなら出来なくてもたいして困らないから 必死になりきれてないだけ。本人が別に解決しなくてもいいや程度に考えてるなら 俺等が手を掛けることでもないし、これ以上教えることは何も無さそうだな。
31 :
26 :2006/08/26(土) 12:23:05 ID:7AZj00I6
いや、まだやってますけど・・・。
HTAって、背景透過できない?
このスレ的な回答なら COM を作ればできる かな。
難しいそうでつね。
35 :
19 :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 :2006/08/29(火) 01:28:54 ID:o0XsAnyT
Alt + Space を SendInput する .exe を作って wsh から呼び出すことにして解決しましたです。
フォルダAにあるファイル全てと(サブフォルダ内のファイルを含む) フォルダBにあるファイル全てを(サブフォルダ内のファイルを含む)比較して 同じファイル名のものがあれば、フォルダAのファイルをフォルダBのファイルに 上書きしたいのですが、どのような繰り返し処理を行えばいいのかわかりません。 初歩的な質問で申し訳ないのですが、どなたか参考になるご意見を聞かせて下さい。
まずFileSystemObjectを使ってフォルダAにあるファイル全てを列挙して 配列(または連想配列)に入れておく。 あとはフォルダBのファイルを1つずつ調べていき、配列に同じ名前があれば フォルダAのファイルを上書きコピーすればいいんじゃない? 列挙→GetFolder + Files 辺り 上書きコピー→CopyFile もしくは GetFile + Copy 辺り
39 :
37 :2006/09/03(日) 23:36:27 ID:9m7JaXWT
>>38 レスありがとうございます。
参考書片手に四苦八苦していたところに
ヒントを頂けて大変助かります。
早速試してみますね。
念のため言っとくと、GetFolder + Filesの列挙処理は、再帰的にな。 下層フォルダもぜんぶ処理対象にするためには。 もしわかんなきゃ「再帰」をキーワードに入れてぐぐること。
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です。 どうすればうまく動くようになりますか? 教えてエライ人!
WShell.Exec("cmd /c echo y | net share airplane /DELETE"); あーあ、なんだよこの旧世代プログラマがやりそうな力技は こんなことを考えついて試してしまう自分が嫌だ
むしろ当然の解決策だと思った
stdinを読んでるわけでないようだから
>>42 もうまくいかない
46 :
41 :2006/09/06(水) 11:01:06 ID:B7U19HoE
>>42 ,43,44,45
レスありがとうございます。
wktkしながら試しましたが私の環境ではダメでした... (´・ω・`)
なんでだろうな...
>>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 :2006/09/07(木) 00:02:48 ID:7NNz2Yc3
しまった。プロセス操作のヤツからコピペしたから変数名が変だ。
>>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 これじゃエラー出るんだけど何故?この場合ってワイルドカード使えない?
_, ,_ パーン ( ‘д‘) ⊂彡☆))Д´)
*はランダムではない。 任意の文字列という意味。 Runの引数にワイルドカードなんて認められてない……はず。 ランダムで実行したかったら すべてのファイルパスを配列にぶちこむ ↓ Rndとかでファイル数以下のランダムな整数作る ↓ それをインデックスにしてファイル実行する
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で無限ループ
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などを教えて頂けない でしょうか?
>>54 は
× files.length
○ mp3.length
です
57 :
51 :2006/09/12(火) 23:16:11 ID:rMXBUJr8
>>53 >>54 サンクス。動作は確認できたが、出来ればWSHで書いて欲しかった。javascriptはウヴォア
WSH は VBScript だけのもんじゃないよ?
JavaScriptもPerlもRubyもPythonも。
あーそうなのかー 無知ですまぬ
>>55 > おそらく、Image1の指定方法に問題があるかと思うのですが、
問題ないよ。試しにその前で
MsgBox TypeName(objExcelSheet.Image1)
ってやってみな。これで「Image」が返るなら、正しくImageオブジェクトを参照出来てる。
問題があると言えば、objExcel.Quitの前にobjExcelBook.Closeが必要なのと
Set objExcelSheet = Nothingの、Nothingのスペルが間違ってることくらいだが
エラーが出ている部分は問題なし。おそらく間違ってるのではなく、仕様として出来ないんだろうね。
Picture = LoadPictureをブックのVBAモジュールに書いて、VBSからそのプロシージャを読んでみれば?
画像のパスはVBS側で指定することも可能だし。
62 :
55 :2006/09/13(水) 11:01:41 ID:P4go6OWL
>>61 御回答ありがとうございます。
> MsgBox TypeName(objExcelSheet.Image1)
> ってやってみな。
こうすれば、オブジェクトの確認が出来るんですね。
やってみた所、「Image」と表示され、参照方法には問題が無かった様です。
> 問題があると言えば、objExcel.Quitの前にobjExcelBook.Closeが必要なのと
> Set objExcelSheet = Nothingの、Nothingのスペルが間違ってることくらいだが
そこに行く前に、エラーで止まっていたので気付きませんでした。
> おそらく間違ってるのではなく、仕様として出来ないんだろうね。
御指摘の方法等を含め、別の方法を検討してみます。
63 :
55 :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の実行方法が分からなかったのですが、
http://suiten.wig.nu/index.php?itemid=289 が参考になりました。
今回は、ありがとうございました。
64 :
名無し~3.EXE :2006/09/14(木) 23:27:15 ID:XRemmWNN
VBScriptから別のVBScriptを呼び出すことはできますか? あとユーザライブラリの関数を呼び出す的なことをしたいのですができますか? 一度作った関数をコピペするのが面倒で。 よろしくお願いします。
ファイル読み込んで Eval 後者は意味が良く分からんが ユーザライブラリって何?
外部のスクリプトを読み込みたいんでしょ wshなら素直に.wsfファイル作って、 <package> <job> <script language="VBScript" src="外部スクリプト1.vbs" /> <script language="VBScript" src="外部スクリプト2.vbs" /> <script language="VBScript" src="メイン.vbs" /> </job> </package>
あとついでに、ライブラリはクラス化すると吉。 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"
で出来ました。いろんなやり方があるようですね。
ライブラリはクラス化して中にメソッド書けばいいのですかね?
いや、皆さん作られた関数をどうやって再利用されているのかと思いまして。
コピペさ
wsh で使うようなのは書き捨てが基本だな、私は。 String とか Date とか Number とかの prototype にいくつかメソッドは突っ込んでるけど(JScript)。
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の値などもいいかげんで、その辺も含めて添削していただいたらありがたいです。
プリントアウトは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で使えるようにはできない」という回答でした。
多分私の環境では、このスクリプトは使えないと思います。
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() も入力があるまで待つので使えません。 良い解決策はないでしょうか?
>>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();
まぁ、
>>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 :2006/09/17(日) 17:30:31 ID:8OXBNlvH
>>78-79 様ありがとうございます。
最終的には hta でつかおうと思ってるんですが
StdOut.ReadLine(), Read(),ReadAll() を使うと出力待ちの間、どうしても画面がフリーズしちゃうんです。
出力がない時は StdOut.AtEndOfStream が true になってくれればいいのですが・・・
あんまりファイルに書き出したくないのですが、やっぱそうするしかないでしょうか。
>>80 while (!exe.StdOut.AtEndOfStream){
str += exe.StdOut.ReadLine() + "\n";
// ココで必要な処理
}
じゃ、ダメなの?
82 :
77 :2006/09/17(日) 18:24:19 ID:8OXBNlvH
>>81 そこで Sleep() や setTimuout() しちゃうと 時間がかかりすぎるし
どっちにしても ReadLine() のところで止まっちゃうので・・・
あ、すいません。実際には dir だけじゃなくて時間のかかるコマンドも使いたいと思ってます。
>>82 なるほど〜。
やっぱり、ファイルに書き出すのがいいと思うよ。
85 :
77 :2006/09/17(日) 20:06:55 ID:8OXBNlvH
ファイル使うことにします。わがまま言ってすみません。
しかし
>>83 すごいですね。
これだけ苦労されてるということはやっぱ簡単な方法はないということですね。
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での再帰呼び出しが。 間違いや他のやり方があったら指摘してください。 一応自分で動作チェックした限りは正常に動いているみたいです。
attrib /s -r *.*
attrib -r %1 /s /d
92 :
89 :2006/09/18(月) 22:13:54 ID:TkVYNr1Z
>>90 >>91 試してみたのですが、うまくいきません。
win98ではできないんじゃないでしょうか
cygwinでchmod -R +w でできないかな?
>>92 できる。コマンドプロンプト開いて attrib /? してみ。
95 :
名無し~3.EXE :2006/09/19(火) 03:26:44 ID:X9V4Hq4y
>>93 UnxUtils の chmod でできました。
cygwin は、昔入れて日本語化するだけで一週間ぐらいかかっていたような気がするので
とりあえずパス
>>92 は、今から試します
システムついてると一緒に指定しないと外せなかったりとか 変な規制がついてるよね。あととりぶ
97 :
名無し~3.EXE :2006/09/19(火) 03:39:25 ID:X9V4Hq4y
>>94 attrib /? を行うとフォルダも受け付けるようなニュアンスなんですが、
実際に試してみるとファイルは受け取るけど、フォルダはだめみたいなんですが?
98 :
77 :2006/09/19(火) 12:50:31 ID:PvS6FX5U
>>86 どうもです。
すれ違い気味(htaねた)でわるいけど、
Exec() の代わりに Run()を使ったら実行中でもhtmlがフリーズしないことがわかった。
これってJavaScriptでマルチスレッドみたいな動作だけど、普通に使ってても大丈夫なのかな?
98の頃のバッチファイルを見つけた。 ffind . -attr dh | xargs attrib -h ATTRIBでディレクトリを操作するときは1個ずつでないと駄目なようだ。 ffindもxargsも外部ツールなので、OS標準コマンドだけでは一括は無理だったのかも。
ネット株取引でEトレを使っていますが wsh で自作した便利なツールがあれば、ただで暗号化しないでクレ。
見積もりは無料ですよ?
作ってもらうほどではないので退散します。
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はいろいろ動かすのね 誰かまかせた
>>103 "VBSDir"みたいなユーザー環境変数を作って、
(システムのプロパティ→詳細設定タブ→環境変数(XPの場合))
var WshShell = WScript.CreateObject ("WScript.Shell");
with( WshShell ){
CurrentDirectory = ExpandEnvironmentStrings("%VBSDir%");
}
とか?
// VBSの話なのにJScriptだけど気にしないでw
>>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でも構いませんが。
ということで、ご回答には感謝しますが解決には至っておりませんので引き続き宜しくお願いします。
ディレクトリさえ分かったならあとはファイル読み込んで Eval で評価すれば良いじゃん?
wscの中に <script language="VBScript" src="パス"/> を並べて、 wsfからは、 wsc.メソッド名 で呼び出せ。 という意味だったけど通じなかった? getobject("script:wscのフルパス")ならレジストリは不要だけど、これはどっちでも。
>109 ここで究極の選択。スクリプトで wsf ファイルを書いて実行。
すいません。知ってたら教えて頂きたいんですが WScript.CreateObject(strProgID[,strPrefix]) などで作成したオブジェクトのプロパティやメソッドを調べる方法ご存知の方いますか?
>>111 wscの<script>にsrc属性が使えるなんて初耳だけどできるの?
仕様的に他のファイルに実装を書けるとは思えんのだが
118 :
114 :2006/10/02(月) 21:36:01 ID:bWQ93X+m
>>115 ,117
私の探し方が足りなかったみたいですね
解決しました、ありがとうございます
DynaCallにEnumWindowsのサンプルがついてますが、 これを参考に特定文字列を含むウインドウにメッセージを送るってのを作ったのだけど、 なんかClassなのに変にグローバルになってて、どれをどう再利用できるのかよくわからんのです。 うまくカプセル化できませんか?
日本語でおk
hosyu
DOS窓から行う作業があったので、wscript.execにやらせようとしているのですが、DOS窓では数秒で完了するコマンドがexecでは動作中のまま帰ってきません。 動くコマンドと動かないコマンドがあったりするのでしょうか? ちなみに動かそうとしているのは業務用のソフトです
そもそも WScript オブジェクトに exec メソッドなんて無かったような気がするのだが。 何を以て返ってこないと判断したのか分からんし。
WshScriptExec の間違いでした DOSだとすぐ出力結果のファイルが出来るんですが、WshScriptExecだと黒いウィンドウが開いてそこから進まないです
プロンプト画面に何も出力されないのは仕様。 WshScriptExec オブジェクトは StdIn / StdOut プロパティ使って入力したり出力受け取ったりする。 MSDN にサンプルコードも多分あるだろ。 進まないってのは入力待ちしてるんじゃね?
>>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)
私も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から操作する良い方法がありましたら 教えてください。
StdIn 使えばいいんじゃね? と思ったが GUI アプリか? それにしちゃ StdOut 読んでるよな。 つか strLine が書き変わってないようだが。 > Exec メソッドがプログラムの実行終了後に行われる の意味が分からん。
strLine = wsExec.StdOut.ReadLine は要らないの? InStr(strLine,"入力=") > 0 じゃないの? SendKeys と ("1") の間にある . は必要なの? ごめん、VBScriptはあんまわかんないけど、これは明らかに動くわけないよね。
130 :
127 :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を使って実行されたスクリプトまたはプログラムの実行終了後、
実行開始前のいずれかに行われると書いてあったので、業務ソフトが終了するまで
メッセージボックスが表示されなかったのかな?と思ったのです。
勘違だったらすみません。
>>130 例えば"1"の1バイト分だけ記録されたテキストファイルを"stdin.txt"とすると、コマンドプロンプト画面で
業務ソフト.exe < stdin.txt
と打ち込んで実行させる事はできる?
もしできるのであれば、
>>126 の応用で解決できそうな気がするんだけど・・・
132 :
127 :2006/10/15(日) 22:35:28 ID:Tn/lrPJD
>>129 さん
>SendKeys と ("1") の間にある . は必要なの?
ご指摘の通り、間違いです。お恥ずかしい。
>>128 さん
その業務ソフトはGUI アプリというか、
DOS窓に
==メニュー===
1)実行
2)変更
9)終了
入力=
のように表示され、DOS窓にメニューの番号を
入力するようなタイプのアプリです。
Sendkeysで番号を自動入力できないかなっと思ってWSHを調べながら
始めてみたのですがどうも難しくって・・
133 :
127 :2006/10/15(日) 22:42:05 ID:Tn/lrPJD
>>131 さん
レスありがとうございます。
業務ソフト.exe < stdin.txt
もDOS窓で直接試してみたのですが、
メニューの後に複数のメニュー画面が続くせいか、
stdin.txtに選択したい番号を記述して実行では思うような結果が
得られませんでした。
え、てか Exec の戻り値の WshScriptExec に SendKeys なんてメソッドはないんじゃ。 wsExec.StdIn.Write "1" & VbCrLf とかじゃないとダメでしょう。
1{Enter}なら、 ( ECHO 1 MORE ) | 業務ソフト.exe
Set wShell=CreateObject("WScript.Shell") wShell.Run """業務ソフト.exe""" Do While Not wShell.AppActivate("タイトル") WScript.Sleep 100 Loop wShell.SendKeys "1{Enter}"
>>127 ReadLineじゃ駄目なのは、「入力=」の最後に改行がないからだと思う。
>>130 の「止まったまま」というのは改行待ちしてる状態と予想。
Read(1) で一字ずつ読みながら「入力=」との一致をチェックすればいけるかもよ。
一致したところでReadを止めてWrite。
VBScript使用で、a.vbsはmusic1.mp3を再生する。b.vbsはmusic2.mp3を再生する。 最初にa.vbsを実行して、曲の再生が終わったら自動でb.vbsを実行することは可能ですか? つまり、曲が終わったことを何らかの形で取得することは出来ますか?
>>138 頭を柔軟に。
VBSで曲が終わったことを検知する方法ばかりに拘らないで
曲が終わったことをVBSに検知させられるような再生方法というのを考えてみよう。
答えはすぐ出るはずだ。
140 :
138 :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が実行されることになります。 自動で実行するにはどうしたらいいでしょうか・・・
music1.mp3 music2.mp3 ってm3uファイルに書き出してvbsで実行 じゃ駄目?
142 :
138 :2006/10/17(火) 15:43:39 ID:oUFoO9T0
>>141 最終的に、複数のm3uファイルを用意して、一曲再生されるごとに別のm3uに移動する、
という方法にしたいの不可です。すまぬ。
>>140 Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "%COMSPEC% /C START /W music1.mp3",1,true
WSHShell.Run "b.vbs",1,true
これはどう?
つかアプリ決め撃ちでない以上どうしようもないんじゃない? 再生が終わったからってアプリそのものが終了するとも限らないんだし。
>144 ほとんどの再生ソフトは、再生終了時にソフト自体も終了させる事ができるだろ。 それに質問者本人は>140で再生ソフトがWinampという海外製の定番フリーソフトである事を 晒しているから、イザとなればどうにでもなるんじゃないかな?
>>142 最初に複数のm3uファイルを読み込んで、vbsで合成したm3uファイルを作成後、再生するとか。
147 :
138 :2006/10/18(水) 01:23:50 ID:rHQCrCuO
再生終わったとあとに、どうしてもアプリを一旦終了させる必要がありそうですか。
流石にそれは無駄な動作なので避けたい所ですが('A`) ちなみに再生はwinampでも何でもいいです。
>>143 コマンドプロンプトが邪魔に感じてしまう('A`) でも工夫次第で何とかなるかも
>>146 プレイリストに手を加えるというのはアリかも
みなさんありがとうございました。何とかやってみます。
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>
>>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>
原始的に、 mplay32.exe /play /close "...mp3"
151 :
名無し~3.EXE :2006/10/20(金) 17:33:52 ID:wRng55we
WSHを使う上でのjsとvbsの違いって何ですか?
違いはないと思うよ。 言語の仕様上、vbsの方がfor eachとかでファイル再帰とかやりやすいけど。 おれはVBっぽいのに拒否感があるので、見た目Cっぽいjsを主に使ってる
>>151 JSは引数の参照渡しができないのが致命的欠点。
JSのいい加減な配列になれていると、VBSの配列は使いにくい。
使いにくい分実行速度はVBSが有利。
大文字と小文字を打ち間違えて、なんでエラーになるんだー、と悩むのが嫌でVBScriptです。
>>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にもそれぞれ良いところがあるから、結局自分で選んだ方がいいね。
>>155 参照の値渡し、と言うべきかな。
JScript は(ECMAScript は、なのかな)正規表現が言語組み込みな割りに
グローバル変数に結果が格納されるという謎仕様が台無し感たっぷり。
>>155 自作関数ではなくて、引数に値を返してくるCOMがやっかいなのよ。
おれもJSの方が楽なのでCOM周辺だけVBS使ってる。
>>156 > グローバル変数に結果が格納される
RegExp オブジェクトの事かな?
match メソッドとか exec メソッドとか、結果をちゃんと返してくれるんだから
RegExp オブジェクトを使わずに返り値を使うようにすれば済む話では?
>>157 なるほど。それはやっかいですね(´・ω・)
業務ソフトをwshshell.execで走らせると窓が止まってしまうと言っていた者です。 wshshell.run で同じコマンドを走らせると動きました。 stderrが使えないのが不満ですが・・・ runとexecで使えるコマンドに違いがあるのでしょうか?文字数とか使用できる文字とか。
stdoutかstderrのバッファがあふれてるとか?
>>160 バッファあふれ対策ってあるのでしょうか?runだと不便で不便で
Readすりゃいいけど、stdoutとstderrの両方があふれる可能性がある場合はお手上げ。 ファイルにリダイレクトすれば・・・・・Runと変らないw
パイプはタンクじゃないんだから、出口から読み出さないと、入り口へ書き込めないよ。
Set oExec=wShell.Exec("cmd.exe /c,""業務アプリ.exe"" 2>&1") hoge=oExec.StdOut.ReadAll()
皆さんありがとうございます
DOS窓やrunで実行するとメッセージが1〜2秒くらいスクロールしていますからたぶんstdoutのバッファあふれだと思います。
月曜日に
>>164 を解読して応用してみたいと思います。
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」に置換したので、「〜」の部分を正規表現で表せないのかなと。
終了条件(ABC)は分かった。 開始条件は何よ。
> 「任意の文字列」 普通に".*"だろ(空文字列も含む)
検索: .+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つは全く同じという解釈でいいですか?
>>171 > 先頭から「ABCで終わる」文字列
あるじゃん、開始条件。>先頭から
* や + は正規表現の超基本なのでそれくらい調べれ。
わざわざ別の文字を割り当ててる以上別モンである。
>>171 「開始条件はない」と言ってるけど、無意識に
空白文字以外で始まる文字列を前提にしているんじゃないの?
それなら、「\S*ABC」でやってみるといい。
>>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をちょっと
>>176 まずはWMIあたりから始めると面白いかも。
>>176 まずは
>>2 の「Windows Script 5.6 ドキュメント ダウンロード」を落として
隈無く読むこと。今とくにやりたいことも無いならそこから入れ。
まあ、やりたいことがあってもここから入るのが基本だが。
181 :
176 :2006/10/22(日) 23:35:43 ID:OIBpBobZ
返信ありがとうございます。 目的は、PCの単純作業を出来る限り自動化です。 「Windows Script 5.6 ドキュメント」を隈なく読みます。 それでわからなかったらまた質問に来させて頂きます。 ありがとう御座いました。
まあでもそのドキュメントがWSHでやれることの全てだと思われても困るが。
え゛、あのドキュメントが全てだろ。
COM があれば可能性はおおよそ無限だ
COMさえあればモテモテだね!
>>182 俺もアレがほぼ全てだと思うけど。そりゃ、COMだのWMIだのを使えば、出来ることの幅は広がるが
それらはWSHの機能でもなければ、WSH専用のコンポーネントですら無いから、(WSH同梱のCOMはあるが)
全てに置いてリファレンスが載ってるわけではないが、それらが利用できることはきちんと書いてあるし。
例えば自分はWSHがサポートしていないxml要素を作り、それを利用して変数の値を保持したり
次回実行時にそれを読み込んだりしているが、wsfがxml準規であることと、COMが使えることが書かれている以上、
定形外のwsfを作りMSXML2.DOMDocumentを利用したこの使い方も、あのドキュメントから導き出される使い方の一つだ。
「加算演算が出来ます」と書かれていたら、1+1の演算が可能です、1+2の演算が可能ですといちいち書かれていなくても
それらの演算が可能なことを意味するのと同じ。言語製品は応用するのは当然のことだが、応用ではなく機能として見た場合に
あのドキュメントに書かれていない機能って何がある?絶対無いとは言い切れないけど、俺はすぐには思いつかないな。
3行でかけることをよくもまぁ
別に構わないよ、苦ではないし。 わざわざそいいうことを書き込む理由が分からない。
内容が無い書き込みを読む方が苦痛ですぅ
MSDNとか見難くて見てられんのよね・・
hozyu
> 紙のリファレンスとして > ある意味では,本書のカバーする範囲はWSHのヘルプに書かれている範囲をそう越えてはいない。 > 基礎的な知識があることを前提にすれば,一読したあとは紙のリファレンスであることが最大のメリットということになる。 > > 紙のリファレンスの価値は,プログラマの人ならよくわかっているだろうとは思う。 > はたして,紙としてまとめられていることにどれだけの価値を見いだすか,というのは議論のわかれるところだろう。 > 入門書というにはやや記述が少なく,解説書というにはリファレンス的側面が強すぎるため,それ以外には魅力を見いだせないということなのだ。 確かに紙面リファレンスは有ると便利だが、それだけの為に4000円出すバカは居ないだろう。 早速改訂版が入荷してたので立ち読みしてみたが、サンプルとかもショボすぎて使い物にならないし。 4000円出してでも、script56.chmの紙面版が欲しいってなら、絶対に買うなとは言わないが、 俺にとっては100円ショップに置いてあるなら買ってもいいかなってレベルの出来だな。
WSHヘルプを見る時は、「窓使いの憂鬱」と「HHプラグイン」を使うと読み易いです
.vbsを登録してD&Dで引数が渡せる良い感じのプログラムランチャーって無いですか?
あるよ。 但しスレ違いな上に、「良い感じ」の定義は個人によって違うので具体的な紹介はしないけど。 具体的に紹介して欲しいなら、ソフ板のソフト紹介スレで、 具体的にどういうものが君にとって「良い感じ」なのかをきちんと書いて質問してみな。
自分で探した方が早そうだね
199 :
名無し~3.EXE :2006/11/06(月) 04:44:13 ID:6BsyJ6Fg
200 :
名無し~3.EXE :2006/11/08(水) 19:11:29 ID:PcQgSeRB
うっしゅ
既定のブラウザをIE5.01SP4とfirefox2(J) とに交互に切り替えるJscript を恵んでくださいな。
>201 交互っつったって、どんなタイミングで切り替えるんだ? 既定ブラウザ自体はレジストリ変更でどうにかなりそうだが…
(既定ブラウザを切り替えたいときに、机の上にある jscript ファイルをダブルクリックする。) // 1 変数の初期設定 // 2 該当レジストリを読み出す。 // 3 既定ブラウザが IE だったら、とある変数に firefox2 を代入する。 // 4 既定ブラウザが firefox2 だったら、とある変数に IE を代入する。 // 5 既定ブラウザが上記以外だったら、とある変数に 逝ってよし を代入する。 // 6 とある変数が逝ってよし以外なら、 該当レジストリに書き込んで、とある変数 に切り替えましたと表示する。 // 7 とある変数が逝ってよしなら、とある変数をそのまま表示する。 こんな感じです。
何にしてもここは「スクリプトの作成を依頼するスレ」じゃないからね。 自分で作る気が無いなら帰れってことになる。
じゃ帰りまつ。
Windowsがロック(Win+L)されてると、AppActivate→SendKeysではキー送れない…ですよね? 何か代替策ありますでしょうか? WshShell.Run('notepad.exe', 1, false); WshShell.AppActivate('メモ帳'); WshShell.SendKeys('0{ENTER}');
>>206 COM使ってSendMessage
具体的な方法はCOM付属のドキュメントやWeb上の解説読んで
>>207 dクス!
まだまだ知らないことばっかりだ(゚∀゚;)
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+
桃子って馬鹿っぽい声だな
URLそのまま表示するだけなら、普通にwin1.location.href="URL"でええやん(´・ω・)
214 :
名無し~3.EXE :2006/11/11(土) 21:17:05 ID:OPUQTd1+
>>212 フォームのアクションへ POST して取ってくる感じ
>>210 内容を一旦テンポラリファイルに保存してから、それを開くって感じではどう?
ADODB.Stream 使って XMLHTTP.responseBody を保存すれば、正確に表示できる。
216 :
名無し~3.EXE :2006/11/12(日) 09:26:37 ID:paxoE75X
>>215 やってみたら文字化けしませんね。
一度保存するってのをベースにこれから作ってみます。
どもありがとです。
ファイルに書き出さんでも、Write した後 Position を 0 にしてやれば Type やら Charset やら ReadText やら可能になるよ。
ファイルに保存せずに、ストリームを直接ブラウザに表示なんてできる?
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できなかったらメールを送るとかのスクリプトを作りたいのですが どなたか同じことをやられている方はいませんでしょうか。
メールを送るだけなら CDO.Message でできる。 詳細はググってください。
>>219 標準のtelnet.exeじゃなくて、
ログインまで自動化できる別のソフトを使えば?
>>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 :2006/11/14(火) 20:50:34 ID:eUOyYwez
あ、ごめんなさい。 エラーの行に WScript をつけて、以下のようにしても同様でした。 var obj = WScript.GetObject("winmgmts:\\" & strComputer & "\root\CIMV2");
JScript の文字列連結演算子は + だが。
\→\\
PowerShell正式版来たな
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 :2006/11/15(水) 10:18:39 ID:8Giezelv
解決しました。 var obj = WScript.GetObject("winmgmts:\\\\" + strComputer + "\\root\\CIMV2"); はダメで var obj = GetObject("winmgmts:\\\\" + strComputer + "\\root\\CIMV2"); ならOKでした。ムムム。
>228 Windows Server 2003 Service Pack 1 および Windows XP Service Pack 2 用ってのがアレだけどな。
PowerShell入れてみたけど、気に入ったw。 wsh捨てる決心ついたよ。
コマンド入力まで時間かかるんだが、どうにかならんの
Me使いのオレは移行したくとも出来んのだよ。
PowerShellってパイプを流れるのもオブジェクトなのな。 CMDで dir | sort dir | sort /r と PSで dir | sort dir | sort -des と比べて、頭の古い俺はちょっとびびった。 cd hklm: でおいおい俺レジストリにいるよ、とか。 Vistaにデフォで入っていない上にデフォのセキュリティもガチガチだけど やれること考えたら仕方ないか…。
explorer切ってこっちをシェルにできんかな
238 :
名無し~3.EXE :2006/11/18(土) 15:10:02 ID:AegbpAMY
ADODB.Stream関連のプロパティを紹介してるHPを知りませんか?
>>238 Microsoft Data Access SDK 2.8
をダウンロードしたら?
エクセルの中身をスクリプトで抜きたいんですが、可能でしょうか? アクセスに移行しないと無理ですかね?
エクセルの中身というのを xls ファイルの中身であると解釈して。 Excel.Application からオートメーションすればいいっしょ。
243 :
名無し~3.EXE :2006/11/22(水) 22:36:18 ID:FtHukSom
皆様ありがとうございます。
>>244 のって工夫すればなかなか便利に使えそうですね
>>244 いろいろいじってみたけど、これすげく楽しいな
ADOでのSQLについて詳しいページってありませんか?
ググれ
_____ \ _ _/ ( *゚∀゚) ( 9 ⌒)9゙ ググッ "⊂_)∪,,
250 :
名無し~3.EXE :2006/11/26(日) 21:34:24 ID:tNFTdH9d
OutLookExpress内の任意のメールを特定のフォルダへドロップ(コピー)するような スクリプトは、どのような関数を使えばよいでしょうか? emlファイルに出来ればOKです。 WSHに詳しい先輩達にご意見をお聞きしたいです。
COMってコム?それともシーオーエム? WSHは?ウィンドウズスクリプトホスト?ダブリュエスエイチ?ウーシュ?
COMはコムって読んでる WSHはそのままW・S・H
wshはウッシュだなあ 関係ないけど、zshはズッシュ、tcshはティッシュと 呼んでた俺。
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 `ー‐―''" ⌒'ー--‐'´`ヽ、_ _,ノ ノ  ̄ ̄ | /  ̄
>>254 W−WSHのアニメはイマイチだったぞ。
256 :
名無し~3.EXE :2006/11/27(月) 22:04:40 ID:mEhuqTrR
htaやwsfファイル中でPerlScriptからVBScriptやJScriptの関数って呼べます? 逆は普通に呼べるんだが...
ランチャをWSHで組んだとして 起動させたアプリからの、read/writeを規制することは 可能でしょうか? 例えば、~/tmp以外書き込み禁止とか...
>>258 何でそんなことしたいのか知らんけど,Windows2000かXPであれば,新しくユーザ作成して適切なパーミッション設定して,runasでそのユーザで起動するようにすればできなくはないかも?
>>257 呼べる。とりあえずwshのリファレンス読め。
htaも同じ方法で呼べるから。
>>258 不可能。というかスクリプトの仕事じゃない。
まともなプログラム言語使え。
>>260 呼べるのか.
<job id="main">
<script language="PerlScript">
sub perlfunc() {
$WScript->Echo("PerlScript");
}
</script>
<script language="JScript">
perlfunc();
</script>
</job>
これはいけるけどPerlScriptからJScriptのfunctionを呼ぶにはどうすれば?
wshやperlのマニュアル見ても見つからないの.サンプルプリーズ.
&jscriptfunc() で呼べるんでないの?
method(); でいけるはずだが
strconvはもちろんストア昆布だよな
266 :
257 :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>
引数があれば呼べるんじゃないかな
適当な引数を付ければ呼べるみたいだね。例えば、 &jsfunc(0);
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 :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内の任意のメールを特定のフォルダへドロップ(コピー)するような 関数を教えてください。 頭の良い方達揃いと思い、お願いします。
>>269 >ScriptControlを使う手もあります 呼び出し先ではWScript使えないけど><
使えます。VBScriptの記述では、
sc.AddObject "WScript",WScript
みたいにSC側にWScriptを渡せばよいのです。
>>258 >>259 タスクスケジューラに登録しておいて、FolderItem.InvokeVerbで実行する。
>>257 あてずっぽうですが、
jscriptfunc()
で呼べませんかね。結構、非常識な発想が通ったりする世界ですから。。。
278 :
257 :2006/11/28(火) 20:21:36 ID:Tv1LYONy
>>267 >>268 無事呼べました.情報ありがとう.
perlじゃ引数なし()は省略されるってことね.
>>269 ふむふむ.それはVBA上からperl呼ぶとか便利に使えそうだね.
vbsやjsにできてperlにできないことはまずないから,wshでは使わないだろうけど.
スクリプトから自動でメールを出すってできますか? WEBページにあるフォームに入力させて「送信」ボタンを押すみたいなことをスクリプトで実現したいんですが
280 :
名無し~3.EXE :2006/11/28(火) 21:53:30 ID:mWvA7je0
MsgBox でフォントの大きさを変えることはできませんか? (全体を大きくするのではなくて、MsgBox のウインドウで 使われるフォントだけ)。
>>279 CDO.Message で検索してみて。
>>280 一からウィンドウを作らないとダメかと。
282 :
280 :2006/11/28(火) 22:18:48 ID:mWvA7je0
>>281 Wsh では1からウインドウを作るのはどうやるんでしょうか?
VBScript でも JScript でもこの際なんでも構いません。
(機能はメッセージを出して OK 押したら消えるだけでいいんです。
但し大きく目立つように出したいということです)。かといって
後から何か特別なソフトをインストールしたくはないので Wsh の
VBScript の MsgBox でやっていたんですが、何か方法ありませんかね?
HTAにしてみるとか
>>282 WSHから使えるGUIウィンドウは
COMとして作るしか無いかと。
又はWSHではなくHTAを使うって手もある。
PowerShellを使うと
>>36 >>206 などが簡単に出来るようになるんでしょうか?
CDO.Messageについて調べたんですが、送信元のアドレスをソースに入れないで(自動で補完)つくれないでしょうか スクリプトを知らない多数の人が使用するという想定でつくりたいのです
>>282 TclScript, PerlScript, RubyScriptとかならTkが使えるからGUIが自前で作れる.
それぞれの処理系をインストールしなきゃならんのでHTAの方がいいだろうけど.
>>287 1. スクリプトの先頭にadress = "
[email protected] "とか書いておいて,各自そこだけ書き換えてもらう.
2. InputBoxやHTA使ってアドレス入力させる.毎回入力するのは面倒なので,ファイルに保存しておいて次回からはそれを読む.
など
290 :
名無し~3.EXE :2006/11/29(水) 22:17:21 ID:1dkZEY39
>>272 >>273 ありがとうございます。
ただ、もっと簡単にスクリプトを組んで関数をチャチャっとやって、
できないものか思案中です。
あまり、プログラムって組んだ経験がないので・・・。
何か良いアイデア、ないでしょうかね?
自力でプログラム書く気がないなら、このスレ向きじゃないよ。
標準出力を使いたいので、ファイル名.vbs(wscript.exe)で実行しても cscript.exeで実行するような書き方ってありますか
>>292 cscript //H:CScript
>>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 > vbcという拡張子をcscriptに関連付けて、cscriptで実行したいものはvbcで作る方法がオススメ。
なるほどなあ、その発想はなかった
>>295 関連付けで標準入出力が使えない障害はありましたが、もういいのかなぁ。
もし、駄目なときはVectorのVBCFILEを参照。
これでアクセス権限のないレジストリキーを 自動で削除する事ってできますか?
WScript.ShellのPopup(,nSecondsToWait)が効かないってことありませんか? HTMLやHTAのときは、そういう仕様か、と思っていましたが、WSHでも起こります。 どうもCPUが他の処理で忙しいときに抜けるみたいです。 さすがに、それは障害だと思いますが。使うときはご用心。
>>282 こういうときは、WSHからIEを起こして操作するのが簡単。
バッチファイルをリモートからWebに埋め込んで使う ということをwsh使ってできますか?
うん、出来る。。面倒だから普通はやらないけど。 どうしても面倒なことやりたいなら勝手にやればよい。
>302 で、それを知って何をやりたいんだ?
>>296 それより、RunWithArgs.CMDを関連付けると、便利だわい。
306 :
名無し~3.EXE :2006/12/11(月) 22:02:52 ID:YncVWVUZ
age
WSHでDDE使う方法ないかな?
>>307 DDE使えるCOMを探すか作る。
そんな回答アリかよ、と言うかも知れないが
拡張無しにWSH自身が出来る事なんてほとんど無いんだから
COMなどの外部拡張に頼らざるを得ないのは仕方ない。
VBScript(.vbs)からExcelを操作して文字列の置換をしたいんですが、ループでセルを一つずつ見て置換していくしかないのでしょうか? Excelの置換ダイアログみたいに一括でブック全体を置換したいんですが。 ちなみに優先順位としては 処理スピード > コードの複雑さ です。
>>309 RangeメンバのReplaceメソッドで置換すれば良いだけだよ。
Replaceメソッドの使い方はExcelVBAヘルプに載ってる。
因みに組み込み関数のReplaceじゃないので間違わないように。
ちなみに対象のシートオブジェクトを取得したら、置換は1行コードで終わる。
ループよりは速いが、どのくらい速いかはCPU依存。
>>310 ありがとうございました!標準オプションなら↓だけで行けますね。
objApp.ActiveSheet.Range("A1").Replace <検索文字列>, <置換文字列>
後は各シートでコレを実行させました。十分実用に耐えるスピードです。
312 :
名無し~3.EXE :2006/12/13(水) 22:14:37 ID:hw3Bn7Em
IEから右クリックで動作させるスクリプトなんですが、 その右クリックされた場所にある画像のURL(リンクではなくIMGタグ) を取得するにはどうすればいいでしょうか?
external.menuArguments.document.elementFromPoint(external.menuArguments.event.clientX, external.menuArguments.event.clientY).href らしい。Irvine のスクリプトによると。
314 :
312 :2006/12/14(木) 00:28:11 ID:7FtNx5qL
315 :
名無し~3.EXE :2006/12/14(木) 00:29:42 ID:DjAdsCMN
InternetExplorer.Applicationとかの情報ってWSHのリファレンスに のってないけど、どっから情報獲ってくるんだ?
IE オブジェクトなら MSDN にいくらでもあるっしょ
以下のようにした場合、メッセージボックス(?)が表示される前に コマンドプロンプト・ウインドウが表示されるのですが、結果の メッセージだけを表示させるにはどうすれば… ? Set objWshShell = WScript.CreateObject("WScript.Shell") Set objExecCmd = objWshShell.Exec("ruby\bin\ruby -Ks search.rb") WScript.Echo "検索結果:" & objExecCmd.StdOut.ReadAll
rubyw.exe
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からも使えます。
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プロパティから取得できる。
マルチするならせめて一言断り入れとけよ。あとリンク。 つか IE オブジェクト使うなら大凡の操作は可能だと思うのだが。わざわざ SendKeys 使わんでも。
324 :
名無し~3.EXE :2006/12/20(水) 02:32:54 ID:mM03wtmE
>>323 ファイルの指定したいんじゃないかな?
予想だけど。
>>322 <input type="file">以外の入力をしたいのなら、SendKeysなんて不安定なもの使わなくても
Document.Allで取得したHTML要素のオブジェクトを直接操作できるよ。
DHTML関係で調べると情報が見つかると思う。
<input type="file">だけはセキュリティだか何だかで値を設定できないから仕方ないけど。
>>324 そうです。
SendKeys "%(FA)"とかでセーブしたり印刷などダイアログ操作もしたいんです。
>>326 ありがとうございます。
IEが複数起動してた場合や別プロセスにチェックあった場合とかで試してレポートしますね。
あっちのスレで質問に答えてる人が、こっちのスレを見たらどう思うだろうね。逆はどうだろう。 マルチするやつは、想像力のかけらもない、人を思いやる事のできない、最低の人種。
痛い人はっけん伝
>>328 というか、マルチの問題は、回答者の善意が無駄に捨てられていることだと思う。
そして、それが、本人より、それを見ているひとを刺激するのだと思う。
331 :
名無し~3.EXE :2006/12/22(金) 15:58:35 ID:JvRzts1c
パワーポイントに画像 1.jpg 2.jpg... を並べて貼るのって自動化できないの?
マクロ書けばいいんじゃないのか?
html で書いて読み込みとか
SendKeys()は?
質問させて下さい。 var obFS,obFOL,colFile; var timestamp = ""; obFS = WScript.CreateObject("Scripting.FileSystemObject"); obFOL = obFS.GetFolder("f:\\"); colFile = obFOL.Files; var x = new Enumerator(colFILE); for(; !x.atEnd(); x.moveNext()){ timestamp = x.item().DateCreated } というコードを実行すると、 timestampに"Wed Nov 29 19:35:35 UTC+0900 2006"というようなのが返ってくるのですが、 ここからyyyymmddという形式の文字列を取り出すにはどうしたらよいのでしょうか。
↑環境はXPSP2、Windows Script5.6です。
>>336 Dateオブジェクトの扱い方について学びましょう。
リファレンスにも載ってますよ。
>338 var timestamp = new Date(x.item().DateCreated); ですね。いろいろいじっていたら閃きました。
既に開いてある IE のウィンドウのオブジェクトを、 子ウィンドウかどうかに関係なく所得するにはどうしたらいいでしょうか?
>>340 Set IEShell = CreateObject("Shell.Application")
num = IEShell.Windows.Count
For i = 0 to num - 1
WinName = IEShell.Windows.Item(i).LocationName
WinPath = IEShell.Windows.Item(i).LocationURL
Document.write "<tr><td>" & WinName & "</td>"
Document.write "<td>" & WinPath & "</td></tr>"
Next
こんなんでどお?
少し前に、vbscriptをコンソール実行するのにcscript.exeに関連付けした.vbcというのを用意するという話があったけど
これと同じように.wsfのコンソール実行版として.csfをcscript.exeに関連付けしたいんだけど、どうしたらいい?
単純に%SystemRoot%\System32\cscript.exe "%1" %*じゃエラーになるし、//Eに何を指定したら良いのか解らずお手上げ状態
wsfにはcscript.exeも関連付けされてるが、右クリックメニューからの選択は煩わしいのでvbcみたいに既定関連付けにしたいし
cscript.exeで実行し直すスクリプト(
>>294 のvbs版のようなもの)を書いてみたりもしたけど、やはり関連付けしちゃったほうがスッキリするので
普通に%SystemRoot%\System32\CScript.exe "%1" %*でいけるだろ? ちゃんとREG_EXPAND_SZにしてるか?
>>344 .wsfをcscript.exeに関連付けするんじゃなくて.csf(独自拡張子)をcscript.exeに関連付けする場合ですよ
本当に%SystemRoot%\System32\CScript.exe "%1" %*でスクリプトとして実行される?
こちらはちゃんとREG_EXPAND_SZにしてるし、cscript.exeやwscript.exeに直接D&Dしても同じメッセージが出るので
パスはきちんと通ってるし、コマンドも渡ってる
>>345 D&Dならこれじゃないの。
[HKEY_CLASSES_ROOT\WSFFile\ShellEx\DropHandler]
@="{60254CA5-953B-11CF-8C96-00AA00B8708C}"
しかし、cscriptでD&Dとはこれ如何に…
>>343 うちもエラーが出る。メッセージは↓だろ。
> ファイル拡張子 ".csf" を持つスクリプト エンジンはありません。
解決方法はわからん。
>>346 スクリプトファイルにD&Dしたいんじゃなくて、
「スクリプトエンジンにD&Dしても同じエラーが出るから
関連付けのパスは間違ってないですよ」ってことだろ。
348 :
名無し~3.EXE :2007/01/07(日) 14:19:39 ID:sB9LNE5a
画像の容量やサイズを取得しJavaScriptで利用するにはどうしたらいいですか?
'標準的なJPEGファイルの画像サイズ取得 GetJpegSize "sample.jpg", x, y WScript.Echo "X=" & x & " Y=" & y Function GetJpegSize(filename, ByRef x, ByRef y) Set oStrm = CreateObject("ADODB.Stream") oStrm.Open oStrm.Type = 1 'adTypeBinary oStrm.LoadFromFile filename Do While (CvNum(oStrm.Read(1)) = &hFF) Select Case CvNum(oStrm.Read(1)) Case &hD8 'SOI Case &hD9 'EOI Exit Do Case &hC0 'SOF0 length = CvNum(oStrm.Read(2)) oStrm.Read(1) y = CvNum(oStrm.Read(2)) x = CvNum(oStrm.Read(2)) Exit Do Case &hDA 'SOS Exit Do Case Else length = CvNum(oStrm.Read(2)) oStrm.Read(length - 2) End Select Loop End Function Function CvNum(bstr) ' BigEndian For i = 1 To LenB(bstr) CvNum = CvNum * 256 + AscB(MidB(bstr, i, 1)) Next End Function
>>346 DropHandlerは既に設定してあるけど、問題はそこじゃないので
>>347 エラーメッセージはそれです
cscript.exe /?を見ても、//Eオプションの意味は書いてあるんだけど//Eオプションに設定出来る値とかは書いてないんだよね
.wsf形式は固定エンジンじゃないけど.vbcも//E無しで関連付けすると同じエラーが出て//E:VBSを付けると解決するから
これも//Eで解決しそうな気もするんだけど
(・∀・∀・) (・∀・)サテオシゴト・・・ ε三三三三(; ・∀・)鯖マデオツカイ HTTP/1.1 304 Not Modified ( ・∀・)(・∀・ )オツカイオワリ 三三三三3 (・∀・∀・) ( ´∀`) 誰も書いてないよ (・∀・)カンリョウ!!
下のコードでVistaのファイルのプロパティ調べてみたら 266もあって笑った。 2000/XPだと40もなかったのに -------------------------------- var WshShell = new ActiveXObject("WScript.Shell"); var oShell = new ActiveXObject("Shell.Application"); var oFol = oShell.NameSpace( "C:\\" ); var str= ""; for( var i = 0; i < 300; i++ ) { str += i + ":" + oFol.GetDetailsOf( null, i ) + "\n"; } WshShell.Popup( str );
WSFはデフォルトをCScript.exeにする。 WScript.exeで動かしたいときは、ショートカット(.lnk)を作って リンク先の頭にWScript.exeを入れる。
envionment を直訳したのか?
envionment (なぜか翻訳できない)
//E:のエンジン名は可変だから、 ハードコーディングのcscript /?に書いてある訳ないわな ヘルプぐらいででわざわざレジストリを検索するのも面倒だし
362 :
名無し~3.EXE :2007/01/20(土) 16:16:36 ID:XJ4mGjq5
Excel のブック中に、4月〜3月のシート名を持つワークシートがあり、
各シート名内の数字が全角か半角かはあやしいものとする。
セルA6から下方方向に半角数字で日付が記入してあり
対応する日の’C'から'G'のセルに行事予定が記入してある。
今日も含めて3日分の予定を WScript.Echo で表示する。
エクセル.xls ファイルとJscript.js ファイルは、d:\1 フォルダ内に置く。
という条件で、とりあえず動くものを作りましたが、
ここを直した方がスクリプトが簡素になるよとか、
「今日も含めて3日」間が、月の境界の場合は無視しているので
その処理のアイデアとか
コメントを下さい。
ttp://a-draw.com/uploader/src/up11825.lzh.html
JScript使い始めて2日目のおいらが、勉強がてらリファレンス読みながら調べたことを書いてみる。 var XLS_FILE = WScript.ScriptFullName.replace(/\\[^\\]+$/, "\\sample.xls"); にすれば"d:\1"以外でも、同一ディレクトリにsample.xlsがあれば動く。 曜日はyday = "日月火水木金土".charAt(yday)の1行で済む。 正規表現使って(reはmonthから"^(?:10|10)月$"のようなパターンを作る) for(; !sub1.atEnd(); sub1.moveNext()){ if (sub1.item().Name.match(re) != null){ sh = sub1.item(); break; } } という感じで対象シートを変数に取得しておけば、 while(sumSheatnc.indexOf("1")>-1){ 〜 sumSheatnc.indexOf("月"+month +"月")+1))).Select; の約50行は不要だし ExcelApp.ActiveWorkBook.ActiveSheet.Cells(i,3) を sh.Cells(i,3) と書ける。 半角数字はcharCodeAt+65248をfromCharCodeすれば全角数字になる 更に if (ExcelApp.ActiveWorkBook.ActiveSheet.Cells(i,3)>"") event+= ExcelApp.ActiveWorkBook.ActiveSheet.Cells(i,3)+" "; 以下の5行に相当するものが event = new VBArray(sh.Range(sh.Cells(i,3),sh.Cells(i,7)).Value).toArray().join("\t").replace(/\t+/, " "); の1行で書ける。(join(" ")でもいいと思うけど) 月越えの処理は、「2007年month月date+1or+2日」のgetMonthがmonthより大きければ次のシートに移る処理を書けば良いのでは? 2007/2/28の場合なら、2007/2/30を指定すれば2007/3/2を返すから、末日が何日かとか考えなくても月を越えたかどうか判断できる。 次のシートはWorksheets(sh.Index+1)って感じで取得すればいい。末尾シートの場合の例外処理をお忘れなく。
365 :
名無し~3.EXE :2007/01/20(土) 23:24:24 ID:slWIhDIN
Excel上にVBAで書いたモジュールを jsやvbsから呼び出す方法ってあるんですかね? ぐぐってみたんですけど、わからんのですorz
366 :
名無し~3.EXE :2007/01/20(土) 23:42:48 ID:Lkiodn1p
ネット中毒なっている若者はオナニーでもしておれ!!
367 :
名無し~3.EXE :2007/01/21(日) 14:39:38 ID:fTYEC1jK
>>364 ありがとうございます。参考にさせて頂きます。
正規表現のところは、こちらの能力の限界で、今分かっても数ヶ月のちには屁理屈を忘れてしまいそうなので
ブラックボックスのまま置いておくか、wsh HELP ページや参考となるところのURL までコメントとして詳しく書き入れるか
どうしよう。
ここも人が少なくなりましたね。サンプルソースコードは、2,3日後には消しますね。
でわ。
370 :
365 :2007/01/22(月) 00:19:18 ID:o8eRiI+8
>>369 返信ありがとうございます。
なんとか解決できないだろうかと、
会社の帰りに本屋でExcelマクロの本を読み漁って、
Application.run ってのが探してたものだとわかりました。
お手数おかけしました。
回避策はわかったのですが、 どなたか知っていたら教えてください。 <やりたい事>レジストリの値名が\から始まっているデータをRegReadで取得する方法 <環境>WinXP SP2 Pro/WSH5.6 <例>キー[HKLM\HARDWARE\DEVICEMAP\SERIALCOMM] 値名 \Device\Serial0 データ COM1 この場合は、「COM1」を取得したい <やった事>RegReadで簡単に取得できるだろうと思ったのですが、全然取れませんでした。 <回避策>reg.exeからはデータの取得が可能 Set objWSH = WScript.CreateObject("WScript.Shell") 'RegReadで取得失敗した例 'WScript.Echo objWSH.RegRead("HKLM\HARDWARE\DEVICEMAP\SERIALCOMM\\\Device\\Serial0") 'WScript.Echo objWSH.RegRead("HKLM\HARDWARE\DEVICEMAP\SERIALCOMM\\\Device\Serial0") 'WScript.Echo objWSH.RegRead("HKLM\HARDWARE\DEVICEMAP\SERIALCOMM\\Device\\Serial0") 'WScript.Echo objWSH.RegRead("HKLM\HARDWARE\DEVICEMAP\SERIALCOMM\\Device\Serial0") 'WScript.Echo objWSH.RegRead("HKLM\HARDWARE\DEVICEMAP\SERIALCOMM\Device\Serial0") '回避策 WScript.Echo objWSH.Exec("reg query HKLM\HARDWARE\DEVICEMAP\SERIALCOMM /v \Device\Serial0")
\は全部\\にしろ
自己解決能力低すぎ ぐぐればわかるだろうに
374 :
371 :2007/01/23(火) 02:26:27 ID:15EbuWWs
>>372 \でエスケープしてみたがダメだった。
値名が\以外なら、アッサリ取得できるのだが・・・
WScript.Echo objWSH.RegRead("HKLM\\HARDWARE\\DEVICEMAP\\SERIALCOMM\\\Device\\Serial0")
WScript.Echo objWSH.RegRead("HKLM\\HARDWARE\\DEVICEMAP\\SERIALCOMM\\Device\\Serial0")
>>373 すまん。ぐぐってもRegReadで取得する方法がわからかった。
WMIでならやれそうな気もするが、教えてくれまいか
ググれば解ることとはいえ、\のエスケープ方法はMSDNやダウンロード版ドキュメントのRegRead項目にに書いておくべきだよな。 でもRegReadでの\のエスケープを覚えておくより、WMIの扱いを覚えていた方が身になるぞ。 \のエスケープは「可能なこと」だが、WScript.Shellのレジストリ操作はそれ以外に「不可能なこと」が多すぎる。 「不可能なこと」に直面したときにあたふたするよりは、WScript.ShellのRegRead、RegWrite、RegDeleteで出来ることも 全てWMIでやるようにしておいた方が遙かにいいだろ。数年前だとWIMの情報は少なかったが今はあふれかえってるし。
376 :
373 :2007/01/23(火) 19:49:29 ID:4m7yBxl6
377 :
371 :2007/01/23(火) 21:37:04 ID:15EbuWWs
>>375 、
>>376 RegReadで\をエンコードする方法はあるんですね。
私はわからんかったので、
WMIのEnumKeysとEnumValueで実装し直しておきました。
レスサンクスでした。
378 :
名無し~3.EXE :2007/01/24(水) 01:03:32 ID:ww8gbHgn
だれか教えて下さい。 WSHでマウス移動の自動化って出来るんですか? キー送信の自動化とか出来るんですか? ディスプレイカラーの値を読み込む事って出来るんですか? プリントスクリーンみたいな画像保存って出来るんですか?
できる。 できる。 意味不明。 できる。
RegReadの代替、こんなのも Set Installer=CreateObject("WindowsInstaller.Installer") WScript.Echo Installer.RegistryValue(2,"HARDWARE\DEVICEMAP\SERIALCOMM","\Device\Serial0")
381 :
名無し~3.EXE :2007/01/24(水) 07:39:03 ID:7G/RPQuZ
ありがとうございます。 ディスプレイカラーの値を読み込む事って出来るんですか? →24ビットカラーのRGBの値です。
>>375 >でもRegReadでの\のエスケープを覚えておくより、WMIの扱いを覚えていた方が身になるぞ。
>\のエスケープは「可能なこと」だが
ほんと?聞いたことないな〜
var str=prompt("str1","str2"); の代わりになるものが欲しいのですが、何かいい方法はないですか?
どういう時に何が欲しいのかさっぱりだ
IEでは window.prompt が使えるけど WSH では使えないって 話じゃないか? VBScript だと InputBox 関数が使えるが、JScript だと 相当するメソッドはない。
そんなときはIEオブジェクト作ってprompt使う
wsfにしてvbscriptで関数書いたらだめ? <job id="main"> <script language="VBScript"> Function vbinput( mssg, defi ) vbinput = InputBox( mssg, WScript.ScriptName, defi ) End Function </script> <script language="JScript"> function prompt( msasg, defd ) { if ( !msasg ) msasg = ""; if ( !defd ) defd = ""; return vbinput( msasg, defd ); } </script> <script language="JScript">
htaでのjsでEnumeratorってつかえないの?
つかえとるがな。
スレ違いと思うが、Enumeratorが使えるかどうかは、 コレクション側の仕様。HTMLでは使えないコレクションが多い てぇことじゃないの。インデクス使え。
>>389-390 なるほど。
じつは、ファイル挙列したかったんだ。
インデックスつかえるのかー。ちょっとやってみる。
392 :
391 :2007/02/02(金) 19:26:54 ID:io3AcPQD
うーん。ファイル数はあってるんだけど。 なんでVBSのfor eachはできるのにjsはできないんだろう・・・。それとも、また勘違いなのか。。。 一応残骸をはってみるけど、あきらめたーー! function EnumFileName(path){ var Names = new Array(); var Fso = new ActiveXObject("Scripting.FileSystemObject"); var Fo = Fso.GetFolder(path); // alert(Fo.Files.Count); var i=0; for(var i=0;i<Fo.Files.Count;i++){ var Fi = Fo.Files[i]; Names.push(Fi.Name); } return Names; }
>>392 <html lang="ja"><head><meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>quote</title><script type="text/jscript"><!--
while (1){ try{ resizeTo( 0, 0 ); break; } catch(e){} }
//--></script><HTA:APPLICATION id="hta" border="none" /><script type="text/jscript"><!--
//配列とオブジェクトの宣言
var strCmdLine = hta.commandLine, strHTADir
if ( strCmdLine.indexOf('"') == 0 ) strHTADir = strCmdLine.match( /"(.+?)[^\\]+?"/ )[1];
else strHTADir = strCmdLine.replace( /[^\\]+?(?: .+)?$/, "" );
var objSFS = new ActiveXObject("Scripting.FileSystemObject");
var list = new Array();
var inFiles = objSFS.GetFolder(strHTADir).Files;
//こうするとコレクションのすべての要素に対する繰り返しができるらしい
var enumInFiles = new Enumerator(inFiles);
while ( !enumInFiles.atEnd() ) {
list.push( enumInFiles.item().Name );
enumInFiles.moveNext();
}
//まとめて出力
var dialogMessage = new String( inFiles.count );
for (i in list) dialogMessage += "\n" + list[i];
alert( dialogMessage );
close();
//--></script></head><body></body></html>
学習用にスクリプトと同じディレクトリ内のファイルを列挙するWSHを作ったのが残ってたのでHTAにしてみた。
参考になるか知らないが。whileのところはforでもおk。
>>392 (ちょっと、
>>393 とかぶるけど)
7行目の var i=0; は不要。
それに、JScriptではforステートメントの制御変数は宣言しないのが流儀。
for( i=0; i<Fo.Files.Count; i++ )でOK.
↓みたいな感じでやるといいよ〜
var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.GetFolder(path)
var fc = new Enumerator(f.files);
var names = new Array();
for (; !fc.atEnd(); fc.moveNext()){
names.push( fc.item() );
}
var f = fso.GetFolder(path); // →正 var f = fso.GetFolder(path) // →誤:文終了子がない ね。わざわざ訂正する必要もないと思うけど、一応。
i をグローバルで使うのってどこの流儀?
>>396 function test(){
for( i=0; i < 5; i++ ){
}
}
WScript.Echo( i );
試しに↑を走らせてみて。6行目の i は宣言されていないとエラーが出るはず。
つまり、for文の制御変数は宣言なしでも暗黙でローカル変数として扱われるということ。
もちろん、どうしても気持ち悪いなら for( var i=0; ……と書いても構わない。
398 :
392 :2007/02/02(金) 21:33:58 ID:io3AcPQD
>>393-395 おまえら!ほんとうにありがとう。できました!
後はエラーチェックとか必要に応じて追加すれば完了だ!!
で、以下のようになったよ。
function EnumFileName(path){
var Names = new Array();
var Fso = new ActiveXObject("Scripting.FileSystemObject");
var Fo = Fso.GetFolder(path);
var EnFiles = new Enumerator(Fo.Files);
// alert(Fo.Files.Count);
var i=0;
for(; ! EnFiles.atEnd();EnFiles.moveNext()){
Names.push(EnFiles.item().Name);
// alert(EnFiles.item().Name);
}
return Names;
}
Enumerator の作成を for の初期化節でやるのって少数派なんだろうか for (var e = new Enumerator(list); !e.atEnd(); e.moveNext()) {
省略が好きな人はやるんじゃない? 自分の場合はそのときの気分。
401 :
名無し~3.EXE :2007/02/02(金) 23:07:19 ID:KzBlSYpP
htmlをぶっこ抜く時に 1.CreateObject("MSXML2.XMLHTTP.4.0") 2.CreateObject("InternetExplorer.application") とかあると思うんだけど、君らならどっち使う。 それとそれぞれのメリット・デメリットあれば教えて下さい。
>>397 あまり知ったかはしない方がいいよ。ボロが出るから。
> つまり、for文の制御変数は宣言なしでも暗黙でローカル変数として扱われるということ。
実行コンテキストが違うからだろ。
悪いことは言わん、スコープチェーンの勉強でもして出直して来い。
ちなみに
>>398 の var i=0; はマジで余計だな。単なる消し忘れだろうけど。
いや、俺は俺で変なこと書いてるな。
>>397 の例で、最終行で i を参照出来ないのは
そもそも関数 test() を1度も呼び出していないからだよ。
試しに
function test(){
for( i=0; i < 5; i++ ){
}
}
test();
WScript.Echo( i );
でやって味噌。これでもエラー出る?
この時 i は立派にグローバル変数になっているよ。
スクリプト中のどこからでも参照出来る。
>>403 試しに
var i=100;
function test(){
for( var i=0; i < 5; i++ ){
}
}
test();
WScript.Echo( i );
でやってみた。うん、明らかにグローバルになってるね。一つ利口になった。ありがとう。
ってか、ドキュメント等で悉く宣言省略されてるから無意識にローカル変数になるものと思ってたよ。
なんか、自宣言省略できたり勝手に型変換されたりといったJScriptの仕様は、
逆に難解だよね。
>>404 「変数の宣言を明示的に行わなければグローバル変数になる」と覚えておけば
問題ないよ。
ややこしいのは for なんかのブロック内で宣言したとき。JavaScript では
変数のスコープはグローバルか関数内かの2つしかない。
(最新版では違うらしいけど。)
for(var i=0; ... みたいにブロック内で var を書いても、これは関数あるいは
スクリプトの先頭でvar したのと同じこと。
>ドキュメント等で悉く宣言省略されてるから
は、宣言したらブロック内スコープを持つものと開発者が勘違いしてバグるの
を心配してのことかも。
横着するには便利んだけどね。関数内で for ループ書くときに、いちいち
関数の先頭でカウンタ変数を宣言しないですむから。
letが使えんからな。
匿名関数の中から外部のローカル変数を参照してるクロージャとかもややこしい。
408 :
名無し~3.EXE :2007/02/04(日) 09:01:18 ID:pYYZVU6i
MSXML2.XMLHTTPで Open "GET", URL, True と非同期実行した場合、readyStateで通信状態を取得できますが、これをWinHttp.WinHttpRequestで 実行した場合、通信状態はどのようにして取得したら良いのでしょうか? 主要なメソッド、プロパティは共通のようですが、readyStateに該当するものが見つけられずに困ってます。 OSはWindowsXP SP1、WSHは5.6、WinHttp.WinHttpRequestは5.1です。
試してないしドキュメントにもどうなるのか書いてないけど、 WaitForResponse をタイムアウト 0 で呼び出してみるとか?
410 :
名無し~3.EXE :2007/02/04(日) 14:49:19 ID:/70Bq45h
>>410 2だと画像などの付属品もダウンロードしてしまう。
こんちわー。 htaで揮発性環境変数(PATH)の設定をするために以下のようにコードを書きました。 ネットを回って得たものなので根拠とかが欠落してます。@@; それで、ですね。 tagに環境変数名をいれてParhに場所を記述したものをOSに登録したいのですが、下のコードではうまくいきませんでした。 どのように書けばうまくいきそうですか? function AddSystemPath(tag,path){ //var WshShell = WScript.CreateObject("WScript.Shell"); var WshShell = new ActiveXObject("WScript.Shell"); var WshEnv = WshShell.Environment("VOLATILE"); if( tag.toUpperCase() == "PATH" ){ WshEnv.Item(tag) = WshShell.ExpandEnvironmentStrings("%Path%") + ";" + path; }else{ WshEnv.Item(tag) = path; } } これができたら次のステップにいけるんですー。 作ってるのは簡易版GUI似非Makeです。
>>411 1.だとhtml以外は取得しないということですね。ありがとうございます
>>412 よくわからんが、
pathに登録したいならレジストリ直接弄ればよいんじゃね?
>>414 うわ。それは勘弁してください。
"VOLATILE"指定すれば、遺恨も残らないということらしいので、便利だなーとおもったんですけど。
うーん、前途多難ですねぇ。基本機能はほぼできててあとこれだけなんですよ。
まぁ、いいや。またきます。
おやすみなさいー。
勘弁も何も一番簡単だろ。
揮発性の意味・意義をわかってない奴がいるな
揮発性環境変数も保持される場所はレジストリであることを知らないのかな?
HKEY_CURRENT_USER\Volatile Environment
function AddSystemPath(tag,path){ var WshShell = new ActiveXObject("WScript.Shell"); var WshEnv = WshShell.Environment("VOLATILE"); WshEnv.Item(tag) += ";" + path } いろいろやってみたけどこれで十分じゃね?
>416-421
皆さんありがとう!
えっと、VOLATILEでもレジストリに登録されるのは知りませんでした。
>>420 をやってみたところ、
>>419 の場所に登録はされてるんですけど、
>>421 にあるように、登録したHTAには反映されてないのかもしれません。
Terapadで書いてはメニューから起動って感じにやってるんですけど・・・。
あ!ってちょっと実験・・・。うげ!できた。
……なんか、起動もと(Terapad)のPath設定を受け継いでたみたいです。。。
エディタ再起動したらうまくいきました。なんてこった。
結局
>>421 の"すでに動いてるプロセスに反映させたいと思ってるからとか"の部分でした。
お騒がせしました。
・・・しかし、これはちょっと不便だなー。
普通に bat に書き出して実行した方が早いんじゃないかな・・・
424 :
422 :2007/02/05(月) 21:50:23 ID:vT9R2Dhh
結局それがベターなのかなー。 車輪を知るには車輪を再発明するのが一番!とかわけのわからんことをのこしつつ、 そっちの方向を模索してみますー。スクリプトいじりすぎて動かなくなったことだし。。。@@; さて、皆さんどうもありがとう。;D
425 :
422 :2007/02/05(月) 22:45:24 ID:vT9R2Dhh
426 :
名無し~3.EXE :2007/02/07(水) 16:45:15 ID:AYyF197a
xmlhttpでsetRequestHeaderでIf-Modified-Since付けてsendすると何十分経っても応答こないサイトがあるんだけど、なんで?
URL プリーズ
ダウンローダ対策かな
「Volatile」(「揮発性の」という意味)は、現在のログオン・セッションのみに適用さ れる。名前が示すとおり、Volatile環境変数は一時的に使われるもので、ログオ ン中のユーザーがログオフしたり、コンピュータを再起動したりすると、変更した内 容は変更前の内容に戻る。
で?
>>430 「Process」は、現在のプロセスにのみ適用される環境変数である。Process環境変数は、
コマンド・プロンプトが終了するなど、現在のプロセスが終了すると、変更内容が元に戻る。
変数 System User Volatile Process
NUMBER_OF_PROCESSORS ○ × × ○
PROCESSOR_ARCHITECTURE ○ × × ○
PROCESSOR_IDENTIFIER ○ × × ○
PROCESSOR_LEVEL ○ × × ○
PROCESSOR_REVISION ○ × × ○
OS ○ × × ○
COMSPEC ○ × × ○
HOMEDRIVE × × ○ ○
HOMEPATH × × ○ ○
PATH ○ × × ○
PATHEXT ○ × × ○
PROMPT × × × ○
SYSTEMDRIVE × × × ○
SYSTEMROOT × × × ○
WINDIR ○ × × ○
TEMP × ○ × ○
TMP × ○ × ○
環境変数の種類と利用できる変数(○=利用可、×=利用不可)
で?
コピペばかりで何が言いたいやら。
おいらみたいなスクリプトをちょっといじるだけの人間には逆にありがたいが・・
検索してもちゃんとわかりやすく解説してるサイトとかなんか見かけないし(;´д`)
WSHのドキュメントには
>>431 みたいなこれが使える使えないの表とよく分からんコメントがちょろっとしかないし
おせーてください。 var A = new Date(); ってやると DateオブジェクトのインスタンスへのポインタがAに格納されるのかなと 思ってるんです。 だからもう一回 A = new Date(); をやると 新しいDateオブジェクトのポインタがAに入りますよね。 ということは1回目のDateオブジェクトの確保されたメモリの開放は されてないんじゃないの?と思ったわけです。 メモリの開放はする必要はないのでしょうか? そもそも認識誤り? ループで数万回newを実行するのが怖い・・。
>>435 そんな入り口じゃなくてSystemとUserとVolatileとProcessの違いを書いてるところを直接貼れですぅ
それかおまいがさっさとSystemとUserとVolatileとProcessの違いを「素人に毛が生えた程度のヤツにも」「わかりやすく」教えやがれですぅ
>>437 やってるんですよ、でリソースエラーで落ちてるんで
コードを見直しすと
もしかしてこのせいではと思ってるんです。
MSのサイトみてもdestroyメソッドなんてないし・・・
>>438 ググルこともできない奴は、「 あ き ら め れ 」
>>436 参照が外れた時点で自動的に解放されるので大丈夫。
while (true) {
var A = new Date();
}
とか実行してみればわかるけど、メモリ使用量は増えずに一定。
ただし、
var A = [], i = 0;
while (true) {
A[i++] = new Date();
}
とかやったら、いつまで経ってもオブジェクトは解放されず、
メモリ使用量はガンガン増える。
>>436 GCは自動
強制的にnull代入したり、deleteする必要があるのはまれ
なんでここで GC の話がでてくるんだろうか...。
>>439 HTAでかけるならHTAで書いてみてみ。
実行速度云々のダイアログが出るなら何か間違ってるから。
445 :
436 :2007/02/12(月) 08:05:03 ID:731Di+ID
いやー、皆様ありがとうございます。 441さんのやり方でテストもしてみて確かに増えないですよね。 参照がはずれると自動開放ということで安心しました。 ということは、他の部分で落ちているということですので 444さんの教えどおりHTAで書いて試してみます。 助かります!
>>443 参照されていないオブジェクトのメモリを回収するのは
GCのお仕事だからだよ。
GC を任天堂のゲーム機だと思ってしまった、とか
がべぃじこれくたー
WSH、得意なのはバッチ代わり? ちゃんとしたアプリは作れない? んなことなくてVBで作れるようなものはたいがい作れる? GAMEとかシューティングのようなものとか。
まあ止めといた方が良いだろう
ぶっちゃけ、これでGAMEとかRPGとか作れるのかなあと。
>>451 レスありがとう。更新しなくて書いたのですれ違いすいません
これってある意味無料だから、修得したら便利かなって。
GAMEが作れるなら、シューティングとかRPGが作れるなら、たいがいのものは
作れるだろうと思ったんですよ。
GAMEにかぎらず、ちょっと目立つようにJPGを重ねたり動かしたりとかいうのは
良くあるでしょうから。
やめといたほうがいいんですね 有り難う御座いました
>>450 jsやvbsなどのスクリプト言語でGUIツール使いたいならWSHではなくHTAの方がいいよ。
「GAMEとかシューティングのようなもの」というのがどの程度のものを想定してるのか知らないが
HTAならスキル次第でそこそこのGUIツールが作れる。WSHでもIEのインスタンス作ればどうにかなるけどね。
>>453 できるけどEXEのほうが高速かつ無難
玄人じゃないと高速なゲームを作るのは難しい
JavaScript製のブラウザゲームがどの程度、同内容のEXEのゲームと張り合えているのか考えるとよろし
VS すら無料の時代だぜ?
>>447 論点はそこじゃないだろ。
しょぼい知識を披露したかったのか? (w
ろっ、ろんてんはどこなの〜〜??
オレ論点 w
ガベージコレクションは自動。って書いてりゃ良かったのだろう。
>>441 と本筋は同じだすね。がべーじこれくたーってのを説明にまじぇただけで
> 関数 メソッドですた。
なんかJavaScriptでFPS作るデモがあったような気がするが
>>454 >>455 レスありがとう!
PDAのスマートフォンであるX01HTやシグマリ3やW-ZERO3で
動くWSH方式のNSBASICというのがあるんですよ。これがほとんどWSHと
文法も同じ。だからWSHを覚えようかなあと。WindowsCE上でも開発できるし。
GAMEを作るにしても作るレベルは、昔MSXで作っていたレベルです。出来れば
当時は線画で3DRPGやシューティングを作っていましたが、これをRPGなら面画で3D表示
できればいいなあと。
市販するとかシェアウエアレベルのものなんて求めていないですから、
当時のBASICなみに気軽にサンデープログラミング出来るのかなあとWSHが。
その程度のものなら出来るというのであれば、WSHアマサンデープログラマーの仲間入り
したいんですが。長々とすいません。
ぐぐってみたんですが、WSHの入門サイトは引っかかったんですが 作った作品のスクリーンショットを公開してるサイトがめっからなくて。 だからWSHがどのくらいの目安を持っているのか、分からなかったんですよ
そりゃWSHのGUIってメッセージボックス程度しかないから スクリーンショットを公開してるとこはないだろうね。
メッセージボックスで何か作れる?
「はい」の時に[いいえ]ボタンを、「いいえ」の時に[はい]ボタンを押す、 メッセージボックスによる反射神経ゲーム。 var max = 10; // 回数。 var objWSHShell = WScript.CreateObject("WScript.Shell"); var arr = new Array("はい", "いいえ"); var answer, rnd, i; var time = (new Date()).getTime(); for (i = 0; i < max; i++) { rnd = (Math.random() + "").substr(2, 1) % 2; answer = objWSHShell.PopUp(arr[rnd], 0, "[ はい / いいえ ] 反射神経測定", 36); if (rnd + answer != 7) break; // お手付きにつきゲーム終了。 } if (i == max) { // 全問正解。 WScript.Echo("全問正解!\n\n掛かった時間: " + ((new Date()).getTime() - time) / 1000 + "秒"); } else { // お手付き。 WScript.Echo("お手付き!\n\n成功回数: " + i); }
470 :
名無し~3.EXE :2007/02/13(火) 20:28:04 ID:OHI0QKKv
なにげに良展開あげ
「3 < 7-5」みたいな式が正しいかを答える var max = 5; var WshShell = WScript.CreateObject("WScript.Shell"); var getX = [function () {return String(Math.floor(Math.random()*9)+1);}, function () {return this[0]()+(Math.floor(Math.random()*2) ? " + " : " - ")+this[0]();}]; do { var time = new Date().getTime(); for (i=0; i<max; i++) { var question = getX[Number(i>3)]()+" < "+getX[Number(i>1)](); var answer = WshShell.PopUp("この式は正しい?\n\n"+question, 0, "不等式", 36); if (answer == 7 == eval(question)) break; } } while (WshShell.PopUp("( "+i+" / "+max+" ) "+(i == max ? "全問正解!" : "お手付き!") +"\n経過時間: "+((new Date().getTime()-time)/1000)+"\n\nまだ続ける?", 0, "Result", 36) == 6);
ダブルクォーテーションを文字としてコマンドライン引数に渡し、 "ARG ARG" となることを期待して cscript example.vbs "\"ARG ARG\"" と実行したのですが、 WScript.Arguments(0)が勝手にダブルクォーテーションを削除しているのか、 ARG ARG としてしか受け取れません。 もうよくわからず、 cscript example.vbs "\"\"ARG ARG\"\"" などとして二重にしてみたりしたのですが当然だめでした。 ものすごく初歩的なことな気がするのですが、検索しても解決できません…。 どなたかお教えいただけないでしょうか。
^
>>473 おお、素早い返事ありがとうございます。
最初はキャレットでエスケープしたのですがだめでした。
また、結果の表示を間違えて書いてしまいました。
詳しく状況を説明すると、
WScript.Echo WScript.Argument(0)
WScript.Quit()
という、example.vbsを作成し、コマンドラインから
cscript example.vbs "\"ARG ARG\""
を実行すると「\ARG」と表示されます。
また、この円マークをキャレットに変更すると「^ARG」と表示されます。
単純にダブルクォーテーションが削除されて、空白で区切られてしまっているように見えます。
プレフィックスエスケープではなくエンコードエスケープすれば良いのでは? 可逆で有ればなんでも良いわけだが、全体変換ではなく部分変換なら実態参照がいいかも。単純にやるなら 実行:cscript example.vbs ""ARG ARG"" 変換:WScript.Echo Replace(WScript.Arguments(0), """, """") 更に"を&"でエスケープ出来るようにするなら、組み込み関数のReplaceではなく 正規表現で「s/(?<!&)"/"/g」だな。但しVBScript.RegExpでは後読み「(?<!…)」が使えないので VBScript.RegExpでやるとすれば「s/(^|[^&])"/$1"/g」って感じかな。 引数の中に'が使われないとするなら 実行:cscript example.vbs "''ARG ARG''" 変換:WScript.Echo Replace(WScript.Arguments(0), "''", """") でもいいし。 ただ、WshShellのRunなどで使うだけなら、普通に"ARG ARG"を渡して、 スペースが含まれてたら""で囲う処理を用意した方が良いと思うけど。
>>475 おおなるほど、別の文字を変換するのですか。
ついダブルクォーテーションを渡すことばかり考えてしまいました。
実体参照では見通しが悪りそうなので、
シングルクォーテーションを重ねる方法を頂きたいと思います。
単純なショートカットを作成するスクリプトを作りたかったのですが、
ショートカット先へ渡すコマンドライン引数にスペースが含まれることがあるので、
それをダブルクォーテーションで囲みたかったため、この文字をそのまま出力する必要がありました。
おかげさまでなんとかなりそうです。
どうもありがとうございました。助かりました。
>>463 JavaScriptでウィンドウズGUIを再現してるのを見たことはあるな。
まあよっぽどJavaScriptでやるメリットが無い限りはわざわざ選ぶモノでもないけど
質問です。VBSで標準出力に文字列を出力したいのですが、 WScript.StdOut.Write "hoge" で「ハンドルが無効です」とエラーが出ます。 また WScript.Echo も標準出力にならず、ウィンドウに文字列が表示されます どうすれば標準出力に出力できるのでしょうか?
>478 wscript.exeではなくcscript.exeでvbsファイルを実行する。
480 :
478 :2007/02/19(月) 03:55:55 ID:2jm0n8Yc
>>479 上手くいきました。
どうもありがとうございます。
482 :
名無し~3.EXE :2007/02/23(金) 11:26:09 ID:GFWOF5op
IPアドレスやホスト名リストを読み込んで、nslookupを実行し その結果を表示させながら、ファイルに書き出すようにしたいのですが まったく検討がつかないので方法をお教えください。
>>482 nslookupというものを知ってるなら、あとはWSHのヘルプ(Windows Script 5.6 ドキュメント)を読めば解ることです。
ヘルプ読んでも解らないと言うなら、日本語を理解できないと言うことだからここで日本語の説明をしても無駄だろうし、
コード書いてくれなんてのはスレ違いなので、あとは自分で頑張りましょう。
>>483 日本語が理解できない場合はそのレスも理解できないわけだが
>>482 プログラム書けないやつが本も何も読まず、wshを使えばできると
聞きかじり、2chで人に書いてもらおうなんてあさましいな・・
サイテー
487 :
名無し~3.EXE :2007/02/24(土) 21:44:51 ID:M2W6NVuE
#のコメントで後書きする人って何なの
煽るだけの奴とか言うけど、 例え質問に答えてもフレームを混ぜる奴は同類です。
スラドなんかよりもはるかに古い文化ですけど
おもしろおかしい
/. はたまにのぞくけど、独自の文化(オフトピなのでACとか)が育ってて 2chやってると違和感があるんだよなー # オフトピなのでAC
しかし何故コメントが # 開始なんだろう? WSH と言うとやはりメインは VBS か JScript。 ' か // が基本だと思うのだが。PerlScript もあるけどさ。
/*
>>496 以降のレスは全てコメントアウトされる。ざまぁカンカンw
*/ 再開↓
ワラタ
こういう流れになると絶対過疎るなw
502 :
名無し~3.EXE :2007/03/05(月) 22:13:49 ID:pkRZSKvF
以下のダイアログで 自動的に送信しない を選びたいのですが、どうすればいいのでしょうか? ------------------------------- 問題が発生したため、**を終了します。ご不便をおかけして申し訳ありません。 この問題をMicrosoftに報告してください
俺ならダイアログを出ないようにするな。
JavaScriptスレにて、 40 :Name_Not_Found :sage :2007/03/06(火) 18:53:49 ID:??? 指定したURLからhtmlソースを取得して、 その中から指定した文字列を含むlength個の文字列を抽出し 取得順に配列str[i]に格納しWScript.Echoで出力するプログラムを 今日中に作らないと卒業できなくなるんですが 友達いないボクには無理です神様タスケテクダサイ というのが来たから誘導しましたwwwよろしくwww
知るかボケ
そんなんで卒業できるなんてどこの中学だよ
>>506 卒業できなくなるとは書いているが、卒業できるとは書いていない。
つまり必要条件であって十分条件ではないと
509 :
名無し~3.EXE :2007/03/07(水) 01:24:08 ID:Dw1HeTg9
今ieで見ているページを、そのアドレスをfirefoxに送って別に起動するようなieのブックマークレットを誰か作ってください。 自分で考えるのが億劫になりました。 あ゙ーー、もちろん普段はieのスクリプトは切ってます。よろです。
そんな事がブックマークレットでできたら、とっくにウィルス漬けです。
511 :
名無し~3.EXE :2007/03/07(水) 02:07:24 ID:Dw1HeTg9
えーできねの。 じゃ、ツールボタンで。
513 :
名無し~3.EXE :2007/03/07(水) 03:06:44 ID:Dw1HeTg9
コンテキストメニューかツールバー経由しかない。 しかし、これ以上入れる場所の余裕が無いんぜ。
初めまして 以下のことはWSHで出来るでしょうか? とある固定ディレクトリにあるファイルを選ぶダイアログを出す このときに、相手先(テキストファイルから読み出す)とコメント入力をする 選択されたファイルをLHAに渡し、圧縮作業が行われ 任意のルールで圧縮名をつけて、いつも決まったところに入れる 決まったところに入った圧縮ファイルは、先ほど決めた 相手先にいつも決まったテンプレートとコメントをつけて 添付ファイルとして送り出す。 出来るか出来ないか教えてくださいまし。お時間をくださいませ よろしくお願いします。こういうのはWSHのはんちゅうを超えているでしょうか?
>とある固定ディレクトリにあるファイルを選ぶダイアログを出す これがファイル選択ダイアログならこの時点で無理。
「WSHのはんちゅう」が スクリプトエンジン: VBScript v5.5 / JScript v5.5 スクリプトランライム: Scripting.Dictionary / Scripting.FileSystemObject Windows Script Host 標準オブジェクト各種 だけなら無理っぽい。 外部プログラムやcomをガンガン使っていいなら話は別だが。
>>517 ええ、ファイル選択ダイアログのつもりでした。仕事は建築でして
選択されたDXFファイルを自動的にルールに従い圧縮ファイルにして
それをOUTLOOKを起動して、添付ファイルとして、最初に指定した相手に送る直前まで
やりたかったんですよ。送信ボタンを押すのみのところぐらいまで。
ちゅうのは、うちの会社、けっこう年寄りの建築業者(60歳前後が最も多い)が多く、CADは覚えたけどWindowsは
とてもじゃないが覚えきれない人が多数いまして。手順をメモに残しても恐ろしいようです。
毎回DXFアウトからあとよろしくと呼ばれて自分の仕事が止まるのでこの辺なんとかならないかなあと。
>>518 レスありがとうございます。コレガできるならWSHに手をつけようかな
と思っていましたが、ちと残念です。自分的にはWSHってのはマクロスクリプト感覚でしたので
できそうかな?と思っていましたが。
社内で外部から派遣されてる人のPCにはCADしか入れられなくて。この間ようやくLHAとDWというファイラーが
入れるように出来たんですよね。
しかも目の前でこんな動きが出来るんですよと説明して許可書を取ってようやく。
今回のこれはCADに必要だということで作ったなら入れてもいいとようやく許可をもらったんですよ。
自分の仕事に差し支えるからと言ったら通りやすくなったみたいですが
長々と書いてすいません
HTAなら頑張ればできるかもしれない。
OUTLOOKは入ってるXPマシンです。 めちゃくちゃ久しぶりにVB5を取り出すかあ(;´Д`) 6年ぶりぐらい? まずVB5がXPで動くかっちゅうところから調べないと。 正直言いますとWSHは、インタプリンタ型のVBなのかもなあと 思っていました。
インタプリンタw
> めちゃくちゃ久しぶりにVB5を取り出すかあ なんでここでVB5が出てくるの? ソフトを勝手に入れられないんじゃ、VB5を引っ張り出しても意味無いし VB5で作ったアプリを入れられるなら、ActiveXコンポーネントを入れることで WSHでも解決できる問題でしょ。
outlookが入っているならVBAでできるだろうに。 なくても標準的に入ってるCDO.Message使ってできるんじゃないの。
526 :
名無し~3.EXE :2007/03/15(木) 23:19:34 ID:A7maWzfR
OutlookかOutlook Expressであるフォルダのメール全てに保存されている添付 ファイルを一気にどこかに保存するスクリプトって書けますか?
Y岡か。懐かしいな。今頃どこでどうしてるやら。
たしかExpressは無理だったような気が。
530 :
名無し~3.EXE :2007/03/20(火) 01:22:03 ID:b9ZVd0cO
ADOのStreamを使って ふつーのファイルを開こうと思ったんですが オブジェクト作ってOpenしてなんとかfileloadして さあRead(1)ってやったら (バイナリファイルを読みたいの) 「お前に食わせる担麺は許可がありません」 とか(文面はうろおぼえ)言ってエラーになったなdけど なんでですかね? Widows2kSP4, 普通のテキストファイルの読み出しのやつは うまくいってます
お前に食わせるタンメンがないんじゃないですかね
532 :
名無し~3.EXE :2007/03/23(金) 18:16:44 ID:+CYmGPKo
携帯から失礼します。 wshのプロ達に質問があります。 vbsでPOSTかGETを使って、文字列をWEBサーバに送信したいのですが、どうやれば良いのでしょうか?
>>532 Microsoft.XMLHTTP とか MSXML2.XMLHTTP とか使えばいいよ。
使い方はここのログでも何度も出てきてるし、ググれば解説もサンプルもいっぱい転がってるから自分で調べよう。
534 :
名無し~3.EXE :2007/03/23(金) 22:47:00 ID:cFMNGSpo
>>535 ありがとうございます。
入力はそういうやり方もあるのですね。
その後のOKボタンを押す方法はないのでしょうか?
537 :
名無し~3.EXE :2007/03/23(金) 23:22:55 ID:oZiRW3es
WshNetworkについて教えてください。 現在、webサーバーのJscriptを使用して、 クライアントのコンピュータ名を取得するプログラムがあります。 そのプログラム自体は、下記のとおりとなります。 エラーは2行目でおきているようです。 var WshNetwork; WshNetwork = new AcriveXObject("Wscript.Network"); Com_Name = WshNetwork.ComputerName; 実は、クライアントの権限が今までドメインのadministratorであったものを、 ドメインのDomain Userとしました。 そのDomain Userには、クライアントのadministrator権限を追加してあります。 多分、ActiveXかWshのcomが読めなくなっているのではないかと思うのですが、 どこを調査していいのかわかりません。 使用しているwebサーバーはWindows 2000server、 クライアントはWindows 2000 sp3となります。 どんな小さなことでもいいですので、ご指導いただけないでしょうか? よろしくお願いします。
>>538 やったんですけど、OK押さないと進みません・・・。
PostMessage使えばいいのかもしれないのかな
すみません、SendKeys使うことで解決しました。
CreateObject("Shell.Application").NameSpace("D:\").Items.Item.InvokeVerb "取り出し(&J)" Win98 でこれを動かそうとすると「メモリが不足しています」とエラーが 出て上手く行きませんでした orz XPだと動いたのですけれども、Win98で このvbsを動かすのは難しいでしょうか?
>>537 エラー書けよ
>エラーは2行目でおきているようです。
3行目だろ?
546 :
名無し~3.EXE :2007/03/24(土) 18:58:49 ID:ZyDgRrWX
>>542 Items.item.やめて
NameSpace(17).Items().Item("D:\")つかえ
>>548 「その女が使っていたのはこんな言語じゃねえのか?」
そば売りがエディタをぺろりとなでると、とたんに問題のコードがJavaScriptに。
「うわっ!」
泡を食ったPGは何もかも放り投げて一目散に逃げていきました。
550 :
537 :2007/03/25(日) 11:13:07 ID:qiQp0b59
いや、エラーは2行目です。 行の前にメッセージボックスだすよういしたところ、 2行目の前のはでて3行目のはでませんでしたから。 エラーは「object error」とでます。
551 :
名無し~3.EXE :2007/03/25(日) 18:19:59 ID:Tz2Q6Jgg
エラーメッセージをちゃんと書けよ。
俺の環境だと、
>>537 を実行すると。
test.js(2, 1) Microsoft JScript 実行時エラー: 'AcriveXObject' は宣言されていません。
になるぞ。
て言うか、このメッセージ見て対応方法がわからんのなら、素直にあきらめろよ。
>>537 よ
Ac「r」iveXObjectになっとるがな(´・ω・`)
553 :
537 :2007/03/25(日) 19:19:34 ID:qiQp0b59
すいません。web系はほとんどわからずにこのプログラムいじらされてるんです… 他にどのような内容をかけばいいのでしょうか? エラーメッセージはtry catchでひろったExceptionの内容ぐらいしかわかりません。 あと、2行目は下記間違えておりました。 正しくは「WshNetwork = ActiveXObject("WScript.Network");」です。 ど素人の質問だということは重々承知しております。 なんとかお力をおかしねがえないでしょうか?
いじれと命令した奴に「すみません、僕にはできません」と言え。
555 :
537 :2007/03/25(日) 20:19:07 ID:qiQp0b59
もうその人はいないんです。>554 普通にadministrator権限なら使えるんで、文法ミスではないと思ってます。 どこかにあるwsh等にパスが通ってないか、 それにアクセス権限がついてないかだと思います。 ただ、それがどのファイルかフォルダかわからないんです… ちなみに、try catchは前からついてたのに、エラー表示するように修正しただけです。 htmlやjavaならまだわかるんですが、wshは全然使ったことないもんで。 ご不快はわかりますが、何らかのヒントはいただけないでしょうか?
> もうその人はいないんです。 だったらやらなきゃいいじゃん。 その人が居なくなったのに、やらなきゃならないってことなら 結局誰かに押しつけられてることなんだから、その誰かに言え。 実力以上のことをカッコ良くこなしてるフリをするためにここを使うな。 ということで不快だからヒントはあげない。 - 終了 -
単にIEのセキュリティ設定の問題だったりして、、、 そもそも単純なWScriptが動くのかどうかを確かめたら? WScriptってローカル(クライアント)のPCにインストールされてないと だめだからバスが同のって関係ないっしょ。
> try〜catch なんか (* 使わなきゃ *) いいのに...。
559 :
名無し~3.EXE :2007/03/25(日) 22:38:31 ID:RtcpckhP
切り捨てはfixだけど、切り上げって関数ないよな?
>>559 JScriptならMath.ceil()が切り上げだけどね。
取りあえず負の数にして Int して正の数にという手を思いついた でもまあ JScriptor には Math.ceil/floor があるからどうでもいいや
562 :
559 :2007/03/25(日) 23:13:50 ID:RtcpckhP
0.9足してintでいいみたいです。
すみません質問です。 Set fso = CreateObject("Scripting.FileSystemObject") fso.CopyFile "C:\test\test.txt", "D:\test\" みたいな感じで単純にファイルをコピーするスクリプトなのですが C:\Program Files\NetTransport\username' NetTransport.database と言うファイルのコピーに失敗します(ファイル名に ' が含まれるとダメ) コピーさせる方法はありますでしょうか
>>562 いや良くないだろ。
Int(0.05 + 0.9) だと 0 になるぜ。
>>563 ふつーにできたけどなぁ。
単に読み込み禁止でロックされてただけじゃね?
>>564 レスどうもです
今やり直したら確かに普通に成功しました
仰るとおりロックされてただけかもしれません
スレ汚し失礼しました
>>564 扱う数値が少数第一位精度なら問題ないよ。
きっと
>>559 が扱うのは少数第一位精度なんだろう。
全ての条件で
>>562 のやり方が正しいとは言えないけど
頭ごなしにダメって言うのもどうかと。
あと付けで条件つけてどうのこうの言うやつって...。
どうしようもないよね。 先に詳しい条件書かなかった559も559だが その条件が解ってる559自身が、その条件に合う方法を見つけられたのに 後からこういう条件ではダメだのなんだの言っても仕方なかろうに。
>>566 そういうのは後々他のスクリプトに流用してバグの温床になったりするからなぁ・・・。
570 :
537 :2007/03/26(月) 06:38:05 ID:vTpT+SIA
やらなきゃいいんならやらないし、出来ないって上司にはちゃんといってる。 でも、仕事だからそのままにはできないんだよ。 別に実力以上のことやってかっこつけたいと思わないし、 出来ないならできないままにしときたいよ。 WSHのこと質問できるところには全部質問してるんだよ… ちょっときいてみたいんだが、仕事で「出来ない」っていえる環境って、 どこら辺りにあるんだ?そのままにできるところにいきたいよ…
>>570 お前は「空を飛べ」と言われたらどうする?
また2chに「教えてください」と書き込むのか?
空を飛べと言われたら、空を飛ぶに決まってるじゃないか!
>>570 金出して外注に投げるという手もあるぞ。
ハ_ハ ハ_ハ (^( ゚∀゚)^) ('(゚∀゚∩ ) / ヽ 〈 (_ノ_ノ ヽヽ_)
>>569 関数としてライブラリ化したり、コメントも入れずに使い回したりすればの話ね
少数一桁限定じゃ使いどころは少ないだろうが、内部関数として流用する場合は
その限定条件をコメントとして書いておくだけでバグの温床になるのは防げる
「汎用的に使えるようにした方がいい」というのはもっともだが、そうしてない状態を
「間違い」「バグの温床」と決めつけるのは、それ自体が間違いだ
もっと柔軟になろう
確かに
- Sgn(number) * Int(-Abs(number))
>>553 >あと、2行目は下記間違えておりました。
>正しくは「WshNetwork = ActiveXObject("WScript.Network");」です。
それが間違い
切り上げには切り上げ桁って要素もあるからな。 例えば0.05を1ではなく0.1に切り上げるということもある。 又は0.05を10に切り上げることだってある。 これだってまだ切り上げの中でも更に十進桁切り上げの中だけの話だし。 有る程度条件が決まってるなら、決め打ち処理するのも悪くないよ。
>>570 なんでお前ができない ≡ そのままにしておく なんだ?
できる奴に代わってもらえばいいだけだろ。社内にいなければ、
>>573 の言うように外注に投げればいいだろ。
> 出来ないって上司にはちゃんといってる。
ホントか? 上司はそれに対してどう言ってるんだ?
>>579 そういうのは、10倍するなり、10で割るなりすればいいだけの話。
「扱う数値が少数第一位精度」等の入力データの条件はプログラマ
側ではどうしようもないケースも多いので、使えるケースはかなり
限られるよ。
┐(゚〜゚)┌
>>575 うん。それはわかる。
ただ、このスレで質問する人間がその辺考えてコメント入れるかといえばかなり疑問。
だから、なるべく汎用的な回答をするか、駄目な条件は出してやる方が親切かなと思う。
なんつーか・・・どうでもいいことのバランス感覚がバロスww
特定のフォルダやファイルを右クリックしたときに出るポップアップを スクリプトから表示させることって出来ないでしょうか?
PopupItemMenu()があるけど使えん SelectItem()してSendKeys "+{f10}"
ie.DocumentからHTMLテキストを得るのには
どれを使うのがいいんでしょうか?
ie.Document.parentElement.outerHtml
を使っていたんですが、最近これだと
ちゃんと取得できないページがある事に気づきました。
Set ie = CreateObject("InternetExplorer.Application")
ie.Navigate "
http://www.nicovideo.jp/ "
Do While ie.Busy Or ie.ReadyState <> 4
Loop
MsgBox ie.Document.body.parentElement.outerHtml
生のソースは普通には無理だったんじゃないかな XMLHTTP とか使った方が良い // IPersistFile::Save なんだが、IPersistFile は IUnknown だから……。
document.documentElement.outerHTML
URL="
http://www.nicovideo.jp/ "
Path="C:\hoge.html"
Set Application=CreateObject("Excel.Application")
RC=Application.ExecuteExcel4Macro("CALL(""urlmon"",""URLDownloadToFileA"",""JJCCJJ"",0,"""&URL&""","""&Path&""",0,0)")
MsgBox RC
はどうだろ?
>>589 >>590 >>591 みなさんどうもありがとうございました。
とりあえず上のURLだと
>document.documentElement.outerHTML
でできるようです。
ie.Document.all.tags("html")(0).outerHtml
という頭の悪い方法も考え出し、これでもできました。
590さんありがとうございました
>>589 完全な生はやっぱ無理ですよね・・・
>IPersistFile::Save
純粋なオートメーション以外は無理ですからね・・・
でもIPersistFile::Saveでもできるんですか?
今度使ってみようかな・・・
>>591 Excelは持ってないわけですが入手の暁には
試させていただきますm(_ _)m
IEで表示された画像のキャッシュ(ローカルパス)を取得する方法はないでしょうか?
> IEで表示された スレ違い。 実行ホストがWSH(Windows Script Host)ではなくIE(Internet Explorer)なので。 ここはVBScriptやJScriptのスレではなくWSHのスレだから。
>>594 WSHで起動したIEまたはすでに起動済みのIEから
強引に持ってくるという話だと思うよ。
スクリーンショットを取ってアドレスバーの画像を切り取り
表示されている文字を解析してURLを取得すればいいんじゃないか?
もしくはアドレスバーにカーソルをあわせて文字列をコピーし
クリップボードから取り出す
>>595 レスどうもです。
言葉足らずでしたが、URLを与えてキャッシュパスを取得する、という
方法を知りたかったのです。
>マルチ
こちらで答えて頂けなかったので別の掲示板で聞いたものです。
(日時を見ていただければ分かるかと。
IEでもWSHでも、使用しているスクリプトエンジンは同じですし、こちらで聞いても
問題ないかと思ったのです。
IEのオブジェクトモデルに関する質問ともとれるのでグレーだとも思っていました。
失礼致しました。
>>596 レスどうもでした。
上でレスしたとおり、言葉足らずでした。
失礼致しました。
こっちで聞くならあっちを断って来い
久々にオレ様がきましたよ〜
>>593 キャッシュをエクスプローラで開けばできるよ。
ie.Document(この場合のieはエクスプローラ)
からドキュメントオブジェクトを取得して中の要素を操作すればできる
>>594 おまいは勘違いし杉。
でもIEホストスクリプト(クライアントサイド)のスレが無い罠・・・
>>595 別にマルチでも目に余る失礼な態度でなければおkと思う。
つか返事が無ければ他にどうしようもない
NameSpace(32)では駄目なのか?
そもそもVBScriptうんぬんじゃなくてIEのAPIの話なんだろ?
キャッシュへのアクセスなんてDOMと関係ないし。
で、
>>594 もまあちょっとあれだが、スレ違いだと思ったわけだろ
InternetExplorerオブジェクトにはそういう機能はない、で終わりだ。
代替案とかいいけどまずそれを確認してからやってくれな
WSHで一意のテンポラリファイルを作るには どうすればいいのでしょうか? 万一の既存ファイルの破壊を避けたいのです
FSO使えばいいじゃん。GetTempNameで名前を得ても良いし FileExistsでファイルが無いことを確認して、有ったら連番でも付加して 再確認するようなループを作ってもいいし。
607 :
名無し~3.EXE :2007/04/15(日) 08:13:06 ID:/KjjB8H6
IEのリンク上の右クリックメニューからVBSにリンクを送ってあげたいのですが、 WSHでIEのリンクを習得してあげるにはどうすればいいのでしょうか? external.menuArguments.document.selection.createRange().text とすることで、選択されているドキュメントを習得することはできたのですが、リンクを習得する方法がわかりません。 よろしくお願いします。
今度こそ
>>594 だね。
external.menuArgumentsが使える時点で、間違いなくWSH実行ではなくIE実行だから。
とはいえ「external.menuArguments」でググった先見れば解決するけどね。
これでググって1件目のサイトは、俺もIEの拡張メニュースクリプトの勉強で利用させて貰った。
あとはサンプルとかも結構引っかかるので、暇があれば眺めるだけでも勉強になる。
>>608 スレ違いなうえ親切に教えていただきありがとうございました。
これから精進します!
私は Irvine のサンプルで学んだなー……。
>>608 だから該当スレが無い。
Web制作板はサーバーサイドしか無い。
近いのはム板のHTAスレと思うが、
あそこには質問に答える回答者は殆ど居ないし、
HTAとIEは違うと言えば違う。
わざわざスレ立てるのもどうかと思うので
ここでいいんじゃねか?
唯一心配なのは質問者がWSHなのかIEの話なのかを
完全省略して質問してきて話が全然合わなかった場合だけど
/////////////////Object.js Object.prototype.x = 2; ////////////////test.wsf <job> <script type="text/javascript" src="Object.js" /> <script type="text/javascript"> to ={}; WScript.Echo(to.x); </script> </job> 先生っ、これだと組み込みオブジェクトの拡張が出来ません。 でも、test.wsfのJScriptのコード部分を切り出して、 <script type="text/javascript" src="hoge.js" /> みたいにすると、上手く行きます。 この違いって何?
おーいえーなんてこったい自己解決。
wsfのタグでこけてたらしい。
駄目だったtest.wsfのコード部分が
<script language="javaScript" /> になってた。
<script type="text/javascript" />にしたら大丈夫だった。
だから
>>613 は大丈夫ですね。なんという落とし穴。
もっかいレス。languageで揃えても大丈夫でした。 てかwsfだとlanguageの方が正しい感じなんですね。
616 :
名無し~3.EXE :2007/04/17(火) 20:57:29 ID:khmIvrix
>>608 や
>>611 の意見を考えた上で
スクリプトファイルをについてどうしてもわからないことがあるので質問させてください。
IEの右クリックメニューに登録してURLを特定のソフトウェアに貼り付けるスクリプトを書いているのですが、
ウェイトをかけるところがどうがんばっても動いてくれません。
<SCRIPT LANGUAGE="VBScript">
<!--
Set 111= external.menuArguments.event
222= external.menuArguments.document.elementFromPoint(111.clientX, 111.clientY)
Set 333= CreateObject("WScript.Shell")
333.Run "Notepad"
WScript.Sleep 1000
333.SendKeys 222
-->
</SCRIPT>
これを.htmlで保存後、MenuextでURLを送っているのですが、
7行目の一文字目で「オブジェクトがありません:WShost」となってしまいます。
ウェイトをかけないとまともに動いてくれないのですが、
この場合どのようにウェイトをかけてあげればいいのでしょう?
どなたかお力を貸していただけませんでしょうか?
WSH実行でなければWScriptオブジェクトは無いので
WScript.〜は使えないし、WScriptオブジェクトが無いような状況はスレ違いだってば。
変わりにIEの機能でウェイトを置くことは出来る。WScript.Sleepほど直感的なものではないけどね。
Web制作やHTAで使われる手法だから、そっち系の解説サイト回って、それでも解らなかったら
そっち系のスレで聞け。「該当スレが無い」とか言ってる奴も居るが、そんなことは全然ないから。
>
>>608 や
>>611 の意見を考えた上で
とか言い訳しても、スレ違いの事実は変わらない。
「マルチ失礼しますが」とか前置きしても、マルチすれば叩かれるのと同じ。
>>617 わかりました。
ありがとうございます。
スクリプトごと気で威張ってる自称上級者って痛いよね。 自分はどうせコピペぐらいしかやってないくせに。
>>616 メニュー拡張で待つのは難しかったような
待たないでやる方法を模索したほうがいいんちゃうか
> 「該当スレが無い」とか言ってる奴も居るが、そんなことは全然ないから
ではどこのスレでそういう事を教えてくれるのか
具体的に教えていただけますかね?
誘導するのならちゃんと具体的に示すべきだと思いますが?
あと、マルチ叩きとか、WScriptが無いからスレ違いとか
くだらな杉。
ムダにレス消費するだけだからお前が答えたくなければ黙っとけ
つか
>>617 は本当にゴミレスだね。何の情報も無い
ちなみにこれもゴミレスです〜
623 :
名無し~3.EXE :2007/04/18(水) 03:57:31 ID:GjzdXx90
ちなみにこれもゴミレスです〜
書き込んだ奴そのものがゴミだからしょうがないね m9
WScript.もCOMオブジェクトなので それをIEなどに渡してやればWScript.Sleepなども使えるよ 面倒さを超えるメリットがないのでしないだけ
wscript.vbs --- set shell=createobject("shell.application") shell.windows().Item(0).putproperty "WScript",WScript MsgBox "Waiting...",,WScript.ScriptName --- hoge.hta --- <script language=vbscript> set wshell=createobject("wscript.shell") wshell.run "cscript wscript.vbs" do while not wshell.appactivate("wscript.vbs") wshell.run "ping localhost -n 1",0,true loop set shell=createobject("shell.application") set W=shell.windows().Item(0).getproperty("WScript") W.Echo "hoge" </script>
こいつ、バカだw
何ムキになってるの?
しかし何だかなこのスレは・・・
だからどう見ても
>>625 は
こんな事やるのはアホくさいからやらない、
と言ってると思うんだが・・・
多分知らなかった、という事なのだろうが あんまり悔し紛れに変な事言わない方がいいぞ? せっかくお前らの知らない事書いてくれてるのに・・・ つかこのスレもダメだな・・・
たとえばアプリを制御するのにちゃんと経路が用意されてるけど 面倒だから全部SendKeyで操作しちゃうとかよくやるだろ。 で、納品先で処理中にキー叩くバカがいたりして ロールバックかかって全データパァになって サービスセンターから夜中にたたき起こされて
>>633 いや、それは設計者が悪いだろ。
客は常に最悪の操作をする前提で設計しなけりゃ。
「処理中のキー操作については保証外」って議事録でも作ってあるならともかく。
>>634 大丈夫。その後の運用マニュアルには
「不要時はキーボード・マウスを取り外す」
という条項が追加されましたから!
さすがに転職を考えたよ
馬鹿は同じミスを何度もするからまた転職かな
素直にスクリプトしか書けない、って事白状しろよ。 VBやCなら普通にメッセージ送ればいいだろうさ。 あとまあ処理中はキーボードをロックしちまうとかな
別にそんなことわざわざいう必要も無いよ。 全部キーボード操作した、納品先の会社の新人のせいにしたから。
さすが能無し。言い訳と自己弁護だけは一人前。
>>639 お前少しきつ過ぎね?
>>638 いや
これの事言ったのよ
>たとえばアプリを制御するのにちゃんと経路が用意されてるけど
>面倒だから
と言ってるのが言い訳で
実はSendMessageを使った事がねーんだろーと
つか、それは納品先もアホすぎる。 俺なら要求仕様を満たしてないって言って納品書を突っぱねるが。
相手先にスクリプトキディ程度のスキル持ってるのが 一人もいないからじゃね?
おまいら良くそんな他人ごとに熱くなれるな
>>640 そ、そのくらい使ったことくらいあるわよ!
予算10万でやってって言われたから 手を抜いただけなんだからね
勘違いしないでよ!
どの位の規模はしらんが、 スクリプトで10万もとるのかよ・・・
ヘタに手を抜くと後でガチャガチャ言われてかえって面倒なんで どんなバカでも使えるようにしとくもんだけどな。普通。 ・・・まあVBSでなく最低VBが使えて、の話だが。
>>646 それやってると赤字になりかねんし。
でも相手の現場に責任かぶせると、次からやりにくくなるからお勧めしない。
基本は制限事項を議事録にとっとくことだね。
> それやってると赤字になりかねんし。 どんだけへたれの会社なんだよ。 て言うか、納品するんならもっとちゃんと見積もれよ。 自分の見積もり能力のなさを、赤字になるからって手抜きするなんて 最低の会社だな。
649 :
647 :2007/04/21(土) 12:10:15 ID:mN72ojZl
>>648 いや、俺は
>>633 ではないので・・・。
営業が既設品の流用とか、簡単でいいとかって条件で安くとってくることはある。
設計積めている段階で、安く作るとまずい条件が見つかることもよくある。
そういう場合は
「これこれこういう場合はまずいんで、そこは運用で回避してくださいね」
「それが駄目なら受注仕様書の変更になるので見積もりからやり直しますよ」
と提案すればだいたいは運用で回避してくれる。
明らかにこっちの落ち度なら、赤字でやるけどね。
受注仕様書は客のサイン貰ってるんだから、それの範囲外は金が出ないならやらない。
650 :
633 :2007/04/21(土) 13:12:06 ID:uI3/X9aK
>>649 そうそう!
安く請け負ったときは、ぜーんぶ運用で回避!
これが基本だよね〜。
自慢じゃないが、赤字でなんかやったことなんか無いよ
短期的にはそれでいいかも知らんが その内仕事来なくなるよ 特別なコネクションでもないと
>>651 そうならないために事前に仕様書だして、議事録とって、客のサイン貰うわけで。
(1次仕様書と2次仕様書で矛盾してるってのならこっちのミスだが)
自分がサインする書類くらい責任持ってくれないと困る。
「とにかく安く」連呼するだけでろくに書類読まない客は
どーせ赤字仕事しかよこさないので切れてもかまわない。
結果に不満、って言う客に お前がサインしたんだろが、って言うって事? 客満足度を言ってるのであって 契約トラブルの事言ってるのではないよ
保険屋か!
まあ、安ければよくてトラブルが以前に有っても他を検討する気配の無い アホな客ならそれでも良いだろうな。
>>653 だから、事前に「この値段で実現するとこういう結果になりますがいいですね?」って了承とる訳よ。
事前に了承とっておけばほとんどの客は納得してくれるよ。
どうしても納得できない客とはそこから改修方法について協議するよ。
相手もまともな社会人ならほとんどは追加コストが発生することは納得してくれる。
処理中にハードウェアの特定のボタン押すと不具合が出るってのは実際に経験あって、
そんときは警告マーク入りのアクリルカバーをボタンにかぶせるのと、
画面に警告表示を追加するのを数万円で受注して決着した。
最初は相手側の担当者も「滅多に押さないボタンだからいいよ」って言ってたのに
現場に持って行ったら初日にその問題が発生したもんで。
> 最初は相手側の担当者も「滅多に押さないボタンだからいいよ」って言ってたのに 要するに双方ともにろくろく検討してないってことだろ。 DQN どうし仲良くていいじゃないか。 だから、君には「数万円」の仕事しか任されないんだろうけどな。(w
いい加減スレ違いってことに気づけよ、おまえら。
>>657 相手の現場の細かいところなんてわからんもの。
だから判断を客先の担当者に投げておいたわけ。
あと、装置としては百数十万ね。
数万円なんて誤差範囲だからサービスしても良かったんだけど
発注側の都合による変更は少額でも有償で受けとかないと
「前回アレをサービスしてくれたんだから〜」とかってどんどん要求がエスカレートすることがあるから。
(もちろん、詳細設計前の仕様変更なら無償でやることもあるけど)
あー、と。 金額に関する判断は実際には営業を通すので、俺の見積もり通りには成らないこともよくある。 だから、上にかいたことは全部うちの会社としての方針。
> だから判断を客先の担当者に投げておいたわけ。 無能なSEの典型 そんな奴がいる会社ならそりゃ全体で百数十万の仕事しかこないわな。(w
>>661 現場の人間から聞き取りさせてもらえる窓口があればそっちからも確認とるけどー。
業種的に相手の担当者以外に直接連絡とれる窓口を用意してもらえないもんでー。
だから相手担当者経由での確認以外にこっちの確認はできませんー。
メッセでやってろ。
他所でやれ。
evmfqMJZが最初は >君には「数万円」の仕事しか って言ってたのに次には >全体で百数十万の仕事しかこないわな って言ってるのには何だろなこりゃ、って思った。 次は日本人がバカだから 日本全体で数十兆の仕事しかこないんだよな、 って言ったりして・・・
>>665 いや、そこはさすがに労働人口を基準に考えようよ。
>>662 だから「責任は全部お客さんの方です」ってか?
言い訳乙。
>>665 わかってない無能SEが何か発言しないといけないと思って
よくこう言う意味不明なこと言うよな。(w
>>667 >だから「責任は全部お客さんの方です」ってか?
そうだよ。仕事だからね。
自分で仕様を決められないお客さんなら、
間に商社なりコンサルなり通して発注すればいいわけで。
こっちは自分で仕様を把握してる客を前提に対応してるから。
まあまあ、そんなに自分の無能ぶりを自慢しなくても キミがオシコトできるのは判ったからさ
オナニーとセックスの話はヨソでやれ。
>>668 まあそこでおろおろする客にはうちでコンサル紹介するよ。
実体はオレなんだけど。
Set objWsh = CreateObject("WScript.Shell") Set objExec = objWsh.Exec("cmd /c dir c:\temp") Do While objExec.Status = 0 WScript.Sleep 100 Loop ... 上記のようなコードで、「c:\temp」フォルダにファイルを80個ほど置いておくと、 Status確認のループが無限ループに入ります。 閾値があるらしくて、それ以下では一瞬でループを抜け、それ以上ではまったく返ってこなくなり…… という感じ。
便秘にはこーラック
こうらくさんの座布団もっていきなさい。歌丸です
evmfqMJZ LWZyWhe/ お前しつこくね? つっこみが言い訳とか無能とかたいして面白くねーし もう少しなんつーか思わずつっこまれた相手自身が 笑うような事書けねーのかよ
空気読めない奴らが客を満足させるとか語るなよw
ひとつひとつは小さな案件だが、100集まればすぐ1億だ! はっはっは! 実際には半分の半分くらいしかこなせてないけどね〜 今年度も黒字だったので、ヨシだ。 納期が2年延びたのもあるけど、客のせいにした!
>>668 指摘されると開き直り。
流石アホSEだな。(w
>>672 標準出力のバッファは 4KB ぐらいしかないから、objExec.StdOut.ReadLine
とかで読み取ってやんないと駄目。
どんなことやりたいのかわからんけど、例えば下記のようにすれば全行表示できる。
Set objWsh = CreateObject("WScript.Shell")
Set objExec = objWsh.Exec("cmd /c dir c:\temp")
Do Until objExec.StdOut.AtEndOfStream
WScript.Sleep 100
WScript.StdOut.WriteLine objExec.StdOut.ReadLine
Loop
ただし vbs は、ストリームにデータが入っているかをチェックする方法がないから、
上記の方法でも標準エラー出力に 4KB 以上のデータを吐くプログラムだと、無限
ループになる。この、回避方法は俺は知らない。
>>675 > もう少しなんつーか思わずつっこまれた相手自身が笑うような事書けねーのかよ
つ 鏡
679 :
678 :2007/04/23(月) 00:43:30 ID:Bhk5cVuF
忘れてた、ちょっと訂正 × この、回避方法は俺は知らない。 ○ 標準出力もしくは標準エラー出力をファイルに吐き出す以外の回避方法を、俺は知らない。
Set objExec = objWsh.Exec("cmd /c dir c:\temp 2>&1")
どうも有難う勉強になったわ。 この話ここまで長く書けるのか・・・
682 :
名無し~3.EXE :2007/04/23(月) 14:23:16 ID:XYh3oPaX
wshってしろうとようかと思っていたが、プロも使うのか?
使える物はなんでも使うのがプロ
ふ〜ん
納品はしなくても、デバッグとかにあると便利。 ログデータの整理とか、ダミーデータ作るのとか。 頻度高いなら専用ソフト作るが。
親切な方、D&Dしたファイルを削除してくれるだけのスクリプトをいただけますでしょうか……。
実行しているscriptのファイル名は、WScript.ScriptFullName(or ScriptName)で取れるけど、 wsfの<script src="hoge.vbs"/>でインクルードされた側のファイル名って取れるのかな? 上の例で行くと、インクルードされてるhoge.vbsの中で"hoge.vbs"(もしくはフルパス)と言うファイル名を取りたい。 単純にhoge.vbs内でWScript.ScriptFullNameとやると、wsfからインクルードした場合は、 呼び出し元のwsfのファイル名が帰ってきちゃう。
>>686 CreateObject("Scripting.FileSystemObject").DeleteFile WScript.Arguments(0), True
1行でおk
689 :
686 :2007/04/24(火) 09:57:43 ID:uawi901y
>>688 シンプルで美しいスクリプトです、ありがとうございます!
>>688 応用して、
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objArgs = WScript.Arguments
For I = 0 to objArgs.Count - 1
objFSO.DeleteFile WScript.Arguments(I), True
Next
と書いたら複数ファイルに対応できました。ありがとうございます。
2行目いらなかったです。
改変して、 For I = 0 to WScript.Arguments.Count - 1 WScript.CreateObject("Scripting.FileSystemObject").DeleteFile WScript.Arguments(I), True Next としました。ありがとございます。
なんでわざわざVBSで書くんだよwwwいじわるだなwww
画像掲示板の自動巡回として使ってる wsh便利
ソースplz
diy
>>694 みんなそういうことはやってるだろうけど、そういうことは人に言わずにひっそりやるものだぞ。
「俺ってこんなことできるんだぞ」と自己主張したい年頃なのかも知れないがw
手段を問わなければ出来るよ
699 :
698 :2007/04/24(火) 15:38:09 ID:uFNbu+9H
専用ブラのジェーンのステータスバーの完了ってのを 取得したいのですがどうすればいいですか?
はぁ?
>>700 他プロセスのウィンドウのステータスバー内の文字列を取得したい。
と言っているんです?
703 :
700 :2007/04/24(火) 22:56:43 ID:6tTUt89Z
そうです。
では 「他プロセスのウィンドウのステータスバー内の文字列を取得できるCOM」 を使ってください。WSH本体(WScript.exe、cscript.exe)にはそういう機能は無いので。 COMを探すか作るかはお好きなように。探すことも作ることも出来ないなら君には無理ってことになるね。 因みにそれを取得したあと何をするかにも因るが、こういうことはAutoHotkeyの方が得意だよ。
>>704 このスレでは、WSH本体に無い機能について語ることはNGなのか?
というか、それ以前に、これ普通に出来るだろ。
ちょっとサンプル持ってくる。正座して待ってろ。
普通のEXEにして標準出力から受け取ればいいだけの話なのに わざわざオートメーションサーバー 作らなければならないと言い出す704は 当然COMが何なのかも知らないし普通のEXEも作れない知ったかのアホ
> 普通のEXEにして標準出力から受け取ればいいだけの話なのに ここ、笑うところ?
ファイルのdropで起動されたか、ファイルを指定されて起動されたか 区別する方法はないでしょうか?
>>705 足が大変なことになってますが、まだですか?
> 707 :名無し~3.EXE:2007/04/25(水) 13:33:11 ID:4evyIg1O > > 普通のEXEにして標準出力から受け取ればいいだけの話なのに > ここ、笑うところ? やっぱり意味わからなかったみたいねw
そうでもないか むしろ706のほうが解ってな(ry
「他プロセスのウィンドウのステータスバー内の文字列を標準出力」するexeを作って
それをwshから呼べば、stdoutから文字が取得できるってことじゃないの?
>>705 足が・・・
済まぬ・・・ 他の事はかなり出来るようになったのだが なぜかステータスバーだけ取得できぬ・・・ こうなったら画像処理か・・・いやアホだ・・・
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
○y-~~ < ステータスバーと一口にいっても、
|\ \ コモンコントロールのやつもあれば独自実装っぽいのもあるし
_| ̄|○ ̄| \ 子にtoolbarとかもってるやつもあるし、まあ一発で取るのは難しいよね。
↑ \____________________
>>713
Jane使ってないけど 画像処理するぐらいならメッセージでもフックしてみたら? たぶんメッセージでテキストやり取りしてるでしょ。
717 :
名無し~3.EXE :2007/04/27(金) 03:18:12 ID:LcwkbNjt
普通そういう場合正規表現を使うか、 InStr()で位置を調べMid()を使って分解する。
str.match(/[\d.]+/);
2 > Windows Script 5.6 ドキュメント ダウンロード (exe 形式; 1.67 MB)
>>720 基本的に
>>719 のでいけるはずだけど、
ポート番号も削るとすると、↓みたいな感じかな。
var aaa = "
http://111.111.111.111:8888/ "
var re = new RegExp("https?://(([0-9]{1,4}\.){3}[0-9]{1,4})[:0-9]*/","ig");
WScript.echo(aaa.replace(re, "$1"));
JScriptで悪い。
連投スマソ。慣れないがVBSでも書いてみた。
Dim regEx, aaa
aaa = "
http://111.111.111.111:8888/ "
Set regEx = New RegExp
regEx.Pattern = "https?://(([0-9]{1,3}\.){3}[0-9]{1,3})[:0-9]*/"
WScript.Echo regEx.Replace(aaa,"$1")
>>722 >>723 ご親切にありがとうございます。
ただこれでは、最後にスラッシュの無いURLですと、上手く置換できないのですが、
ある場合、無い場合に両方とも対応させるにはどうしたらよいのでしょうか?
>>724 regEx.Pattern = "https?://(([0-9]{1,3}\.){3}[0-9]{1,3})[:0-9]*/?"
>>725 即レスありがとうございます。
文字でしか感謝の気持ちを表せないことが非常に残念ですが、
このように親切に教えていただいたことを心より感謝します。
> 基本的に
>>719 のでいけるはずだけど、
> ポート番号も削るとすると、
719のでポート番号も削れるよ。数字と .の連続にマッチするので、
http://111.111.111.111:8888/の場合なら 8文字目の1から、最初に出てくる数字と .以外の文字である23文字目の:の前までが一つ目のマッチになるから。
あとはマッチ全体ではなく、一つ目のマッチ部分のみを参照すればいいだけだから。
きちんとやるなら↓ね。
△ "https?://(([0-9]{1,3}\.){3}[0-9]{1,3})[:0-9]*/?"
○ "https?://((?:\d{1,3}\.){3}\d{1,3})(?::\d{1,5})?/?"
なぜ
>>719 のを見てすぐに
完全な正答である事に気づかないのか
毎度毎度・・・
初心者が初心者に嘘を教えるスレ。
(727の事は言っていない)
もとい、正答(;´Д`) 正答なんだけど、IPじゃない数字の羅列にもマッチすると思ったわけ。
もうIP変わったと思って荒らそうとしたら 変わってなくて慌ててフォロー 何だかな・・・
>>731 いや、違うってw
つーか、ケーブルだからIPずっと同じなんだよ(´ω`;)
正規表現に話を戻すと、\dじゃなく[0-9]を使っているのは
>>719 をそのまま動かしてみてうまくいかないので、
JScriptでは\dが使えないと勘違いしたから。
よく考えると、\\dとエスケープすれば使えたわ。
>>732 >正規表現に話を戻すと、\dじゃなく[0-9]を使っているのは
>
>>719 をそのまま動かしてみてうまくいかないので、
>JScriptでは\dが使えないと勘違いしたから。
>よく考えると、\\dとエスケープすれば使えたわ。
???
>>719 はJScriptで、\dが使えてますが?
なぜか/../でなく"..."の話をしてるみたい。 荒らしてるのこの人?
置換がしたいっつってんのに
>>719 はマッチしてるだけだし。
>>732 ちなみに
>>722 の書き方だと"\."も"\\."にしとかないとね。
前者だと改行文字以外の任意の1文字にマッチするメタキャラクタになってしまう。
じゃあ
>>719 のコードでどんな不都合があるか指摘してみなよ
不要な部分を削るだけならreplaceする必要はなくってmatchで十分
あと指摘しておくと、
>>722 のコードは「完全な」間違いね
// var aaa = "
http://111.111.111.111:8888/ ";
var aaa = "
http://1234567890:8888/ ";
var re = new RegExp("https?://(([0-9]{1,4}\.){3}[0-9]{1,4})[:0-9]*/","ig");
WScript.echo(aaa.replace(re, "$1")); // 1234567890:8888
単なるドットのつもりで \. としてるけど、あれはメタ文字。
738 :
737 :2007/04/28(土) 20:33:17 ID:QKMYYFHO
ああかぶった・・・
>>735 最近荒らしてる人と勘違いした。ごめん
>>737 の前段はスルーして
>>735 >置換がしたいっつってんのに
>>719 はマッチしてるだけだし。
まだわかんないのかねぇ。。。
>>735 実際は置換ではなく部分抽出なので、抽出する部分にマッチさせるだけでOKなんだよ。
JScriptのmatchメソッドは結果を配列で返すから、インデックス与えるだけでお望みの結果が得られるし。
var str = '
http://111.111.111.111:8888/ ';
WScript.Echo(str.match(/[\d.]+/)[0]);
どちらかというと、(間違いではないけど)置換する必要ないのに置換メソッド使ってる
>>723 の方に突っ込むべきでしょ。
あそこは$1にReplaceするべきところではなく、Testした上でExecute(aaa)(0).SubMatches(0)を参照すべきところだ。
因みにPatternが"[\d.]+"なら、Execute(aaa)(0).Valueを参照。置換と抽出は使い分けられるようにならなくちゃね。
あと
>>735 はJScriptで
"abc";
のような記述の意味を理解してないみたい
関係ないけど個人的には JScriptの /abc/ のような記述は気に入らない。
誤答を取り消して正答って書いたまでは 間違いという事にしてやっても良かったが その後また719がマッチしてるだけとか、 別人を装って自分のレスに突っ込み入れる自演・・・ 大丈夫この人?
正直
>>717 の
> このようなURL文字列の
http://の部分とポート番号を削り 、IPのみに置換するスクリプトを作っています。
からどうして目的が「置換じゃなく抽出」となるのかが理解できんのだが
(もしかして
>>720 の「WScript.Echo bbb」からそう判断?)、
そうだとして、
>>719 の表現はいくら何でも乱暴過ぎて
(単独の"0"や"."も拾いまくる。ってかその前にgオプションが要るだろこれ)
少なくとも私にはこれを「完全な正答」と自信満々に言い切る
>>728 のほうが
ピント外れに思えるんだが。
matchメソッドでの戻り値の配列から抽出するならせめて
(JScriptの正規表現で肯定後読みができるとの前提で)
str.match(/(?<=https?:\/\/)(?:\d{1,3}\.){3}\d{1,3}(?=(?::\d{1,5})?\/?)/g);
とすべきでは?「完全な正答」と言い切るならね。
# 悲しいかな、JScriptの正規表現は肯定/否定後読みをサポートしていない。
あああああああ
もしかして今検索対象文字列は「URLそのもの」なのか?
だとしたらなるほど
>>719 は「完全な正答」だ。すまん。
俺は勝手に検索対象として一般的な文字列を仮定していた。
ん?何なに?
もしかして俺
>>730 と勘違いされてるわけ?
証明する手段はないけど、違うとだけは言っておこう。
どうでもいいけど。
質問した人ですが、もはや何がどう進んでいるのか理解の範囲を超えました。 お願い!私のために争わ(ry とりあえずhttpから始まるアドレスを送ると変換するスクリプトとして wwww = WScript.Arguments.Item(0) Set dddd = New RegExp dddd.Pattern = "https?://((?:\d{1,3}\.){3}\d{1,3})(?::\d{1,5})?/?" WScript.Echo dddd.Replace(wwww,"$1") 本来なら別のアプリケーションに送る作業をしていますが、 こんな感じで書いてあるのですが間違っていませんよね? ちなみに置換する文字列はURLそのものではないでしょうか? IPのみが送られることもありますが、その場合は置換する必要がありません。
明らかに別人でしょ ああいうのは放っおいていいから
749 :
748 :2007/04/28(土) 23:45:04 ID:LcYBLA0G
>>728 >初心者が初心者に嘘を教えるスレ。
初心者が自問に自答して自分に感謝と突っ込みを入れるスレ。 みたい
他のScript関係のスレの荒らしにウンザリして 逃げてきたんだけど ダメだこりゃ
漏れは710なんだけど 711がID違うのも平気で 勝手にレス継続してるの見て ああ、ここにもいたのか、こういう手合 と思った。 しかし荒らすのはまあいいとして(笑) 初心者過ぎるのはどうにかしろ。 一人だけ余りに初心者過ぎて誰が書いてるかバレバレ
>一人だけ余りに初心者過ぎて誰が書いてるかバレバレ 試しに直近50件からその「バレバレな一人」のレス全部挙げてみてくれ
たとえば、こんな荒れる質問をしてしまった俺とか。 ブツは無事に完成してるんですよ?
まぁ君は何も悪くないから気にするな。
引き続き
>>753 の回答を待つとしますか。
なにしろ
>一人だけ余りに初心者過ぎて誰が書いてるかバレバレ
というくらいなのだから
どうってことない実に簡単な作業だろうし。
しかし
>他のScript関係のスレの荒らしにウンザリして
>逃げてきたんだけど
なんて言っているわりには、次の投稿で
>初心者過ぎるのはどうにかしろ。
>一人だけ余りに初心者過ぎて誰が書いてるかバレバレ
ってな荒れる要因を積極的に投下して、
一体どういう神経してんのかね。やれやれ。
757 :
678 :2007/04/29(日) 11:52:35 ID:pw3YevD6
荒らしはスルーで
いちいちID切り替えてご苦労な事で・・・
と、荒らしID:fjLqhoabが申しております
とりあえず
>>747 の変数名に突っ込みを入れる勇者はいないのですか
ところで、正規表現など使わなくても InternetCrackUrlとか hrefに入れてhostnameを取り出すとかすれば
逆も言えるね。 InternetCrackUrlなんて使わなくても、正規表現使えば簡単に… ってな。
LAN内にpingを打って返ってくるかこないかで処理を分けるにはどうすればいいのでしょう。 以下のようなのを書いてみて、一応は事足りてはいるのですが、もっといいやり方がありそうな気がします。 var WshShell = new ActiveXObject("WScript.Shell"); var oExec = WshShell.Exec("%comspec% /c \"ping.exe -w 10 192.168.0.6 | find.exe \"Reply\"\""); if (oExec.StdOut.Read(1)) { WScript.Echo("aru"); }else{ WScript.Echo("nai"); }
> もっといいやり方がありそうな気がします。 どうしてそう思うのか、15文字以内で理由を述べよ
>>764 いい勘してるな。うまいやり方は確かにある。
しかし台詞の一言一言に大分恥ずかしいものがあるな・・・
769 :
678 :2007/05/01(火) 18:47:06 ID:3MRBko9y
>>764 使ってるOSが Windows XP / Windows Server 2003 以降なら、
WMI ping あたりでググってみ。
XP Home Editionでlogoff/shutdown scriptを使えるようにできない?
Wscript.Echo("ほしゅ"); Wscript.Echo("ほしゅ");
>>772 失礼
WScript.Echo("ほしゅ");
WScript.Echo("ほしゅ");
WScript.echo
InputBox "お前ら、wsh使ってますか?"
Dim Wsh set Wsh = WScript.CreateObject("WScript.Shell") Wsh.Popup "ウィンドゥズから2文字とってウィッシュにすれば良かったのに", 3, "WISH", 32
Dim Wish set Wish = WScript.CreateObject("WScript.Shell") Wish.Popup "こうですか?", 3, "WISH", 32
そうか! Dim Wish set Wish = WScript.CreateObject("WScript.Shell") Wish.Popup "I wish wsh becomes wish. (・∀・)ウィッシュ!ウィッシュ!", 3, "WISH", 32
エクスプローラの「アイコンの整列」で時系列順と名前順を頻繁に切り替えるので、 そのふたつの状態をトグルで切り替えられるスクリプトを書きたい。 「アイコンの整列」の状態を取得・更新するためのプロパティって、どうやったら見れるのでしょうか。 どうかえらい人教えてください。
WebブラウザのInternetExplorerはActiveX化されてるけど ファイラーのExplorerはActiveX化されてなかったと思うが。 WSHはActiveXじゃないと外部ソフトの操作はSendKeysくらいでしか出来ないよ。 外部ソフトを操作するActiveX.dll(COM)を自作するとか DynaCallでWin32API使うというなら話は別だけど。 というかWin32API使える無料の開発環境でも落としてきて作った方が早そうだな。
ExplorerもActiveXコンポーネントになっている ただ、780のようなことはできなかったと思うけど
またお前か。アホ杉
785 :
780 :2007/05/22(火) 00:15:01 ID:AyEAbPGp
そうか……できないのかー。
WSHってなんでもできるんだと感動していた初心者だったけど、
やっぱりWSHにも壁はあったんだね。そうだったんだね。
皆教えてくれてありがとう!
結局、X-Finderに乗り換えることにしました。
処理も軽くて機能も多いのでオーライ。
WSHぜんぜん関係なくなったけど。
>>784 現在の状態が取得できないとトグルにできないのが残念なところ。
sendkeysしてみて、Class ShellFolderViewのEvent EnumDone()が 起きれば変更されたと分るんじゃないかな
昇順降順のtoggleになってるからだめだね Folder.Items().Item(0)〜を見れば大体の見当は付くのでは
UTF-8 のテキストファイルを読み込んで、 一部を変更して、また UTF-8 で出力させたいのですが、 どんな作戦で行けばよろしいでしょうか。 練習として以下のように、読んだものをそのまま書き出そうとしてみましたが、 それすら文字化けしてしまいます。どうすればよいですか? ( ADODB.Stream というものを使えばできるらしいのですが、よく分かりません ) ------------------------------------------------------------------- Option Explicit Const ForReading =1, ForWriting = 2, ForAppending =8 Dim FSO, Input, Output, CurrentLine Set FSO = CreateObject("Scripting.FileSystemObject") Set Input = FSO.OpenTextFile( "Input.txt", ForReading ) Set Output = FSO.OpenTextFile( "Output.txt", ForWriting, True ) While Not Input.AtEndOfStream CurrentLine = Input.ReadLine Output.WriteLine CurrentLine WEnd Input.Close Output.Close -------------------------------------------------------------------
>>788 > ( ADODB.Stream というものを使えばできるらしいのですが、よく分かりません )
いや、調べろよ。ネットにいくらでもサンプル転がってんだからさ。
一つ言っとくと、FileSystemObject じゃ無理。
790 :
678 :2007/05/27(日) 16:08:11 ID:q00Zzyug
FileSystemObject にバイナリモードがあればなぁ...。
OpenTextFile や CreateTextFile といったメソッド名は OpenBinaryFile や CreateBinaryFile といった将来的な拡張を期待させるんだが。 > FSO オブジェクト モデルは、スクリプティング タイプ ライブラリ (Scrrun.dll) に格納されており、 > TextStream オブジェクトによってテキスト ファイルの作成および操作をサポートします。 > バイナリ ファイルの作成および操作については、まだサポートしていませんが、将来サポートする予定です。 どんだけ待たせんだよ。 ADODB.Stream オブジェクトの操作で代用出来るからって 事実上放置状態なの? まぁバイナリファイルの操作はBASP21で事足りてるが。 やはり標準でサポートしてもらいたいところ。
PowerShell 及び .NET Framework に移行してってことじゃね
>>791 Windows PowerShellが出たからもうWSHはメンテのみで機能強化はない
不満なら↑で.NET Frameworkのクラスライブラリを呼び出せばいい
バイナリファイルの書き換えとかは.NETなんか使わなくとも XPとかでは普通にできる訳だが、多少面倒だわな つか何言ってんだよw WSHはもう何年も前からウィルス扱いなんで まともな機能が追加されるはずがないだろ。 使えるコンポーネントはゴミばかりだっつーの
>>794 WSHに代わるスクリプト言語で、最近の流行は何?
実行エンジンはWindows標準でついてるもので。
WSHが言語ですって・・・ ( ´д)ヒソ(´д`)ヒソ(д` )ヒソ
bat
Windows標準ってったら限られるでしょう。 VistaですらPowerShell標準で入ってないし。 そういやIronPythonってのもあったな。
>>795 もはやスクリプトやバッチの存在そのものが危険要素だし。
2chとか見れば掲示板にrdとか貼り付けるの続出だし
まともで使いやすい機能つけたら何しでかされるやら・・・
従って標準でそういう便利なものが入る事はこれからも多分有り得ない。
間違えてIEで使えるようにしてしまったADODBもすぐブロックされた訳だし、
folder.httのように無かった事にされたのもあるし(涙)
WSHで色々な事ができる、と言っても馬鹿みたいなコーディングになったり
全然使えない仕様のが出来たりするばかり。
WSHだけで何でもやろうとする人いるみたいだけど
遊びならともかく仕事で使うにはとてもとても・・・
>>796 言語でも別に問題ないだろ
800 :
678 :2007/06/02(土) 12:48:32 ID:Tox5gCCd
自分が使えないからって、そこまで嫌悪しなくてもいいのにね。(w まあ、 > 言語でも別に問題ないだろ なんて言ってるぐらいだから、何も理解できてないんだろうな。
801 :
795 :2007/06/02(土) 15:38:31 ID:sJzH3K8W
>>796 ごめんなさい
でも、Unix系ならperlは準標準みたいなもんだし
それに代わる何かはやっぱり欲しいよ
795のことじゃないが、 大したことも言ってないレス番をコテハンにして無駄に自己主張するのって流行ってるん?
>>802 後々まで読み返してもらいたい会心のレス(のつもり)だったんだったりしてなw
だったんだったり?
だったん人の踊り
ダダ星人 「<<807」
UNIX系は基本的にユーザー自身に Cが使える事が前提みたいな物だからな。 WindowsでもC使えれば問題ないし
C くらい誰でも書けるだろ。いや煽りとかじゃなくて、 wsh 使うようなやつならなおさら。
正直ソース拾ってきてBCCでコンパイルするぐらいにしか使ってない
誰でも書けるはずないだろw WSH使うような奴ならなおさらw
日本人の8割は書けない
仮性包茎とCを一緒くたにするのはどうかと思うんだ うん
だったら男の8割だろ?日本人全体なら4割だろ。 もっとも女でも○ケてる○ケてないで 判断できるかもしれんがwww
でもWinって標準でCコンパイラ入ってないよな?
>>795 が言いたかったのはそういうことなんじゃ
オフィス2003にしたらscript editorとかいうのがあるのに気付いたんですが、これでスクリプトのデバッグができるんでしょうか? やさしい解説サイトとかないですかね?
確かWSHのデバッガもあったはず。 全く使った事ないけど。
漢ならmsgboxだけでデバッグしる!
デバッガ使わずに実行デバッグやるならcscript+WScript.Echoの方がいいよ。 結果が残るし、MsgBoxと違って部分コピペ楽だし、WScript.Echoの後に WScript.Stdin.ReadLineを入れればEnter押すまで停止 WScript.Sleep入れれば任意時間停止 入れなければ出力のみで停止無し、と使い分けられし入力も出来る。 MsgBoxだと「Enter押すまで停止」しか出来ない。 WshShellのPopupなら「任意時間停止」も出来るけどね。 だからこそ、そういう不便な物でデバッグやるのが漢だと言うのかも知れないが。
でOffice 2003の話は?
シラネーヨ
デバッグってあんまり話題にならないから参考になりました 感謝
ぶっちゃけRhinoだな。
ファイルの行数を数えようとAtEndOfStreamでカウント取ろうとしたら無限ループに陥った 空読みしないとポインタが進まないのね・・・
825 :
678 :2007/06/10(日) 17:28:54 ID:fWS3EzOx
そりゃ AtEndOfStream の呼び出しでポインタ進んだら困るだろ。
ちょっと考えりゃ分かることなのにな。
WSHからMCIってどうやって制御するん? もしかして出来ないのか?
829 :
821 :2007/06/10(日) 20:13:43 ID:Onv6LJJz
Jashみたく補完機能とか付けたいんだけどWScriptオブジェクトのプロパティの 名前ってどうやって取ってくるの?
831 :
821 :2007/06/10(日) 21:51:53 ID:Onv6LJJz
821のことじゃないが、 大したことも言ってないレス番をコテハンにして無駄に自己主張するのって流行ってるん?
↑いや、これはマジで821のこと言ってるつもりじゃないんだけどね。
(気にせんでくれ
>>821 )
キモい
コールバック関数って使えないの?
なんに?
841 :
名無し~3.EXE :2007/06/17(日) 00:00:09 ID:Dfksh/gM
age
関数のアドレスが分からんから無理っしょ。 常識的に考えて
アドレスがわかったとしてそれをどーするのか、と。
OLE流のコールバックならある事はあるけどな。
JavaScriptなら関数でも、関数がメンバのオブジェクトでも引数にできるけど、 そういう話ではない?
>>846 まあIEとかだとそんな感じでイベントハンドラ指定するだろうけど。
OLEはあとコネクションポイントもあるけど。
>>839 は意味不明だな。そもそもWin32 APIが使えないのに。
APIをコールできて(APIの)コールバックもシミュレートする
コンポーネント作ったとかいうブログがあるけど
作者が宣伝に来たかな?
ドメコンからlocalmachine\administratorにadduser権限付けてやりゃ良いだろが
>>849 コメントありがとうございます。それは出来ない運用になっているのです。
限られたドメインユーザのみ他の一般ドメインユーザを追加出来る様に運用しています。
ですので現在追加するとき認証ダイアログから
ユーザID:domain\hogehoge
パスワード:******
としてから追加しているのです。この認証情報も渡す事が出来ればと思いまして
質問させて頂きました。
ほいだら
途中送信スマソ ほいだら、OSコマンドのnet user /domain /add usernameみたいなのを runasかますかなんかしてshellexecuteでキックすればいいんでないの? ActiveDirectoryだったら、CDのSupportかなんかに便利そうな ツールいっぱいありそうだけど、詳しく知らないので確約できナス
853 :
848 :2007/06/29(金) 20:15:22 ID:jFptocCk
>>852 アドバイスthx!!
runas /noprofile /user:domain\hogehoge"cscript.exe C:\Scripts\test.vbs"
でいけた!
あとはhogehogeの部分とC:\Scripts\test.vbsが相対パスかカレントディレクトリで
指定できるように改造します。
本当に感謝!
854 :
848 :2007/06/29(金) 20:18:07 ID:jFptocCk
やべ興奮して日本語が変になった。すいません。 あとはhogehogeの部分を入力方式にして そして"C:\Scripts\test.vbs"が相対パスかカレントディレクトリ取得で 指定できるように改造します。
855 :
名無し~3.EXE :2007/06/29(金) 21:39:41 ID:kEXg+Fpo
CDのトレーを閉じたいんだけど、出来る?
WSH自体では出来ないけど、外部のコンポーネントやツールを使って良いなら出来る
>>856 外部コンポーネントか・・・
IEとかエクセルの使えば出来るかな?
なんかインストールしなくてもいいやつで
君は言葉の使い方から覚えた方が良い
別に壊れないし、ちゃんとやればWSHも終了する
やれやれ。何の妄想か知らんけど 終了しなくなるのは普通壊れるって言うの。 ちゃんとも何もスクリプトでは これはごく普通のコード。 何のためにVariantClearがあると思ってんだよ。
ゴミプロセスが残るとは言うが、壊れるとは言わないな。 壊れるってのはwshのコンポーネントがおかしくなったりしたら当てはまるだろうけど。 いったいどこの普通なのだろう。
>>859 閉じたいっつってんだろ
ちゃんと聞けよこのドア帆が
>>861 何の妄想か知らんけど、君の脳内限定の常識が
世間一般でも通用すると思わないでね
865 :
678 :2007/07/02(月) 00:25:45 ID:qR6/c1TB
>>860 > ちゃんとやればWSHも終了する
kwsk
>>863 ごちゃごちゃ言ってないで、
>>859 の言う通りやってみ。
ただし、2〜3行目は
× WWMP.cdromCollection.item(0).eject
○ WMP.cdromCollection.item(0).eject
だと思うが。
wscript.exeのプロセス残さず終了するみたいだけど@Vista プロセスが残る人はWMP.close()とかしてみたらどう?
XPでも問題なし。でも、Win2kだとプロセスが残るみたいだな。
WMPの修正が出てるみたい。Windows Updateしなはれ
869 :
678 :2007/07/03(火) 21:17:01 ID:t4OQPhQ+
WMP 最新版 (9.00.00.3349) にしたけど駄目だった... orz
CreateObject("MSWebDVD.MSWebDVD").eject うまく行かんな
>>869 確かにそのバージョンでwscriptがバックに残るのを確認したよ
9じゃなく8なら大丈夫かもね
872 :
名無し~3.EXE :2007/07/07(土) 17:21:28 ID:Hb+rLCB5
下記のソースで共有フォルダを作ると「アクセスが拒否されました」 がでてしまします。 何かご存じの方がいらしたら、ヒントをお教えください。 ・実行したpc:windowsXP(sp2) ・ユーザー:admin権限あり ・スクリプトは問題なく実行されます。プロパティでも共有にチェック入りました。 ・共有は簡易共有 ・手作業で共有フォルダを作ると問題なし ・拒否されたpc:XPsp2,2000sp4(マイネットワークからは見える) (mにはフォルダ名、nには共有名が入ります) --------------------------------------------------------------- Const FILE_SHARE = 0 Const MAXIMUM_CONNECTIONS = 25 strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" _ & strComputer & "\root\cimv2") Set objNewShare = objWMIService.Get("Win32_Share") errReturn = objNewShare.Create _ (m, n, FILE_SHARE, _ MAXIMUM_CONNECTIONS, "Public share") ---------------------------------------------------------------- 何か足りない気がしてググったりしてみたのですが、お手上げ状態になって しまいました。 こうするといいかもと言うヒントで結構ですのでよろしくお願いします。
その手のメソッドを使ったこと無いけど、XP,2Kじゃ最大接続数が10だからじゃねーの?
875 :
名無し~3.EXE :2007/07/08(日) 11:17:52 ID:ySfZz1Mb
872です 一応解決しました。 結局共有の設定はできていて、フォルダのセキュリティに 権限が足りていなかったので、アクセス拒否されたって事 みたいでした。 なので、フォルダのセキュリティにユーザーを追加する スクリプトを実行して解決しました。(今回はeveryone) あ、osはよく考えたらxp proでした。homeがないので テストできないんすけど、何か違いがあるのかな?
未開封のMeを貰ったのだけど(金と銀の2枚DISKのやつ)インストールDISKてどうやって作るのでしょうか?
スレ違いじゃね? まあマジレスすると、あと銅のディスクが必要
五輪か三種の神器っぽいな
あのー クリップボードの画像をJPGに変換するVBS作ってくれませんか?
IrfanViewでも使え
SendToConvertでも使え
softじゃだめなのよ お願い
無理じゃね?
じゃあSendKeysでペイントにでも貼り付けて保存しろ
>>879 VBSとWSHにはクリップボードを操作する機能も、画像を変換する機能もないので無理です
そういうことが出来るCOM使えば可能だけど、COMの導入にはレジストリへの登録が必要なので
COMよりそういうアプリを使った方が手軽だよ
それでもVBSでやりたいの?
どうせロクな目的じゃないからほっとけよ
自分でexe作って呼び出せばいいんじゃないの? 以上
WSHの Wscript.Shell の sendKeysでアプリケーションの操作を自動化したいのですが そのアプリケーションってのがFileZillaっていうFTPクライアントなのですが 以下の問題にぶち当たって自動化できません。この場合WSHでは不可能なのでしょうか? 1.Tabキーを押しても該当する場所までカーソルが移動してくれない>マウスでクリックしないと 移動できないからキーイベント送信だと移動できない(と思われる) 2.右クリックしないとメニューが表示されない>やはりこちらもマウスを使わないと 呼び出せないメニュー(と思われる)なのでキーイベント送信だと出来ない(と思われる) こんな状態なのですが・・・ 具体的にやりたい事は 起動>Ctrl+S > ↓キー Enterキー で事前にFileZillaに登録しておいたサイトへの 接続が可能なのですが、ココからローカル側に表示されているファイルをリモート側に 全て選択してアップロードしたいのですが、アップロードするときにマウスを使わないと どうしても出来なくて困っているのです。 何か良い方法は無いですかねぇ?
マウス操作の出来るCOM導入して使えばいいだけだが そういうのはWSHではなくAHkとか使った方がいいよ 適材適所ってやつね
>>888 じゃないけど、そーゆーのってできればOS標準の
機能だけでやりたい時ってあるじゃない。
そもそもFileZillaがCUIだけで使えればいいのにね。
ていうか、CUIで使えるクライアントじゃダメ?
ftpであぷするだけならwshだけできるんじゃない、sshは知らんけど
892 :
888 :2007/07/14(土) 19:14:31 ID:GfgVyhQB
皆さんレスありがとうございます!
>>889 COMって言うのが何なのか知らないのですが、AHKと言うのは AutoHotKey の事ですか?
外部アプリをなるべく入れたくないんですよね・・・。
>>890 そうそう、標準だけでやりたいんです。色々なPCに導入する事になるので
そのたびにいちいちインストールしていてはね。。。
FileZillaがCUIだけで使えればいいのに!ってのは同感です。だから困ってるんです。
CUIで使えるクライアント(例:FFFTP)を試してみましたが、
50GBぐらいの大量データ全てをミラーリングアップロードとかやるとフリーズするんです。
他のFTPクライアントを試してもフリーズするんですが、唯一FileZillaのBeta3だけは
その負荷に耐えて正常に転送できるんです(同期機能が無いのが痛いけど)。
>>891 むしろWindows標準のftp.exeでいいなら .batファイルだけで出来ますよ。。。
FileZillaは外部アプリなんじゃ。。と釣られてみる
894 :
888 :2007/07/14(土) 19:24:43 ID:GfgVyhQB
>>893 それは確かに貴方のおっしゃる通りなのですが、こればかりは仕方が無いんです。
しかし外部アプリとは言えども、FileZillaのZip版を落としてきたので
インストール不要。コピーするだけで使える。
からまぁよしとしましょう。出来ればWindowsが標準で持っているftp.exeを使いたいんですが
あれはレジュームも出来なければ大量のファイルを飛ばすと転送できてないファイルが
大量にあるし、機能が貧弱すぎて使い物になりません。
一番の理想は FFFTPに -s プロファイル名 -m -q のようなオプションをつけて
実行できる事なのですが、前述したようにフリーズするのでやむを得ずFileZillaです。
それをWSHで自動化出来ればと思ってWSHを勉強してきたのですが
なんか出来なさそうでショボーン。。。
AutoHotkeyもコピーで使えるだろ
>
>>888 転送できていないファイルの差分をチェックして、送り直すとか、
何秒かごとに1ファイルずつ転送とかできない?
wshあまり詳しくないのでこれ以上は、ごめん
897 :
888 :2007/07/14(土) 19:51:07 ID:GfgVyhQB
>>895 へぇ・・・AutoHotKeyもコピーで使えるんだ・・・知らなかった。
でもまた1から文法覚えたりしないといけないのか、、、辛すぎ・・・OTL
>>896 そんな無茶な。それは無理でしょうね。。。
898 :
888 :2007/07/14(土) 20:09:23 ID:GfgVyhQB
AutoHotKey ちょっと調べてみたところ、どうやらキーボード入力に応じて あらかじめ組み込んだ処理を実行するようで。 スケジューラに組み込んで実行したいので(無人で定期実行) 何かキーを押さないと動作し無いと言うのはダメですね。 だからってWSHと組み合わせる(Wscript.ShellのsendKeys)のはこれまた大掛かりな・・。 AutoItってのが良さそうだと思ったのですが日本語の情報が全く無くて困ったり・・・。 WSHは解説サイトが豊富ですよね。
>>897 FFFTPは1.93って最新版が出たけど、それ使ってもダメ?
GNUのWin32版ftp.exeってのもあるよ。
それから、一気に転送するのではなく、
>>896 の言うとおりの方法にすれば
十分可能だと思うよ。1ファイルの大きさが大きすぎてフリーズって事なら
難しいけど・・・・。
FTPクライアント起動 ⇒ 1ファイル転送 ⇒ FTPクライアント終了 ⇒ FTPクライアント起動・・・
あとはAHKのコピーがOKなら、それとFilezillaでもいいんじゃない?
覚えるのはWSH程、複雑じゃないから。
>>898 > AutoHotKey ちょっと調べてみたところ、どうやらキーボード入力に応じて
> あらかじめ組み込んだ処理を実行するようで。
そういうことも出来るけど
> スケジューラに組み込んで実行したいので(無人で定期実行)
も出来るのでWSHと組み合わせる必要なし
君がちゃんと調べてないだけ
それに操作の自動化程度なら、文法なんて覚える必要無し
キーを送ったりクリックしたりのコマンドを必要数羅列するだけで一通り動く
903 :
888 :2007/07/14(土) 22:41:32 ID:GfgVyhQB
>>899 もちろん 1.93の最新版も 古いけど安定したバージョン(Ver.1.82a) も両方試しています。
それでもダメなので、この件はFFFTPの作者にメールを送信済みです。
GNUのWin32版ftp.exeってのは標準のと何が違うんですか?
>FTPクライアント起動 ⇒ 1ファイル転送 ⇒ FTPクライアント終了 ⇒ FTPクライアント起動・・・
現実的とは思えません。5000ファイルぐらいを飛ばすと考えると不可能でしょ。。。
そんなスクリプト書くのもどう書いたらいいのかさっぱり分からないし・・・。
>>902 え、本当ですか!
UWSC AutoHotKey AutoIt の3つのうちどれが簡単で
私の今回の目的を一番達成しやすいですかねぇ?
AutoItは日本語の情報がほとんど無い > 使えそうに無い
UWSCは有料?フリー版もあるみたいだけど実行するマシンにいちいちインストールが
必要っぽい(有料版はEXE生成可能みたい)
って事はやっぱりAutoHotKeyを学ぶべきか!
>>903 >現実的とは思えません。5000ファイルぐらいを飛ばすと考えると不可能でしょ。。。
>そんなスクリプト書くのもどう書いたらいいのかさっぱり分からないし・・・。
ふつーに可能だと思うけど。ルーチンワークを簡単に自動実行するのが、
WSHの良さの一つだと思うんだが。
スクリプトの書き方がわからないのは単に勉強不足なだけでしょ?
ちなみにWSHが外れている時点で既にスレ違い。あとはここまで教えてもらった事を
自分で試して報告してくれ。
905 :
888 :2007/07/14(土) 23:38:33 ID:GfgVyhQB
>>904 WSHの話題から外れると確かにスレ違いになるので、ココではもうAutoHotKeyについて
私は話しませんが、
>ふつーに可能だと思うけど。ルーチンワークを簡単に自動実行するのが、
とおっしゃってますが、それは標準の ftp.exeを用いて実行させるんですか?
そもそも同期を取るのが難しい気が・・・。
それにオーバヘッドが大きすぎません?
>スクリプトの書き方がわからないのは単に勉強不足なだけでしょ?
書き方と言うかアルゴリズムと言うか・・・まぁ勉強不足なのは認めますよ。
>>905 ftp.exe使うなら-iつけて対話カットすればいいし
オーバーヘッドなんか5000程度ならそもそも無視していいと思うよ
ていうか、こうして無駄話をしている間にもオーバーヘッド分の時間ぐらい
あっという間に過ぎちゃってるでしょ?
大丈夫、WSHは怖くないわ。勇気を出して!
WSHというかHTMLの問題だと思う そもそもxyなんて自動で送信されるわけないし、submitしてる値はinputにあるんでしょ? valueを設定してからsubmitするか、GET限定なら直接location.hrefにurlとしてクエリを付加してから代入すればいい なお、分からないならHTML、特にformについて勉強不足なので勉強するしかない
909 :
678 :2007/07/18(水) 00:19:37 ID:ddXkilXj
>>907 imageBtn_x, imageBtn_y で送られるんだから、そのフォームに
<input type="hidden" name="imageBtn_x" value="123"> のエレ
メントを追加してから click メソッド呼べばいいんじゃね?
>>908 偉そうに書く前に、<input type="image" についてぐぐってこい。
910 :
907 :2007/07/18(水) 02:21:13 ID:yA++WBCH
お二人様、レスありがとうございましたm(_ _)m
>>909 勉強不足の自分ではどうにもならず、困りきっていたところにまばゆい光が><
早速試させて頂きたいと思いますm(_ _)m
>>908 僕が勉強不足だったと反省しております。HTMLとformについて基本から勉強したいと思います。
ありがとうございました^^
>>910 > 僕が勉強不足だったと反省しております。
いや、俺の見る限り君の方がよっぽど勉強しているし理解度も高い。
まぁ謙遜は日本人の美徳だが。
ってか、読めば読むほど痛いレスだな、
>>908 は。
>>909 imageBtn.x, imageBtn.y っしょ。
どうあれ imageBtn.x=123 と共に imageBtn.x=0 の方も送られてしまうので
(受け取った側がどちらの値を採用するのか分からん)
エレメントの追加ってよりはいっそ上書きしちゃった方がいいと思う。
912 :
911 :2007/07/18(水) 09:07:18 ID:iGOu5/XR
ちょっと分かりにくかったかもしれないんで補足。 「追加ではなくて上書き」ってのは、オリジナルの <input type="image" name="imageBtn" ... を残さずに <input type="hidden" name="imageBtn.x" value="123"> <input type="hidden" name="imageBtn.y" value="456"> に置き換えるってこと。んで submit() する。 これなら imageBtn.x=0, imageBtn.y=0 の方は送信されないで済む。
913 :
911 :2007/07/18(水) 09:18:14 ID:iGOu5/XR
> 読めば読むほど痛いレスだな これはちと言い過ぎだった、すまぬ。
914 :
907 :2007/07/18(水) 20:29:32 ID:yA++WBCH
>>907 さん、
>>911 さん
この方法で無事成功しました!
本当にありがとうございましたToT
formのPOSTで送信されるデータがhiddenで代替できるなんて初めて知りました。
教えて頂かなければずっとわからなかったと思います。
やはりHTML,formについて基礎から勉強していくべきですね^^;
>>908 さんもありがとうございました。
二日間レスがなかったので非常に嬉しかったです。
余談ですが、VBSでブラウザ操作する場合、JavaScriptの解説HPが参考になることを最近初めて知りました。
恥ずかしながらformの要素やメソッドなども5日前知った程度です。
僕など、908さんの足元にも及ばないです。
レスを頂いた皆様ありがとうございました。
それでは失礼しますm(_ _)m
915 :
名無し~3.EXE :2007/07/18(水) 21:07:18 ID:ZW3Df9Iy
ブラウザのオンライン・オフラインを切り替える事は可能でしょうか? ネットワーク全体を切り替えてしまっても構いません。 よろしくお願いします。
どうせならCとかのまともな言語のスレに行けばいいのに・・・
918 :
915 :2007/07/19(木) 15:29:08 ID:tX7CbwFy
ありがとうございました。
バッチファイルからcscriptで実行するvbsファイルを下記のように作成しました。 Option Explicit On Error Resume Next Dim objShell Set objShell = WScript.CreateObject("Shell.Application") If Err.Number = 0 Then Dim objFolder Set objFolder = objShell.BrowseForFolder(0, "フォルダを選択してください", 0) If Not objFolder Is Nothing Then WScript.Echo objFolder.Items.Item.Path Set objFolder = Nothing End If Else WScript.Echo "ERROR : " ^& Err.Description End If これってスクリプト遮断機能で検出されますか? <チラシの裏>ウィルスバスターにはスクリプト遮断機能がありません。</チラシの裏>
あ、「^」は無しです。すみません。
動かしたい環境で動かしてみればいいじゃん
>>920 ターゲットは遠方に住む複数の知人のPCなので検証は出来ません。
うちの環境では何事も無く動作しますが、
CreateObjectがスクリプト遮断機能にゴルァされるとの噂を聞きつけまして・・・。
923 :
678 :2007/07/22(日) 00:10:25 ID:tM9sO4Uc
>>922 遠方って... 今時何言ってるんだよ。
その知人にメールで送って試してもらえばいいじゃん。
>>923 知人にはディスクを作成して送付することになっています。
また、デバッグを依頼できるほど親しい間柄でもありませんし、
親しい友人はみなウィルスバスター使いばかりです。
VirtualPC上のWinXPにNAV体験版を入れてみましたが、
動作が重すぎて検証になりませんでした。
それで、思い悩んだ挙句、こちらで質問した次第です。
そもそも環境依存の問題なんて当該者以外の他人に聞いても解決するもんじゃないと思うのだが 最低でもその知人とやら全員の使用しているアンチウィルスソフトとそのバージョン、およびそれを どんな設定で使用してるかがわかんなきゃ答えようがないような気がするけどな
その友人にこのスレのURLを送って試してもらえばおk
JScriptでゴミ箱を空にするのを作ったんですが ゴミ箱アイコンがゴミが入ったやつのままになってしまいます。 このアイコンを空のものに更新する方法はありますか?
929 :
928 :2007/07/22(日) 11:47:19 ID:h90uHO0r
追記 ユーザ操作無しで実行したいのでInvokeVerb以外の方法を探しています。 削除はfsoです。 よろしくお願いします。
まず、どういう操作でアイコンが変わるか探せ デスクトップで最新の情報に更新とか ごみ箱開いてみるとか あとはそれをスクリプト化しろ
>>931 夏休みの宿題は早めにやっとけよ?
毎年まぎわになってから親に頼るな
「ネットワーク接続」内にある接続先を実行する方法はどうすればいいでしょうか?
>>933 Shell.Application使えばいいよ
具体的な方法はググればいくらでも出てくるからそっちを見てね
935 :
933 :2007/07/24(火) 01:03:02 ID:S/R6bNn1
>>934 Const NETWORK_CONNECTIONS = &H31&
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(NETWORK_CONNECTIONS)
Set colItems = objFolder.Items
For Each objItem in colItems
If objItem.Name = "hogehoge" Then
'hogehoge に接続しる!
End If
Next
こんな感じだと思うのですが、肝心な接続する(実行する?)方法がわかりません。
ググってみたけどわからなかったです。
FolderItem.InvokeVerb or Verb.Doit
937 :
名無し~3.EXE :2007/08/02(木) 19:06:04 ID:HYV9OexC
IEのコンテキストメニューから呼び出すスクリプトの中で文字入力ダイアログを使いたいのですが、 下のようにやると ”InputBoxに書き込みできません”となります。 エラーの回避方法がありましたらよろしくお願いします。 <HTML><SCRIPT language="VBScript"> Function vbInputBox(message, title, default) vbInputBox = InputBox(message, title, default) End Function Call vbInputBox("a","b","c") </SCRIPT></HTML> それか、window,promptの縦の長さを変えられる方法がありましたら教えてください。
あ゛?普通に動くが <HTML><SCRIPT language="VBScript"> Function vbInputBox(message, title, default) vbInputBox = InputBox(message, title, default) End Function Document.Write vbInputBox("a","b","c") </SCRIPT></HTML>
939 :
937 :2007/08/03(金) 11:39:25 ID:brmT2+zm
やっぱり動きません。 ↓でも動かないし。 <HTML><SCRIPT language="VBScript"> MsgBox("a") </SCRIPT> </HTML>
>>939 動く。但し規定のブラウザがIEである事が前提。
>>937 win2000 IE6 ですが同じエラー出ますわ
prompt は平気なのにね、何でだろ
MenuExtに登録するhtml を
<SCRIPT type="text/JScript">
var wshell = new ActiveXObject("WScript.Shell");
wshell.run("パス\\vbInputBox.vbs");
</SCRIPT>
にしてワンクッション置いてみるとか
<script type="text/javascript"> external.dialogWidth = '300px'; external.dialogHeight = '110px'; function OK(){ alert(document.F1.T1.value); window.close(); } </script> <title>モーダルダイアログモード</title> <br> <form name="F1" action="#"> <table> <tr> <td>何か入力</td> <td><input type="text" name="T1" size=30></td> </tr> <tr> <tr> <td></td> <td><input type="button" value=" O K " onClick="OK();"> <input type="button" value="キャンセル" onClick="window.close();"></td> </tr> <tr> </form> <script type="text/javascript"> document.F1.T1.value = "デフォルト"; </script> >937 MenuExt Flags=1で登録してモーダルダイアログモードにする
943 :
名無し~3.EXE :2007/08/08(水) 13:44:05 ID:ALoY2U7S
ほ
ume
947 :
名無し~3.EXE :2007/08/23(木) 20:23:35 ID:YDx8nhVH
保sh
エクスプローラでファイルを選択→右クリック→「プロパティ」と 同じダイアログを開くCOMオブジェクトなどはないでしょうか?
>>948 Win2000/Meのごみ箱フォルダとか
950 :
949 :2007/08/28(火) 19:36:45 ID:uvmautGd
すまん。違った。
>>948 Shell.Application の InvokeVerb とか
以下のようなvbsを作ってダブルクリックするとプロパティウィンドウが 出てくれません。他のメニュー項目はInvokeVerbできているのですが。 親ウィンドウがないからでしょうか? Set oShell = CreateObject("Shell.Application") Set oFolder = oShell.Namespace("c:\") Set oFolderItem = oFolder.ParseName("WINDOWS") Name = "プロパティ(&R)" oFolderItem.InvokeVerb(Name)
なるほどね・・・ そのあとに wscript.sleep 3000 追加すると3秒間は開いてくれるねww
何故に3秒? 閉じるまで開いておくようにすればいいじゃん
道連れか
Set Shell=CreateObject("Shell.Application") For Each ie In Shell.Windows() If InStr(TypeName(ie.Document),"IShellFolderViewDual") Then Exit For End If Next Set Shell=ie.Document.Application を使え
共有フォルダで大量のファイルの作成者を調べる必要がでてきました スクリプトでファイルの作成者を知る方法はありますでしょうか
>>956 努力しない奴にほいほい答えてくれる者はいない。
>>956 なんとかstatってのがあったはず
これでなんか情報を取得して調べると
ファイルの情報っぽいのが見れたはず
>>957 いじわるするなよ
Folder.GetDetailsOfでいけるんじゃね
statって調べたらperlなんですね 確かにスクリプトだけどできればvbsかせめてjsでお願いしたい
>>960 perlはWSHで使えるからこのスレの範疇なんだが。
>>5 それにWSH自体やJS、VBSにはそういう機能ないので
COM使うか、別言語使うかの選択になるわけだし。
962 :
名無し~3.EXE :2007/09/06(木) 22:37:51 ID:X5XEo4Da
wsh初心者なんですが、IE操作でわからないことがあるので教えてください。 Set objIE = CreateObject("InternetExplorer.Application") で作ったobjIEにurlを表示してリンク先をダウンロードしたいんですが、 保存ダイアログが出てきてそのあとどうしていいかわかりません。 activateしてSendKeysを使えばいいんでしょうか? 保存先も指定したいんだけど、どうしていいか全然わかりません。
xmlhttpでは駄目なん? function GetHTMLDocument(ByVal strURL, ByVal strDatFileName) dim objXmlHttp, objStream const AD_TYPE_BINARY = 1'ストリームタイプをバイナリストリームにする const AD_SAVE_CREATE_OVER_WRITE = 2'ファイルを上書きする on Error Resume Next set objXmlHttp = WScript.CreateObject("microsoft.xmlhttp")'XMLHTTPオブジェクトの作成 objXmlHttp.Open "GET", strURL, false objXmlHttp.Send if Err.Number <> 0 then strErrMsg = strURL & ": " & Err.Description GetHTMLDocument = false set objXmlHttp = nothing exit function end if on Error Goto 0 set objStream = CreateObject("ADODB.Stream")'バイナリストリームオブジェクトの作成 objStream.Open objStream.Type = AD_TYPE_BINARY objStream.Write(objXmlHttp.ResponseBody) objStream.SaveToFile strDatFileName, AD_SAVE_CREATE_OVER_WRITE objStream.Close set objStream = nothing set objXmlHttp = nothing GetHTMLDocument = True end function
964 :
962 :2007/09/07(金) 18:48:40 ID:yxgIGp5j
>>963 レスありがとうございます。
やってみてリンク先はダウンロードできました。
ただ、目的のサイトではリンク先のURLを開くと、違う名前のファイルを
ダウンロードするようになってたので、うまくいきませんでした。
自分でもいろいろやってみようと思います。
実は、macでは簡単に出来たんで、winでもやってみようと思ったんですが、WSHは難しいですね。
965 :
962 :2007/09/14(金) 22:53:23 ID:u3aWDe/c
とりあえず、safariをインストールしてsendkeysでなんとかなりました。 safariはコマンドラインオプションが無いみたいなのでホームページに目的サイトのURL指定したり、 保存先もsafariのデフォルトに設定とかだけど。
あるソフトを、前回起動時から1週間経っていたら起動する。そうでなければ何もしない。 というスクリプトはどう組めば良いですか。
> あるソフトを、前回起動時から1週間経っていたら起動する。そうでなければ何もしない。 をコードにすればいいだけだと思いますが、なにか?
何処かに前回起動日時データを保持しておき、それが現在-7より大きかったら終了 小さかったら「あるソフト」を起動して、前回起動日時データを書き換える 以上が"組み方" 上記をコードに"書く方法"は、WSHヘルプやGoogle参照
970 :
名無し~3.EXE :2007/09/18(火) 17:09:13 ID:3e/ATvcX
あるソフトの選択している範囲をクリップボードに取り込むには どう記述すればよいでしょうか?
あるソフトとは?
>>971 OpenJaneDoeです。
ショートカットメニューのコピーを使えば簡単ですが
複数の処理をvbsファイルでまとめて行いたいので。
ふつうにこぴーすりゃいいんじゃね?
SendKeysでCtrl+Cでいいんじゃね? いまいち何がやりたいか見えないからアドバイスしづらいが・・・。 datファイルをvdsで開いて処理する方がいろいろできるんじゃないのかな
InternetExplorer.Application
976 :
970 :2007/09/19(水) 10:35:41 ID:pTtgjdvq
ありがとうございます。 SendKeysで出来ました。
977 :
名無し~3.EXE :2007/09/19(水) 10:40:56 ID:pTtgjdvq
objShell.Run "calc",1 だと電卓が立ち上がるのに objShell.Run "C:\Program Files\aaa\bbb.exe" だとbbbが立ち上がりません。 スペースや2バイト文字があるとrunメソッドは使えないのでしょうか?
CreateObject("WScript.Shell").run """C:\Program Files\Windows Media Player\wmplayer.exe"""
>>978 ありがとうございます。
ダブルクォーテーションマーク3つで囲んだらうまくいきました。
980 :
名無し~3.EXE :2007/09/19(水) 17:02:19 ID:pTtgjdvq
パラメータつきのアプリケーションをrunメソッドで立ち上げたあとに Sendkeyメソッドを使用すると、アプリケーションが立ち上がる前に キーを送ってしまいうまくいきません。単にsleepを使う以外で 確実にキーを渡せる方法はありませんか?
つAppActivate
>>981 runメソッドのあとに入れてみましたがアプリが立ち上がる前に
キーを送ってしまっているようでうまくいきません。
なんかいい方法はないでしょうか?
つAppActivate の復帰値
Do Until objShell.AppActivate("abc.txt") WScript.Sleep 50 Loop で出来ました。
次スレは?
まったく理解されずにターミネートされた
>>983 が気の毒で・・
ActiveXの出力パラメータをVBS から呼び出すと型が違いますとエラーになります 以下のような関数呼び出すにはどうすればよいか ご存じでしたら教えていただけませんか。 func(String outarg1[],String outarg2[])
>>987 Excel VBAやVB6以前があれば、
その中で参照設定してオブジェクトブラウザを見て、
VBでどんな型になるか確認したらいい。
VBScriptでもそれと同じ型に合わせろ。
はぁ?
990 :
987 :2007/09/22(土) 17:14:36 ID:7RwwKfbd
>>988 ExcelVBAでは出来てるんですが、
VBScriptでは型の指定ができなくてエラーとなるみたいなんですが
これはWSH+VBSからActX呼び出しの限界でしょうか
君の脳の限界に一票
つーか、なんでそのActiveXの名前そのものとかを隠すの? やっぱ脳が弱いのかな?
自作じゃね?
^
h
h
h
h
h
1000ならジュースでも飲むか
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。