1 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 01:22:48 ] ( ´ゝ`) 誰か詳しい情報キボンヌ ●過去スレ WSH(・∀・)スレッド! pc11.2ch.net/test/read.cgi/tech/1055075469/ WSH(・∀・)スレッド! Part 2 pc11.2ch.net/test/read.cgi/tech/1176698934/ WSH(・∀・)スレッド! Part 3 pc12.2ch.net/test/read.cgi/tech/1208948450/ ●関連スレ お前ら、wsh使ってますか? Part7 pc12.2ch.net/test/read.cgi/win/1190548945/ HTAをもっと流行らせる計画 Part2 pc12.2ch.net/test/read.cgi/tech/1220874815/ ★WSHでCGI★JScriptVBScript pc11.2ch.net/test/read.cgi/php/1059745064/ ●公式サイト Windows Script www.microsoft.com/japan/msdn/scripting/ ●個人サイト Windows Scripting Host homepage3.nifty.com/aya_js/wsh/index.htm Windows Scripting Host Laboratory www.roy.hi-ho.ne.jp/mutaguchi/wsh/ Windows Script Wiki winscript.s41.xrea.com/wiki/index.php
357 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 17:10:21 ] // wsfでいいんじゃねえの?.wsf // scriptControlつかおうが、readallでeval使おうが、どっちみち // スクリプトの中からファイル読込みしてやらんと駄目だろ。 // それならwsfのほうが楽だ。 // エディタのマクロには使えんけどな。 // // <job id='main'> <script language='JScript' src='./subinclude.js'> WScript.Echo('wsf'); // </script></job>
358 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 17:55:12 ] スクリプトを動的に変更する場合は、一般的にScriptControlを使用する >>354 は必要なときにスクリプトを後付けする構造なので 何でもできるScriptControlにする方がベストだと思う >>357 のやり方はスクリプトの一括読み込みなので構造が違う 無駄なスクリプトも全部読み込みたい場合はwsfでも良いけど ファイル構成も異なるので使い難い
359 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 18:04:38 ] >>358 スクリプトコントロールを使うっていっても、その元になるスクリプトを書かれたファイルを読み込まなくていいのか? たとえばどうやって書くわけよ? vbsのinput使うみたいな形で、scriptcontrol使ってる例はあるわな。 どうしてもその言語じゃ処理できない場合に使う方法として。 その場合は、スクリプトのなかで記述しちゃってるよね。 >>354 は、メインのスクリプトファイルから外部の関数やクラスをimportしたいんだろうから、 その都度読み込もうが、wsfでも何の問題もないと思うんだが。 ScriptControlを使う場合の方法と、そのメリットを判り安く解説してみてくれ。
360 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 18:12:49 ] vbsからjsならscriptcontrolかもしれんが、jsからjsならevalでええ、scriptcontrolつかうなんてあほくさ
361 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 18:16:58 ] だいたいimportしたいってのは、ファイル構成をわけて、 過去に作った関数を再利用しやすくするためのもんだと思うんだが・・・ ファイル構成をわけたくなきゃ、同じファイルにその関数をコピペすりゃいいだけだが、 それやってくと、それはそれで面倒臭いこともある。
362 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 18:34:23 ] scriptcontrolつかいたければつかえば? どうぞどうぞ とめないよ
363 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 19:57:08 ] importしたい奴にScriptControlのほうがいいと薦めるのか? 意味がわからん。誰か解説ヨロ
364 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 21:34:04 ] 断る
365 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 21:41:20 ] <?xml version="1.0"?><package><job id="fso"><script language="VBScript"><![CDATA[ rem objIEに走っているスクリプトを入れて関数を呼び出す Unicode で保存 Function obj(jobName) :Set Container = GetObject("new:{C08AFD90-F2A1-11D1-8455-00A0C91F3880}") CreateObject("Wscript.Shell").Run "Cmd.exe /c Cscript.exe //Nologo " & _ """" & Wscript.ScriptFullName & """" & " //job:" & jobName & " " & Container.HWND & _ " || (echo Error In JobInitialize. & pause) ", 6 On Error Resume Next :Do :Err.Clear:Set objScript = Nothing Set objScript = Container.GetProperty(Container.HWND) Loop While objScript Is Nothing : On Error Goto 0 If Err.Number <> 0 Then : Err.Raise Err.Number : End If Set obj = objScript : Container.Quit : Set Container = Nothing :End Function ]]></script><script language="VBScript"><![CDATA[rem *** FUNCTIONS *** Function objSelf() : Set objSelf = CreateObject("Scripting.FilesystemObject").GetFile(WScript.ScriptFullName) End Function ]]></script><script language="VBScript"><![CDATA[If WScript.Arguments.Count = 0 Then Set fso = obj("fso") : msgbox fso.objSelf.Path ,32 : fso.Quit End If]]></script><script language="VBScript"><![CDATA[If WScript.Arguments.Count = 1 Then PutPropertyMyself() : Zzz() : Sub PutPropertyMyself() : PropertyID = Wscript.Arguments(0) + 0 For Each objIE In CreateObject("Shell.Application").Windows : If objIE.HWND = PropertyID Then objIE.PutProperty PropertyID, Me : Exit For End if : Next : End Sub : Sub Quit() : WScript.Quit : End Sub : Sub Zzz() : Wscript.StdOut.WriteLine "id: " & WScript.Arguments(0) Do : Wscript.Sleep 1000 : Wscript.StdOut.Write "Zzz..." : Loop : End Sub End If]]></script></job></package>
366 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 22:46:31 ] つまらん
367 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 13:33:47 ] IEのハンドル調べて、オブジェクトとプロパティのやり取りしていろいろやるのか。凄いな。 で何が凄いんだが、解説ヨロ
368 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 19:10:09 ] 面倒だからやだ
369 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 21:27:57 ] 複数ジョブを走らせると 終了時にcmd.exe が成仏しないことに 気がつきましたので 差し替えさせていただきます どーも すみません
370 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 21:28:51 ] <?xml version="1.0"?><package><job id="fso"><script language="VBScript"><![CDATA[ rem よそのスクリプトの関数を呼ぶ.wsf Unicodeで保存 Function obj(jobName) : Set container = GetObject("new:{C08AFD90-F2A1-11D1-8455-00A0C91F3880}") CreateObject("Wscript.Shell").Run "Cmd.exe /c Cscript.exe //Nologo " & _ """" & Wscript.ScriptFullName & """" & " //job:" & jobName & " " & container.HWND & _ " || (echo Error In JobInitialize. & pause) ", 6 : On Error Resume Next : Do : Err.Clear Set script = Nothing : Set script = container.GetProperty(container.HWND) : Loop While script Is Nothing On Error Goto 0 : If Err.Number <> 0 Then : Err.Raise Err.Number : End If Set obj = script : container.Quit : Set container = Nothing : End Function ]]></script><script language="VBScript"><![CDATA[Function objHere() Set objHere = CreateObject("Scripting.FilesystemObject").GetFile(WScript.ScriptFullName).ParentFolder End Function]]></script><script language="VBScript"><![CDATA[If WScript.Arguments.Count = 0 Then Set fso = obj("fso") : msgbox fso.objHere.Path, 32 : fso.Quit = TRUE End If]]></script><script language="VBScript"><![CDATA[Dim Quit If WScript.Arguments.Count = 1 Then : PutPropertyMyself() : Zzz() : End If Sub PutPropertyMyself() : PropertyID = Wscript.Arguments(0) + 0 For Each objIE In CreateObject("Shell.Application").Windows If objIE.HWND = PropertyID Then : objIE.PutProperty PropertyID, Me : Exit For : End if : Next : End Sub Sub Zzz() : Do : Wscript.Sleep 1000 : Wscript.StdOut.Write Typename(Quit) If Quit Then : Exit Do : End If : Loop : End Sub]]></script></job></package>
371 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 17:55:11 ] GetObject("new:つかってみたかったのか? CreateObject(ie)でよかろうもん
372 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 18:28:23 ] どっちもいらんけどな
373 名前:デフォルトの名無しさん mailto:sage [2010/07/16(金) 21:18:50 ] おまいらWSHのデバッグどうしてる? エラーダイアログ見て直す?あと個別に変数表示させる? またはスクリプトデバッガいれてレジストリ直して//xでやってる? もっと他にいい方法あるかな? 自分でツール作ってやってる人いるかな?
374 名前:デフォルトの名無しさん mailto:sage [2010/07/16(金) 22:43:29 ] >>373 いわゆる printf デバッグ ただ、WScript.Echo() のままでは面倒なので、 msgout("a={0}, b={1}", [a, b]) みたいに使えるヘルパ関数は自作してる
375 名前:デフォルトの名無しさん mailto:sage [2010/07/16(金) 22:53:26 ] よく使うのは msgbox escape() msgbox typname() だね
376 名前:デフォルトの名無しさん mailto:sage [2010/07/16(金) 23:09:08 ] 正規表現とかの文字列処理は組み込んでからデバッグするんじゃなくて 該当部分だけ先にインタプリタ系ツールで試して問題ないことを確認してから プログラムの本体に組み込む
377 名前:デフォルトの名無しさん mailto:sage [2010/07/17(土) 00:36:58 ] なるほどなるほど・・・ MSのスクリプトデバッガつかってるひとはいないのか。 試してみて、使いやすいとは思えなかったんでエディタと連携させて 自分で適当な関数を作ったほうがいいのかもしれんと思ったのだが・・・ デバッグに絡んで、関数の中で、実行中のその関数の名前を取得したいと思って いろいろ試してるんだが、 functest=function(a){ s1=arguments.callee.toString() ;//だとfunction以降の中身が表示されて、関数の名前は表示されない。 s2=arguments.callee.name;// だとnetscapeでは関数の名前が表示されるらしいがJscriptでは使えない。 WScript.Echo(s1 +"\n"+ s2); }; functest(); ということでいろいろ聞きたかったんだが function functest(a){ とやることで名前を取得できるメドが立ちましたw 一応チラ裏ってことでメモ。
378 名前:デフォルトの名無しさん mailto:sage [2010/07/17(土) 13:59:43 ] IE8に標準のデバッガ使うのはどうだ?ラッパー関数つかって誤魔化せばどうにかなりそうだが。
379 名前:デフォルトの名無しさん mailto:sage [2010/07/20(火) 00:33:11 ] JScript(HTA)で 20→"\x20\00\00\00" // 32bitリトルエンディアン みたいな変換をする方法があったら教えてください バイナリ列を扱おうとして詰まった・・・(´・ω・`)
380 名前:デフォルトの名無しさん mailto:sage [2010/07/20(火) 01:05:23 ] >>379 20 => "\x14\x00\x00\x00" でよいのかな? それでよいなら無理やりだけど以下 function SaveBin(filename, bin) { var stm = new ActiveXObject("ADODB.Stream"); stm.Type = 1; // 1=adTypeBinary; stm.Open(); stm.Write(bin); stm.SaveToFile(filename, 2); // 2=adSaveCreateOverWrite } function CodeToBinary(code) { var uc1 = String.fromCharCode(code & 0xffff); var uc2 = String.fromCharCode((code >> 16) & 0xffff); var stm = new ActiveXObject("ADODB.Stream"); stm.Type = 2; // 2 = adTypeText stm.Charset = "UNICODE"; stm.Open(); stm.WriteText(uc1); stm.WriteText(uc2); stm.Position = 0; stm.Type = adTypeBinary; stm.Read(2); return stm.Read(4); } SaveBin("binary1.dat", CodeToBinary(20)) SaveBin("binary2.dat", CodeToBinary(65536))
381 名前:379 mailto:sage [2010/07/20(火) 02:32:44 ] >>380 レスありがとうございます >20 => "\x14\x00\x00\x00" でよいのかな? そうです。>>379 は誤りですorz そのような力業しかないのですか・・・ がんばってみます
382 名前:デフォルトの名無しさん mailto:sage [2010/07/20(火) 03:45:38 ] こういうのじゃだめなん? function toString32LE(code){ var s = ""; for (var i = 0; i < 4; ++i) { var n = code & 0xff; code = code >> 8; s += String.fromCharCode(n); } return s; } function parseString32LE(str) { return ( str.charCodeAt(0) + (str.charCodeAt(1) << 8) + (str.charCodeAt(2) << 16) + (str.charCodeAt(3) << 24) ) >>> 0; }
383 名前:380 mailto:sage [2010/07/20(火) 13:13:50 ] >>382 以前試したとき、文字列で保持するとファイル読み書きが うまくできなかった気がした バイナリファイルの解析みたいなものだとそれがネックになる 逆にいえば、それを気にしないか、あるいは読み書きがクリアできるなら 確かに文字列の方が楽だと思う JavaScriptで画像解析みたいなネタもどこかで見たので、 ひょっとするとそもそもそんな難しい問題ではないのかもしれないが
384 名前:デフォルトの名無しさん mailto:sage [2010/07/21(水) 03:22:23 ] JScriptのバイナリファイルアクセスは鬼門だよな。 書き出しはADODB.Streamをlatin-1で使えばいいとして、読み込みがしんどい。 バイナリタイプでは手も足も出ないからテキストタイプを使うしかないけど、 latin-1で読み込むと0x80-0x9fがutf-16の対応する文字に変換されちゃうし(逆変換で対応)、 utf-16で読み込むと先頭がBOMに一致する場合の対処が必要だし、 他のキャラクタセットだともっとめんどいし。
385 名前:デフォルトの名無しさん mailto:sage [2010/07/21(水) 15:29:48 ] そうかなぁ ADODB.Stream使えば読むのも書くのも自由自在だけど バイナリを1バイト置きにコピーしてUnicodeで見ればよい。
386 名前:デフォルトの名無しさん mailto:sage [2010/07/22(木) 00:54:32 ] 結局テキストファイルほど簡単にはいかなくて、>>380 みたいな変換処理が必要になるのか。
387 名前:デフォルトの名無しさん mailto:sage [2010/07/22(木) 02:41:08 ] 00-ffを透過するコードページを使う
388 名前:デフォルトの名無しさん mailto:sage [2010/07/22(木) 19:15:04 ] ADODB.Streamはマカフィーが問答無用で警告を出すのでちょっと使いにくい(特にスクリプトを配布する場合)
389 名前:デフォルトの名無しさん mailto:sage [2010/07/22(木) 19:49:06 ] HTML+JavaScriptでアプリ作成の決め手になるの?Titaniumってやつ。 Windows, Linux, Mac, Andoroid,iPhoneまで同じ技術でカバー出来るらしいが。 HTAみたいなもんか? オマイらどう思う? ここはAppcelerator Titaniumの日本語情報を整備するためのプロジェクトです。 クロスプラットフォームのアプリ開発としては非常に敷居が低く、javascriptだけでなくpythonやruby、phpなどを利用する事で、 webサービス系ライブラリの流用も可能であり、手軽なツールからサービスクライアントの作成が非常に容易になります。 * 2010/03/22 o 公開 ttp://www.appcelerator.com/products/download/ Titanium Desktopでアプリケーション開発中 ttp://blog.livedoor.jp/takabrk/archives/52647017.html Appcelerator Titanium DesktopでRuby,Python,PHPを使ったお手軽デスクトップアプリ開発その1 ttp://d.hatena.ne.jp/yuichi_katahira/20100219/1266605194
390 名前:デフォルトの名無しさん mailto:sage [2010/07/24(土) 09:49:36 ] 謎のオブジェクトを発見 rem a.vbs msgbox WSH Is WScript
391 名前:デフォルトの名無しさん mailto:sage [2010/07/24(土) 15:39:44 ] >>390 ほれ 謎のオブジェクトを発見.js for(var o in this){WScript.Echo(o);}
392 名前:デフォルトの名無しさん mailto:sage [2010/07/27(火) 11:04:47 ] //なるほど。その方法でも関数の名前が取得できるね。 getfunctionname=function(obj){ var sname;for(sname in obj){;}; return(sname); }; funtest=function(s){ var sret=getfunctionname(this); WScript.Echo('1 '+ function(){var s='';for(var o in this){s=o;};return(s); }() ); return(sret); }; WScript.Echo('この関数の名前は '+ funtest() );
393 名前:デフォルトの名無しさん mailto:sage [2010/07/28(水) 10:14:25 ] ログをExecelシートに貼り付け〜なんて非生産的な作業があって、これをKeyLoggerみたいなので 自動化できればと思いまして、WSHで作れるかなと思ったのですが。 あまり詳しくないんだけども、イベントを追跡してってソフトの起動、ボタンクリック等の操作を記録で きますでしょうか?それが無理ならキーボードのキーやマウス操作を記録して操作の再現ができますか?
394 名前:デフォルトの名無しさん mailto:sage [2010/07/28(水) 10:52:32 ] Excelのオブジェクトを操作するんじゃなくて、キー操作でうにゃうにゃしたいなら UWSCでいいんじゃないの?日本語HELPもある。ポータブルでも動くし。 途中で複雑な判断いらない処理なら、UWSCでキー操作を記録して片付けるのがいい。 WSHに詳しくて、その技術を使って途中でいろいろ処理を分けたほうがいいとしたら、 他のソフトに絡むとこだけUWSCで記録しといたマクロをRunさせてまぜて使うとか。 またはAutoItXのDLL使って、ほかのソフトと絡む部分だけ処理させる。 USBのフォルダにシステムからコピーしたWScript.ExeやCscript.exeとmanifestとDLL使えば UWSCと同じようにポータブルでも使える。
395 名前:デフォルトの名無しさん mailto:sage [2010/07/28(水) 16:58:13 ] excelでやれば
396 名前:デフォルトの名無しさん mailto:sage [2010/07/28(水) 22:50:48 ] ありがとうございますAutoItにUWSCですね。これはしかし動作を指定する必要がありますね。 癖とかありそうで結構手間がかかりそう。。 単純にWindows上の操作を一定期間記録して後で再現とか、できないんですかね。
397 名前:デフォルトの名無しさん mailto:sage [2010/07/29(木) 02:52:53 ] すれ違いだよ
398 名前:デフォルトの名無しさん mailto:sage [2010/07/29(木) 02:59:51 ] ソフト板で聞け
399 名前:デフォルトの名無しさん mailto:sage [2010/07/29(木) 03:21:57 ] 謎のオブジェクトを発見 rem a.vbs msgbox typename(me)
400 名前:デフォルトの名無しさん [2010/07/29(木) 05:19:19 ] >>396 こいつ、UWSCについて調べずに書き込んだな。
401 名前:デフォルトの名無しさん mailto:sage [2010/07/29(木) 08:02:10 ] >>単純にWindows上の操作を一定期間記録して後で再現とか、できないんですかね。 UWSCってそういうことするためのソフトなんだが・・・
402 名前:デフォルトの名無しさん mailto:sage [2010/07/29(木) 09:52:25 ] ゴメンさらっと見てそういう事ができると思わなかった。UWSC便利ですね。 複数のソフトをダウンロード&自動インストールなんて事もできるんだろうか・・ ちょっと使ってみます。どうも。
403 名前:デフォルトの名無しさん mailto:sage [2010/07/31(土) 17:11:20 ] Document.body.innerTextでWeb上の文字列を取得し その文字列に含まれるキーワードを検索して 発見した場合の処理と見つからなかった時の処理をするにはどうしたらいいでしょうか if ((IE.Document.body.innerText)==("文字列")) { //処理1 } else { //処理2 }; これだと動かないのです
404 名前:デフォルトの名無しさん mailto:sage [2010/07/31(土) 18:31:36 ] vbscriptならinstr()だな
405 名前:デフォルトの名無しさん mailto:sage [2010/07/31(土) 19:08:06 ] >>404 ありがとうございます JavaScriptではどうなのでしょうか
406 名前:デフォルトの名無しさん mailto:sage [2010/07/31(土) 19:21:28 ] Stringオブジェクトのメソッドに同じようなものがあるだろ
407 名前:デフォルトの名無しさん mailto:sage [2010/07/31(土) 19:33:28 ] match()?
408 名前:デフォルトの名無しさん mailto:sage [2010/07/31(土) 21:22:20 ] if( /hogehoge/i.test(IE.Document.body.innerText)){ / * true * /; ;}else{ / * false * / ;}; //正規表現のtestじゃだめか?
409 名前:デフォルトの名無しさん mailto:sage [2010/08/03(火) 15:41:46 ] >>403 自分は、この方法で逃げている。 if ((IE.document.body.innerText).indexOf("文字列") != -1) { // 処理1} else { // 処理2 }; VBSはシラネ
410 名前:409 mailto:sage [2010/08/03(火) 15:53:02 ] match()を使うなら、 if ((IE.document.body.innerText).match(/文字列/) != null) { // 処理1 } else { // 処理2 };
411 名前:デフォルトの名無しさん mailto:sage [2010/08/03(火) 17:43:08 ] Webページを操作するなら、スクリプト使うのが前提の NilとかBugとかプニルつかって、そっちのオブジェクトつかったほうがいいんじゃない? どうしてもIE使ったほうがいいの?
412 名前:デフォルトの名無しさん mailto:sage [2010/08/03(火) 20:15:08 ] >>409 のついでに質問してみる innerHTMLで文字列を発見した時その行のリンクをクリックするのは可能?
413 名前:409 mailto:sage [2010/08/03(火) 20:51:08 ] >>412 可能だとは思う。 該当するinnerHTMLが含まれている、"a"タグを特定して、.click()で出来るのでは。 自分は泥臭い方法でやってるけど、スマートな方法が有ったら教えて欲しい。 自分がやっている方法: for (var i = 0; i < IE.document.all.tags("a").length; i++) { if ((IE.document.all.tags("a")[i].outerHTML).indexOf("文字列") != -1) { IE.document.all.tags("a")[i].click(); // リンクをクリック後に行う処理 break; } }
414 名前:デフォルトの名無しさん mailto:sage [2010/08/03(火) 20:54:03 ] >>412 リンクからたどればよい for (i=0; i<ie.document.links.length; i++) { if (ie.document.links[i].innerText=="リンク文字列") { ie.document.links[i].click(); break; } } もし、リンク文字列ではない文字列から近隣のリンクを探したいってことならもっと面倒になる
415 名前:デフォルトの名無しさん mailto:sage [2010/08/03(火) 21:55:44 ] >>414 >もし、リンク文字列ではない文字列から近隣のリンクを探したいってことならもっと面倒になる それがやりたいけど方法が思いつかないのよね >>413 のように IE.document.all.tags("a")[i].click(); を使えばできるかもしれないけど これだと 目的のリンクをクリックしてくれるとは限らないというね
416 名前:デフォルトの名無しさん mailto:sage [2010/08/03(火) 21:59:15 ] >>415 indexOfで文字列を発見した所より前の文字列でIE.document.all.tags("a")[i].click(); を使う・・・あ できるかも ちょっとソースコード書いてみる
417 名前:409 mailto:sage [2010/08/03(火) 22:09:17 ] >>415 >>もし、リンク文字列ではない文字列から近隣のリンクを探したいってことならもっと面倒になる >それがやりたいけど方法が思いつかないのよね 文字列が、aタグの外に有る場合なの? 文字列0<a href="...">文字列1</a>文字列2 で、文字列1ではなく、文字列0や文字列2を探してクリックとか。 確かに面倒だね。 .parentNodeとか、.previosSiblingや.nextSiblingとか、ゴチャゴチャ使わないと駄目そうだね。
418 名前:409 mailto:sage [2010/08/03(火) 22:10:27 ] もう眠い。 今日は寝る。
419 名前:デフォルトの名無しさん mailto:sage [2010/08/03(火) 22:13:23 ] >>417 <a href="...">文字列1</a>文字列2 文字列2を検索するのは if ((IE.document.body.innerText).indexOf("文字列2") != -1) 文字列1を検索するには 文字列2より前の文字列を検索する必要がある
420 名前:デフォルトの名無しさん mailto:sage [2010/08/03(火) 22:20:14 ] >>419 調べてみたら使えそうなものがあった lastIndexOf これでソースコードを完成できるよ みんなありがとう
421 名前:デフォルトの名無しさん mailto:sage [2010/08/03(火) 22:43:38 ] for (i=0;i< IE.document.all.tags("a").length; i++) { if ((IE.document.all.tags("a")[i].outerHTML).lastIndexOf("文字列2") != -1) { IE.document.all.tags("a")[i].click(); これじゃだめなのか・・・
422 名前:409 mailto:sage [2010/08/04(水) 06:50:25 ] >>421 それ、後方から文字列を探すやつ。 前方から探すより、後方から探す方が探す時間が短い場合が有るから、そういう時に自分は使っている。 例えば、文字列1と文字列2が、非常に酷似していて、最後の数文字だけが異なる様な場合、比較回数が多分少ないのではないかと… <a href="...">[文字列A][文字列1][文字列B][文字列2][文字列C]</a> とかの場合。
423 名前:409 mailto:sage [2010/08/04(水) 15:22:56 ] >>421 HTMLのタグ構造がどうなっているか示さないと、一体何をしたいのか分からないと思うよ。 (1) <div><a href="...">文字列1</a>文字列2</div> となっているのか、 (2) <a href="...">文字列1</a><p>文字列2</p> となっているのか等。 (1) の場合、 for (var i = 0; i < IE.document.all.tags("a").length; i++) { if ((IE.document.all.tags("a")[i].parentNode.indexOf("文字列2") != -1) { IE.document.all.tags("a")[i].click(); break; } } (2) の場合、 for (var i = 0; i < IE.document.all.tags("a").length; i++) { if ((IE.document.all.tags("a")[i].nextSibling.outerHTML).indexOf("文字列2") != -1) { IE.document.all.tags("a")[i].click(); break; } } とかじゃ駄目かな? 試してないから分からないけど。
424 名前:409 mailto:sage [2010/08/04(水) 15:29:47 ] それより、JScriptからファイルをランダムアクセスする事って出来ないのかなぁ? JScriptから利用出来るフリーのDLLとか有れば良いんだけど。 Perl等のファイルにランダムアクセス可能なスクリプトからIE操作すれば、一番良いんだろうけど、 PerlもVBも分かんねーし。
425 名前:デフォルトの名無しさん mailto:sage [2010/08/04(水) 18:06:24 ] >>ファイルをランダムアクセスする ???
426 名前:デフォルトの名無しさん mailto:sage [2010/08/04(水) 21:24:12 ] >>424 adodb.streamは?
427 名前:デフォルトの名無しさん mailto:sage [2010/08/05(木) 08:18:18 ] IEのボタンクリック VBSだとちゃんとできるのにJScriptだとできないなぜだぁぁぁぁ <form action="." method="post" > <input type="hidden" name="...." value="..." class=""> <input type="hidden" name="..." value="..." class=""> <input type="hidden" name="..." value="..." class=""> <input type="hidden" name="..." value="..." class=""> <input type="hidden" name="..." value="..." class=""> <input type="hidden" name="..." value="...." class=""> <center> <input type="submit" value="..." class="..."> </center> </form> VBS : IE.Document.Forms(0).Item(6).click JScript : IE.Document.forms(0).Item(6).click();
428 名前:デフォルトの名無しさん mailto:sage [2010/08/05(木) 09:31:37 ] これも反応しない <input type="text" value="" size="20" class="test"> IE.Document.forms(0).Item(0).value = "あああ"
429 名前:デフォルトの名無しさん mailto:sage [2010/08/05(木) 10:22:11 ] そういうことなら、その部分だけとりあえずはスクリプトコントロールで逃げといて、あとでじっくり考えるw
430 名前:デフォルトの名無しさん mailto:sage [2010/08/05(木) 22:30:49 ] JScriptで普通にいけるんじゃないの? ie = new ActiveXObject('InternetExplorer.Application'); ie.visible = true; ie.navigate('www.google.co.jp/ ') WScript.Sleep(2000); ie.document.forms(0).item(2).value='WSH'; ie.document.forms(0).item(3).click();
431 名前:デフォルトの名無しさん mailto:sage [2010/08/06(金) 08:25:47 ] >>430 どうもそのページだけできないんだ 入力フォームをクリックするとフォームの横に文字が表示されるものだから Inputタグのclassが怪しいと思うんだが
432 名前:409 mailto:sage [2010/08/06(金) 12:13:20 ] >>431 nameやclassの属性がformsになっていたりしない?
433 名前:デフォルトの名無しさん mailto:sage [2010/08/06(金) 12:30:33 ] >>432 なってない さすがにそんなミスはない
434 名前:デフォルトの名無しさん [2010/08/06(金) 13:04:00 ] wshでツールチップを指定した座標位置に表示させることは可能ですか?
435 名前:デフォルトの名無しさん mailto:sage [2010/08/06(金) 13:16:46 ] AutoItX使えば出来る。 oAutoIt = new ActiveXObject( "AutoItX3.Control.1" ); oAutoIt.ToolTip("WSH★★★こんばんみ★★★Part7",500,500);
436 名前:デフォルトの名無しさん mailto:sage [2010/08/08(日) 11:53:00 ] if文でWEB上にボタンがある時の処理とない時の処理をする方法ってある?
437 名前:409 mailto:sage [2010/08/08(日) 19:39:00 ] >>436 outerHTMLを取得して、解析すれば良いだけでは? ボタンがFlashとか、HTML以外だと厄介だけど。 見た目がボタンでも、 type = "button" の場合と、 type = "image" の場合が有るから、また厄介だけどね。
438 名前:デフォルトの名無しさん mailto:sage [2010/08/08(日) 21:17:28 ] >>437 なるほどそれがあったか・・・ と なると if ((IE.Document.body.outerHTML)==(IE.Document.forms[0])) { WScript.echo("YES")} else{WScript.echo("No")} こうかな・・・
439 名前:409 mailto:sage [2010/08/08(日) 21:33:13 ] >>438 それだと、うまくいかないでしょ。
440 名前:デフォルトの名無しさん mailto:sage [2010/08/08(日) 21:58:08 ] >>439 となると if ((IE.Document.body.innerText)==(IE.Document.body.innerText.indexOf("form"))){ //処理 } else { //処理2 } こう・・・でもないな
441 名前:デフォルトの名無しさん mailto:sage [2010/08/08(日) 22:07:32 ] innerTextでページ内のHTMLを・・・ ・・・あれ? if ((IE.Document.body.innerHTML)==(IE.Document.body.innerHTML.indexOf("form"))) これでもだめ?
442 名前:デフォルトの名無しさん mailto:sage [2010/08/08(日) 22:13:58 ] innerHTMLでページ内のHTMLを全部取り出すんだから innerHTML.indexOf("文字列") で検出した文字列とinnerHTMLのソースと照らし合わして処理・・・じゃないのか? ならなんで動かないのかと
443 名前:409 mailto:sage [2010/08/08(日) 22:15:05 ] >>441 その条件式では、左辺値と右辺値は永遠にイコールにはならないから。
444 名前:デフォルトの名無しさん mailto:sage [2010/08/08(日) 22:22:21 ] >>443 IE.Document.body.innerHTML.indexOf("form")は文字列を検出して表示するんじゃないのか? 文字列があるならその文字列を表示してなければ-1だったはずだが それと左辺値を比較して左辺値の文字列の中に右辺値の検出した文字列があれば処理1 なければ処理2じゃないのか?
445 名前:デフォルトの名無しさん mailto:sage [2010/08/08(日) 22:33:22 ] あぁ・・・そういうことね 左辺値からすでに間違えていたのか俺は if((IE.Document.body.innerHTML.match("form")==("form")) 左辺値がソース全体だったら右辺値はformだけでソースとまったく一致しない ならば左辺値をソース全体からformだけを検出し なければnull それを右辺値と比較 こんな簡単なことに気付かなかった自分が恥ずかしいわ。。。
446 名前:409 mailto:sage [2010/08/08(日) 22:39:18 ] >>444 indexOfの説明を良く読んだ方がいいと思う。 ttp://www.microsoft.com/downloads/details.aspx?familyid=e74494d3-c4e1-4e18-9c6c-0ea28c9a5d9d&displaylang=ja から、 scd56jp.exe をダウンロードし、インストールすればヘルプファイルがインストールされると思う。 直リンクはこちら ttp://download.microsoft.com/download/winscript56/Install/5.6/W98NT42KMe/JA/scd56jp.exe 結構役に立つ。 あと、 IE Developer Toolbar も便利。 ttp://www.microsoft.com/downloads/details.aspx?FamilyID=e59c3964-672d-4511-bb3e-2d5e1db91038&displaylang=en
447 名前:デフォルトの名無しさん mailto:sage [2010/08/09(月) 01:17:32 ] www.mbga.jp/.pc/_u?u=14965811&_root=msg_list www.mbga.jp/.pc/_dia_list?u=14965811&_from=u_dia この子ね >>403 と全く同じ質問しててワラタ ポイント稼ぐために、必死こいてスクリプト組んでるみたいよw
448 名前:デフォルトの名無しさん mailto:sage [2010/08/09(月) 09:59:26 ] >>447 ワロタ なんだこのハゲ リアルでのハゲなのか?w
449 名前:デフォルトの名無しさん mailto:sage [2010/08/09(月) 13:35:23 ] IEで document.location.reload() はできて document.location.back() はできないんだな
450 名前:デフォルトの名無しさん mailto:sage [2010/08/09(月) 13:51:43 ] document.histry が使えないって・・・
451 名前:409 mailto:sage [2010/08/09(月) 18:45:15 ] ところで、WSH使いって、仕事の案件等の為に使っている人と>>447 みたいな人とどっちが多いの? 自分は>>447 の様な理由でやってるだけだけどさ。 プログラムは20年近く昔に学生の頃に授業でFortran77とLispのS式を習った程度。 学生時代、一緒だった人は何だか未踏のスーパークリエイターで表彰台に上っている写真がIPAのサイトに掲載されてたけどさ。 楽天のメルマガが1週間で2千通を超えるので、メルマガ解除用のスクリプトでも書くか…
452 名前:デフォルトの名無しさん [2010/08/11(水) 17:17:28 ] 過疎だなぁ WSHってそんなにマイナーかな
453 名前:デフォルトの名無しさん mailto:sage [2010/08/11(水) 17:25:57 ] 作者タンがカキコしてくれないからな。
454 名前:デフォルトの名無しさん mailto:sage [2010/08/11(水) 17:40:27 ] ハゲでも誰でもいいから来てくれ…
455 名前:デフォルトの名無しさん mailto:sage [2010/08/13(金) 01:19:09 ] みんな暇そうだから質問投下 VBSで多重起動を防止するのをJSでできるか FSOだとロックファイルの作成と削除はできるけど 重複した時の処理が分からない
456 名前:デフォルトの名無しさん mailto:sage [2010/08/13(金) 04:56:28 ] >VBSで多重起動を防止するのをJSでできるか この意味が分からないけど、 単純に多重起動を抑止するなら、 1. アプリ起動時にロック用フォルダを作成 2. アプリ起動時にロック用フォルダを削除 1. のフォルダ作成に失敗したらほかのインスタンスが起動中なので、メッセージを表示して終了 でダメなの?
457 名前:デフォルトの名無しさん mailto:sage [2010/08/13(金) 17:11:53 ] blogs.msdn.com/b/ie/archive/2010/08/04/html5-modernized-fourth-ie9-platform-preview-available-for-developers.aspx Nanalich 5 Aug 2010 7:50 PM Is it still possible to use the new JScript engine with ECMAScript 5 features outside of IE? Like in WSH and/or HTA? EricLaw [MSFT] 6 Aug 2010 6:55 AM JScript9.dll is not presently supported for use outside of IE9, HTAs, and Web Browser controls, so no, it won't be loaded by WSH. もしかしてWSH切り捨て?