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


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

WSH(・∀・)スレッド! Part 4



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切り捨て?






[ 続きを読む ] / [ 携帯版 ]

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

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