2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

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

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

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

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

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

前スレ
お前ら、wsh使ってますか? Part7
http://hibari.2ch.net/test/read.cgi/win/1190548945/

800 :796:2015/11/10(火) 22:41:08.95 ID:HDYxoiSR.net
>>798
ありがとうございます。ひとまず動くようになったみたいです。本格稼働してみて何かあればまた相談させてください

>>799
なんか難しそうですね。動かないスクリプトの先頭行にこれを書けばいいのでしょうか
解読してみます

801 :名無し~3.EXE:2015/11/14(土) 19:19:55.55 ID:RNO50Lcc.net
横からだけど%*ってどういう意味だっけ

802 :名無し~3.EXE:2015/11/15(日) 00:45:26.56 ID:t8TVpiZ9.net
>>801
コマンドラインのパラメータ全部。

いつのまにかイテレータがうごくようになってるな。

803 :名無し~3.EXE:2015/11/23(月) 23:05:48.47 ID:nD0rlIIZ.net
Win10 th2でES6 Classesを使うテスト

http://i.imgur.com/DecbQfs.jpg

804 :名無し~3.EXE:2015/11/27(金) 07:18:59.11 ID:dOr9jkTm.net
var a;
a = eval("[\"abc\",\"def\"]");
WScript.Echo(a[0]);
→abc
は実行出来るけど
var a;
a = eval("{\"abc\":\"def\"}");
WScript.Echo(a["abc"]);
はevalでエラーになります。これはどうにもならないのかな・・・

805 :名無し~3.EXE:2015/11/27(金) 10:21:31.24 ID:arQh0ET8.net
>>804
a = eval("({\"abc\":\"def\"})");

806 :名無し~3.EXE:2015/11/27(金) 10:31:50.40 ID:EYEBJY2Y.net
>>804
ttp://language-and-engineering.hatenablog.jp/entry/20081022/1224597688

{x:1}
は,なんと「ラベル付きの文が中括弧でくくられている」とみなされ,
obj = eval( "{x:1}" );
の結果,objの値に数値1が代入される。

プロパティが複数ある場合には,
{x:1, y:2}
の最初の x: のあとの部分が「文」にならないので,「セミコロンがありません」というエラーになる。

一つの解決法は,丸括弧 () でくくること。
var str = "({x:1})";
とすれば,evalで評価した時にハッシュとして正常に解釈される。

丸括弧によって「中身はオブジェクトです」という意思表示ができるのである。

807 :名無し~3.EXE:2015/11/27(金) 10:53:52.55 ID:S4fdjd37.net
へー

808 :名無し~3.EXE:2015/11/27(金) 11:01:56.93 ID:OG/mUtfI.net
('A`)

809 :804:2015/11/30(月) 07:37:01.15 ID:cxJdiq6h.net
>>805-806
おぉ、出来ました。ありがとうございました

810 :名無し~3.EXE:2015/12/05(土) 13:10:21.50 ID:HCxkbB1B.net
ADODBのStreamで限定的ながらバイナリファイルを読み書き出来ますけど
裏技っぽい感じですしWSHが使えるすべてのWindowsで期待した動作をするのでしょうか?
この実装でバイナリファイルを正常に読めることを前提としたスクリプトの配布を
考えているのですがちょっと不安です

811 :名無し~3.EXE:2015/12/05(土) 13:52:03.81 ID:8/N/dh/l.net
>>810
多分大丈夫っぽいけど、書き方によってはセキュリティソフトの一部(Aviraとか)で誤検出されるので注意

812 :名無し~3.EXE:2015/12/05(土) 15:13:48.75 ID:K/bXQx4S.net
>>810
裏技っぽいですか?

813 :名無し~3.EXE:2015/12/05(土) 21:39:57.73 ID:TC+kSar6.net
むしろこれがないとバイナリ扱えないでしょ画像を扱えなくなる
裏技っぽいとか今更言われても困るわ

814 :名無し~3.EXE:2015/12/05(土) 22:45:26.11 ID:HCxkbB1B.net
ありがとう。大丈夫らしいとのことなのでとりあえず組んでみるかな・・・
あまりにも遅かったらRubyにしよう

>>812
読み込んだ値をテーブルで変換したりビット演算したりしないと
正しい値を得られない仕様を正攻法と呼ぶのは違和感があります
このために1byteずつしか読み込めませんし

815 :名無し~3.EXE:2015/12/05(土) 23:05:01.61 ID:4BdTphf4.net
ドキュメント化されてる機能が裏技?

https://msdn.microsoft.com/ja-jp/library/cc364272.aspx

816 :名無し~3.EXE:2015/12/05(土) 23:23:02.80 ID:8/N/dh/l.net
>>815
ADODBそのものじゃなくて、
iso-8859-1で1バイトずつテキストリードして変換する方法がイリーガルだと言ってるんだろう

817 :名無し~3.EXE:2015/12/05(土) 23:31:52.89 ID:8/N/dh/l.net
これは>>814のレス内容からの推測なので違ってるのかも知れない
jscriptだと勝手に思ったし、jscriptでも
wsfとかでvbscript連携して読むなり
Msxml2.DOMDocumentでhex文字列に変換するなり別の方法はあるとは思う

818 :名無し~3.EXE:2015/12/06(日) 00:42:46.08 ID:F68eazf1.net
VBScriptの記事だとこの辺か。
ttp://history-music.net/vbscript-base64-hex-binary/

ググると「iso-8859-1で...」みたいなページが多いから勘違いするのも仕方がないけど,
Microsoft.XMLDOMかMsxml2.DOMDocumentオブジェクト使って,
16進文字列とバイナリを相互変換する方がいいよ。
1byteずつなんて制限はないし,十分早いと思う。

819 :名無し~3.EXE:2015/12/07(月) 17:51:14.07 ID:vQfNZVDF.net
ごめん、変換とかいうはなしはどこから出てくるんだろう。
「バイナリファイルを正常に読めることを前提」とあるから
まあバイナリファイルを読んで何かするんだろうけど。

820 :名無し~3.EXE:2015/12/07(月) 17:53:50.73 ID:UNNqcniz.net
>>819
>>814に以下のようにあることからの推測さ

>読み込んだ値をテーブルで変換したりビット演算したりしないと
>正しい値を得られない仕様を正攻法と呼ぶのは違和感があります
>このために1byteずつしか読み込めませんし

821 :名無し~3.EXE:2015/12/07(月) 17:57:55.04 ID:vQfNZVDF.net
>>816
なるほど。、ADODB云々というより「JScriptでバイナリ操作をする」ということ自体のことを言ってるんだろうか。
たぶん。

822 :名無し~3.EXE:2015/12/07(月) 18:05:05.11 ID:vQfNZVDF.net
この辺の話か。なるほど。

FileStream.js - binary file manipulation for WSH
http://hp.vector.co.jp/authors/VA033015/fsjs.html

前提条件/制約とのトレードオフだろうね。
「OSの素のままの状態でスクリプトだけで動く」必要があるならWSHでやるしかなかろう。

823 :名無し~3.EXE:2015/12/07(月) 18:12:43.86 ID:UNNqcniz.net
>>822
だから結論はそんな歪なことしないで>>818の言うようにしろってことさ
WSHだけって言っても、ADODB使うのならMsxml2.DOMDocumentも使っても同じことだろ

824 :名無し~3.EXE:2015/12/07(月) 18:32:53.45 ID:vQfNZVDF.net
>>823
まったくその通りだ。

おかげでこんなのを見つけた。ありがとう。

JScriptでBase64 on @Qiita
http://qiita.com/tnakagawa/items/beaec98fd64b20894245

825 :名無し~3.EXE:2015/12/10(木) 00:17:53.24 ID:n+FmGR1Q.net
>>822
そのプログラムにはバグがあります。
ファイル終端付近に 0xBF があると,数バイトを読み落とします。
たとえば,半角カタカナで
クソミソ
とだけ書かれたファイルを dump.js に与えると,最初の1バイトしか出力されません。

826 :810:2015/12/13(日) 20:21:45.77 ID:E2f6+XvN.net
ありがとうございます。試していて大分かかりました

>>818
>ググると「iso-8859-1で...」みたいなページが多い
はい、その通りでiso-8859-1を使う方法しかないと思っていました
ADODB.Stream&Type=1でAviraが騒ぐ以外は問題なさそうなので
これでいこうと思います。ありがとうございました

byte列の長さを容易に得られない?のがちょっと面倒ですね

827 :名無し~3.EXE:2015/12/14(月) 01:24:17.95 ID:ZAD57Ykk.net
>>826
> byte列の長さを容易に得られない?のがちょっと面倒ですね



確かに。
バイナリオブジェクトには長さどころか,プロパティもメソッドも何もないように見えます。

ADODB.Stream で Read する前後の .Position の差を覚えておくのが最良ですが,
後から得ようとするのも,困難というほどでもないですね。



(1) ADODB.Stream で .Position = 0 からバイナリを Write した後の .Position を返す関数を作る。

(2) Msxml2.DOMDocument で .nodeTypedValue へバイナリをセットし,.text.length / 2 を返す関数を作る。



どちらもクロージャにした方が速いですね。

828 :名無し~3.EXE:2015/12/21(月) 08:04:57.72 ID:oIXUP+md.net
var fs = new ActiveXObject( "Scripting.FileSystemObject" );
fs.DeleteFile( "B:/VwCache/*.vch" );
fs = null;

これが該当ファイル無しのときエラー出なくしたい
こんなレベルの質問扱ってるスレ教えてください

829 :名無し~3.EXE:2015/12/21(月) 08:58:20.76 ID:9BHMYjvS.net
>>828
FileExistsでファイルがある場合に消す。
もしくは、on error resume nextでエラーを無視するとか。

830 :名無し~3.EXE:2015/12/21(月) 15:26:06.84 ID:tdjWLmvu.net
いやjscriptだろ
try 〜 catch(e)で囲むだろ
だけど、*.vchがファイル名を隠しているんじゃなく、
ワイルドカードで複数ファイル指定のつもりならダメだろ

831 :名無し~3.EXE:2015/12/21(月) 15:30:35.86 ID:tdjWLmvu.net
あ、ワイルカード使えるのか、知らんかった

832 :名無し~3.EXE:2015/12/22(火) 23:22:55.99 ID:XxXraRyZ.net
>>828
ここでいいのでは?

833 :名無し~3.EXE:2015/12/23(水) 15:52:38.58 ID:8RHLFxCl.net
>>828
ワイルドカードで指定してファイル削除
http://okwave.jp/qa/q5625898.html

834 :名無し~3.EXE:2016/01/02(土) 02:41:57.72 ID:8rznOPo8.net
JScriptで展開されていないコマンドライン文字列を取得することは出来ませんかね?
コマンドラインオプションを改変するラッパーを作りたいのですがWScript.Arguments
だと展開されて"が削除されていて再構成するのがかなり手間になってしまいます

835 :名無し~3.EXE:2016/01/02(土) 18:34:26.41 ID:J4AIyaR1.net
>>834
どうしても,というなら方法はないでもない。

WMIから自分自身のプロセスを見つけ出せば,
生のコマンドライン(Description)が得られるので,それを解析すればよい。
wsh WbemScripting.SWbemLocator Win32_Process
あたりをキーワードにググってください。

836 :名無し~3.EXE:2016/01/05(火) 17:47:40.34 ID:tW2wW1r9.net
>>835
面白そうなので試してみた
自プロセスを特定するのと引数から無効なものを除外しなくてはならないのがマイナス点

・自プロセスの特定
  wscript.exeまたはcscript.exeでイメージ名を検索するだけでも大抵は大丈夫だろうが
  もう少し厳密にやろうとすると引数に自scriptファイル名があるかどうかをチェック
  さらに多重起動の場合も考慮してもっと厳密に特定しようとするなら
  何か子プロセスを起動(cmd.exeとか)し、そのPIDでクエリーを限定し、
  親PID(これが自プロセスになる)を求める

  もっと簡単な方法何かある?

・引数からcscript.exeの引数を削除する
  例えば、 cscript xxx.js "a" 1 "b" //nologo "c"
  とかだと、//nologoは取り除かないといけない

837 :834:2016/01/05(火) 21:10:05.30 ID:MtYMuNGE.net
ありがとうございます。作っている途中で親となるプログラムがcscript.exe hoge.jsな感じで
呼び出せないことが判りバッチファイルもどきになりました・・・
@if(0)==(0) ECHO OFF
set COMMANDLINE=%CMDCMDLINE%
cscript.exe //nologo //E:JScript "%~f0"
set COMMANDLINE=
GOTO :EOF
@end

var shell = new ActiveXObject("WScript.Shell");
var env = shell.Environment("Process");
command_line = env.Item("COMMANDLINE")
WScript.Echo(command_line);

838 :名無し~3.EXE:2016/01/05(火) 21:41:47.92 ID:tW2wW1r9.net
>>837
直接batを起動する場合はいいけど、コマンドプロンプトから起動するとダメですぜ
それにbatでいいなら、
@echo %*
の一行で終わる

839 :834:2016/01/05(火) 22:43:02.46 ID:MtYMuNGE.net
>>838
親となるプログラムは直接起動してくれるので問題ないです
コマンドプロンプトから起動する場合はcmd.exe /cを付ければ良いかと
実際には>>837の後ろで正規表現を使いコマンドラインオプションを
処理しているのでバッチファイルのみでは厳しいです

840 :名無し~3.EXE:2016/01/11(月) 22:00:15.25 ID:J7oSqT1d.net
var fso = new ActiveXObject("Scripting.FileSystemObject");
var ws = WScript.CreateObject("WScript.Shell");
WScript.Echo(fso.GetAbsolutePathName(args(0)));

「ハート?はーと.txt(?はユニコードのハートマーク)」と「ハート_はーと.txt」が同じフォルダに有る場合に、
ユニコードハートマーク付きのファイルを上記のバッチにD&Dするとアンダーバーの有る「ハート_はーと.txt」が返ってくる。
js vbs wsf 全部だめ。
アンダーバーだけでなく、ハートマークの場所にascii文字が一文字入る一字違いのファイルを誤検索しているみたい。

batファイルでフルパスをechoさせると正しい名前が返ってくるので、bat経由でjsに引数が渡すと正常になった。
でもbat使うのは癪なのでwshだけで回避する方法ありませんか?

841 :名無し~3.EXE:2016/01/11(月) 23:36:21.38 ID:kaus+mbm.net
>>840
上手くいくか判らないけどWMIで自プロセスのコマンドライン文字列を取得するのはどう?
WSHだとプロセスIDの取得が難しいので工夫する必要があるけど

842 :840:2016/01/12(火) 00:23:54.95 ID:zJG24SyX.net
>>841
>>834からのやり取りを読んだけど、自分にはまだ難しすぎる

843 :名無し~3.EXE:2016/01/15(金) 14:05:01.93 ID:1cRaToeH.net
Windows7 64bitでIE10からIE11にしたら今まで使えていたログインスクリプトでエラーが出るようになりました
原因が分からないので助けてください

IE = WScript.CreateObject("InternetExplorer.Application");
IE.Visible = true;
IE.Navigate("https://hogehoge/login");
WScript.Sleep(10000);

IE.Document.forms(0).elements("id").value = "hogeID";
IE.Document.forms(0).elements("password").value = "hogePASS";//フォームに入力はできている
IE.Document.forms(0).all.tags("INPUT").item(2).click();//←IE11ではここでエラーが出るようになった
WScript.Quit(0);


エラーの内容は「IE.Document.forms(...).allはNullまたはオブジェクトではありません」です。
よろしくお願いします。

844 :名無し~3.EXE:2016/01/15(金) 19:15:04.74 ID:m4ouY6Y+.net
submitじゃいかんのか?

845 :名無し~3.EXE:2016/01/15(金) 20:07:12.70 ID:2oeFgdaL.net
ちょっとは自分で調べようぜ、拾った物の使い回しで意味分かってないんだろうけど
原因はIE11からdocument.all等の独自APIが廃止されたから
そもそも今時allとかtagsとかつかわねーよ

846 :名無し~3.EXE:2016/01/16(土) 20:44:38.70 ID:4ar8fcff.net
>>842
主観だけどWindows上で動くスクリプト言語でUnicodeの引数は結構鬼門な印象がある
最近RubyでUnicodeな引数を受け取りたくなってRubyスレで聞きながら試したけど
WMIかWin32APIでコマンドライン文字列を取得するくらいしか手は見つからなかった
スクリプトエンジンだけではなくcmd.exeとの絡みもあるので使える選択肢は少ないと思う

>>837の方法が嫌ならWMIから取得するしかないんじゃないかなと個人的には思う

847 :843:2016/01/20(水) 19:33:11.23 ID:FcdOnjAY.net
>>844>>845
遅れましたがお答えありがとうございました
エラーが出ていた箇所をこれにして動くようになりました
IE.Document.forms(0).getElementsByTagName("input")[2].click();

848 :名無し~3.EXE:2016/02/04(木) 19:41:28.05 ID:WGr+Whcp.net
jsにデストラクタってないの?
ラップしたエクセルの終了処理をやらせたいんだが

849 :名無し~3.EXE:2016/02/04(木) 23:22:04.84 ID:pXBj/cEo.net
>>848
VBSでいう Set objExcel = Nothing 相当の処置のこと?
JSだと objExcel = null; でいいみたい。

850 :名無し~3.EXE:2016/02/04(木) 23:34:03.33 ID:z164XvtZ.net
>>849
Class ExcelWrapper
Private Sub Class_Terminate
' VBSでいうならこれ
End Sub
End Class

jsの言語仕様としては無いんだろうけどなんかトリック的に実現する方法はないんか

851 :名無し~3.EXE:2016/02/05(金) 08:00:12.79 ID:gYQ45IAX.net
>>848
OLEで起動したExcelがスクリプトが終了するまで終了してくれないという話?

852 :名無し~3.EXE:2016/02/05(金) 18:33:52.63 ID:YVp5K4JV.net
>>851
どこからも参照されなくなったら、メンバのExcel.ApplicationをQuitするようなオブジェクトを作れるかって話
やっぱり無理くさいな(´・ω・`)

853 :名無し~3.EXE:2016/02/05(金) 18:52:01.85 ID:ZPb/lDba.net
finallyでEXCELの終了処理でいいんじゃないの、それともフックの解放とかそういう意味なの

854 :名無し~3.EXE:2016/02/05(金) 18:56:57.56 ID:YVp5K4JV.net
>>853
finallyとか面倒くさい。オブジェクトにやらせたい
newしたらエクセルが立ち上がり、変数がスコープから外れたら自動的ににエクセルが終わるようにしたい
フックの解放っていうのはよくわからん(´・ω・`)

855 :名無し~3.EXE:2016/02/05(金) 22:48:20.11 ID:0wOAx0Cl.net
無いものねだっているようにしか見えないんだが
WSHに限らずGCを持つ言語でデストラクタが
あるのってほとんど無くね?
ファイナライザを持つ言語ならそれなりにあるみたいだけど
これは実行される保証がないしな

856 :名無し~3.EXE:2016/02/05(金) 23:06:43.00 ID:qE3E4htL.net
結論は、無いものは諦めて、newした者が責任を持って解放する

857 :名無し~3.EXE:2016/02/06(土) 00:30:26.79 ID:RaAe5E/b.net
ふぁっく(´・ω・`)

858 :名無し~3.EXE:2016/02/09(火) 06:40:42.12 ID:lLVVtK0e.net
(new ActiveXObject("Scripting.FileSystemObject")).DeleteFile(WScript.ScriptFullName,true);

みたいにやったら自分自身のファイルを削除できますが
実行開始された後はファイルがどうなろうが問題ないと考えていいでしょうか?

859 :名無し~3.EXE:2016/02/09(火) 21:45:46.64 ID:4bXYgicd.net
>>858
捨てスクリプトファイル作って試してみればいいじゃない

860 :名無し~3.EXE:2016/02/10(水) 06:37:45.67 ID:t7gHrzUx.net
やってみた限りは問題なさそうなのですが
絶対に問題がないと言えるのか?と思いまして

861 :名無し~3.EXE:2016/02/10(水) 07:50:58.34 ID:t7gHrzUx.net
アクティブなウインドウを判定して、
キーを送りたいアプリがアクティブならキーを送る、ということをしたいと思い
探していたのですが
http://stackoverflow.com/questions/26341753/how-to-find-the-window-title-of-activeforeground-window-using-window-script-ho
ここを見ると、WSHでは出来ないというようなことが書いてありました
出来て当たり前の簡単な処理だと思うのですが、本当に出来ないのでしょうか?

862 :名無し~3.EXE:2016/02/10(水) 11:57:56.00 ID:9GMi27N7.net
WSHで出来なければ出来る言語でやればいいだけ
こんな所でゴネてないで自分の不勉強を猛省しろ

863 :名無し~3.EXE:2016/02/10(水) 13:12:04.28 ID:t7gHrzUx.net
WSHのいいところは簡単に使えるところなので
わざわざたとえばCを使わないといけないとなると本末転倒なのですよ
どう考えても実装も難しくもない、あって当たり前の機能ですよね
本当にないのかどうかは知りませんが

864 :名無し~3.EXE:2016/02/10(水) 14:06:37.17 ID:HysS88Z6.net
>どう考えても実装も難しくもない、あって当たり前の機能

だったらそーゆー機能があるCOMを自分で実装して
それをWSHから呼び出せばいい
難しくないんでしょ?

865 :名無し~3.EXE:2016/02/10(水) 14:50:28.68 ID:t7gHrzUx.net
いや、逆に難しいと思うんですか?
考えたら分かりますがめちゃくちゃ簡単ですよね?
「面倒くさい」と「難しい」は違うのです
分かりますね?

866 :名無し~3.EXE:2016/02/10(水) 16:18:49.46 ID:9GMi27N7.net
いくら煽っても「ほら出来るやん」なんて誰も調べてくれないしやってくれないよ

867 :名無し~3.EXE:2016/02/10(水) 18:27:12.59 ID:CIhAnhaS.net
>>861
そんな事やろうと思ったことないし
「出来て当たり前」「あって当たり前」とか言われても違和感しかない

868 :名無し~3.EXE:2016/02/11(木) 03:13:32.67 ID:co5P5jGL.net
そもそもwshの組み込み機能とは違い、COMの作り方次第になってくるんだから
そういうCOMを作るか探すかすればいい
WIN APIを呼び出すCOMなんてのも世の中には幾つかあるぞ

869 :名無し~3.EXE:2016/02/12(金) 09:42:04.77 ID:w4vWZ7y9.net
windowキーは^{ESC}で送れると分かったのですが
windowキーを修飾キーとして使う場合はどう書けばいいですか?

870 :名無し~3.EXE:2016/02/12(金) 11:40:40.49 ID:w4vWZ7y9.net
var result = GetObject("winmgmts:\\\\.\\root\\cimv2").
ExecQuery("Select * from Win32_Process where Name='hoge.exe'")

みたいな方法で返ってきたオブジェクトから
一つ目のアイテムを取得するにはどうすればいいですか?
ネットで探すと、
var list = new Enumerator(result);
みたいな形でEnumeratorに変換してから回すのが普通のようですが
結果が一つと分かっている時にこのやり方をするのは気持ち悪いです

871 :名無し~3.EXE:2016/02/12(金) 12:15:22.45 ID:1hkdGDkD.net
>>869
Windowsキー自体は多分送信できない
^({ESC})は、CTRL+ESCの送信であって、「スタートメニューを開く」という機能になる
結果はWindowsキーと同じ「スタートメニューを開く」という動作をするだけだと思う

>>870
配列等へのアクセスと異なり、COMのコレクションへの唯一のアクセス方法が
Enumeratorなので他の方法は無いと思われる
(VBSを呼び出してfor eachを使うと言うのは無しの方向で)

872 :名無し~3.EXE:2016/02/12(金) 14:47:51.21 ID:w4vWZ7y9.net
>>871
むーん、そうですか
ありがとうございます

873 :名無し~3.EXE:2016/02/12(金) 19:11:38.98 ID:Ax0/YVze.net
関数でラップしなさいよ

874 :名無し~3.EXE:2016/02/12(金) 21:58:43.39 ID:CAT/93Hm.net
>>870
Vista以降ならItemIndexメソッドが使える
XPならEnumeratorで頑張れ

GetObject("winmgmts://").ExecQuery("Select * from Win32_Process where Name='hoge.exe'").ItemIndex(0)

875 :名無し~3.EXE:2016/02/12(金) 23:07:45.95 ID:CAT/93Hm.net
SWbemObjectSet.ItemIndex method
https://msdn.microsoft.com/en-us/library/windows/desktop/aa826600(v=vs.85).aspx

876 :名無し~3.EXE:2016/02/21(日) 12:12:25.97 ID:14Rd5RPG.net
やや亀レスだが,全部まとめて AutoItX をインストールというかdllを登録すればできる。
http://blog.livedoor.jp/blackcode/archives/1795724.html


登録しなくてもマニフェスト作ればできる。

>>861 は AutoItX の WinActive と Send を使え。

>>869 は AutoItX の Send('{LWIN}') か Send('{RWIN}') を使え。

877 :名無し~3.EXE:2016/02/22(月) 21:04:18.77 ID:jrwG3GCh.net
WSHのメリットってWindows標準である事だと思う
オートメーションサーバーを持ち込むくらいならRubyなりPythonなりを
持ち込んで利用した方がより効率的に開発・実装出来るのでは

878 :名無し~3.EXE:2016/02/22(月) 22:34:35.27 ID:QBaH99ha.net
>>877
Pythonだけではできないから Sikuli や WebDriver や AutoItX があるわけなのだが

879 :名無し~3.EXE:2016/03/01(火) 09:01:36.69 ID:iP3HRupc.net
エンジニアのモチベーションを下げる方法
ttp://d.hatena.ne.jp/jflute/touch/20160221/downmoti

IT系のエンジニアは、なかなか世間一般の方々から、
やっていることを理解されにくいものです。
何が簡単で、何が難しいのか、なかなかわからないもの。
しかも、そう思われていることを、
エンジニア自身よくわかっていて、
それがコンプレックスでもあったりします。

開発しようとしている画面があったとして、
画面の見た目から来るイメージと、
実際のプログラミングの難しさはなかなか比例しません。
簡単そうな画面でも作るのは難しい、よくあることです。

なので、よくわかってないフリして、
「えっ、こんなの簡単に作れるでしょ?」
って言ってあげると、大抵「はぁ!?」って表情をします。

ちょっと納得がいかないだけなら、
モチベーションを下げたことにならないですが、
そういうことを何度も何度も言い続けることで、
「難しいことを実現しても評価されないのでは...」
って気持ちになるので、
しっかりモチベーションを下げられます。

実際に、難しい画面を頑張って速く作り上げたエンジニアに、
「あー簡単そうな画面だったもんね、じゃあすぐ次これ作って」
と、軽くあしらってあげると効果が相当高いです。

880 :名無し~3.EXE:2016/03/20(日) 17:58:54.66 ID:ftoiXc16.net
WScript.CreateObject("InternetExplorer.Application")
を利用してIEの自動操縦をしています
win10へのアップグレードを考えていたのですが
この手のスクリプトはwindows10で動くのでしょうか?

881 :名無し~3.EXE:2016/03/20(日) 18:17:57.40 ID:kfTLMDav.net
>>880
動くよ。

882 :名無し~3.EXE:2016/04/26(火) 02:43:57.89 ID:xrGaHN5D.net
htmlfileコンポーネントでダミーのwindowを作ってjsライブラリをロードするのはみんなやってると思う
そこでローカルフォルダの構造をdomに変換してjQueryをファイルセレクタ代わりにしてみた

// カレントディレクトリ以下の構造をbody内に再現する。File/Folderオブジェクトのプロパティはdata-*属性にしている
(function($folder, folder){
var keys = "Attributes DateCreated DateLastAccessed DateLastModified Drive Name Path ShortName ShortPath Size Type".split(" ");
for(var subFolders=new Enumerator(folder.SubFolders); !subFolders.atEnd(); subFolders.moveNext()) {
var subFolder = subFolders.item();
var $subFolder = $folder.append("<div>").find("div:last");
$subFolder.addClass("folder");
$.each(keys, function(){$subFolder.attr("data-"+this, subFolder[this]);});
arguments.callee($subFolder, subFolder);
}
for(var files=new Enumerator(folder.Files); !files.atEnd(); files.moveNext()) {
var file = files.item();
var $file = $folder.append("<div>").find("div:last");
$file.addClass("file");
$.each(keys, function(){$file.attr("data-"+this, file[this]);});
}
})($("body"), new ActiveXObject("Scripting.FileSystemObject").GetFolder(new ActiveXObject("WScript.Shell").CurrentDirectory));

// 例:テキストファイルをすべて選択
$(".file[data-Name$='\.txt']").each(function(){WScript.Echo($(this).attr("data-Path"));});

とりあえずアイディアを形にしただけなんでカスタムして使ってくれ(´・ω・`)

883 :名無し~3.EXE:2016/05/20(金) 01:19:03.63 ID:LoMnSF9C.net
エクセルのマクロをVBAやVB以外の言語で使いたいのですがWSHというのでJavaScriptを使うくらいしかないですか?
なんか難しそうなので扱えるかはわからないですが

884 :名無し~3.EXE:2016/05/21(土) 07:18:01.83 ID:KwoUOh5H.net
VBA使えるならVBScriptはほぼ同じ

885 :名無し~3.EXE:2016/05/21(土) 15:46:05.82 ID:r5Tb0hTU.net
ActiveXObject(

886 :名無し~3.EXE:2016/05/23(月) 19:28:44.88 ID:OI4UmGVD.net
Win10 64-bit で、WSCの登録を、
64-bitで行えば、32-bitアプリから起動したスクリプトで使えず、
32-bitで行えば、64-bitアプリから起動したスクリプトで使えず。
後から登録したほうだけが有効になる。
どうしたものか。

887 :名無し~3.EXE:2016/05/25(水) 13:06:05.60 ID:p984sqbS.net
どっちかに統一してwscriptなりのパスを絶対パス指定すりゃいいんじゃないの
今後bit幅判定は避けて通れないだろうし

888 :名無し~3.EXE:2016/05/25(水) 17:08:32.50 ID:LNEVb08i.net
32bit(64bit)で起動されたかを判断し違ってたら起動し直すってのは検索すれば出てくるので、
WSCをどっちかでのみ処置するようにするか、両方で別々に32bit用、64bit用の両方登録するかとか

889 :名無し~3.EXE:2016/05/26(木) 01:13:50.51 ID:c8sEm+SQ.net
JScriptでreplaceによる正規表現の置換で、
置換後文字列にキャプチャ文字列参照の特殊変数とその直後に数字を書きたい場合
どのように書けばいいですか?
例えば、$1で参照した文字列の直後に0を書きたいとかで
"$10"とやると、10番目のキャプチャ文字列の参照になっちゃう
他環境だと、"${1}0"と書けるみたいだがWSHでは参照にならない

890 :名無し~3.EXE:2016/05/26(木) 04:54:10.50 ID:2Z2dZzlv.net
$010

891 :名無し~3.EXE:2016/05/26(木) 18:15:27.58 ID:c8sEm+SQ.net
>>890
thx!

でも何でJScript(JavaScriptも同様だが)ってPerlとかと合わせなかったんだろう
鬼車やPerlだとこの記述じゃダメなんだよね、ややこしい

892 :名無し~3.EXE:2016/05/26(木) 19:15:53.60 ID:Am4E4DkT.net


893 :名無し~3.EXE:2016/05/28(土) 16:48:01.65 ID:8bw60KMu.net
C:\Windows\SysWOW64\cmd.exe
から
C:\Windows\System32\wscript.exe
を実行したら、
C:\Windows\SysWOW64\wscript.exe
が起動された。

C:\Windows\System32\cmd.exe
から
C:\Windows\SysWOW64\wscript.exe
を実行したら、これが起動した。

択一なら、32bitに統一する方が汎用性が高いということか。
そうしておくよ、ありがとう。>>887-888

894 :名無し~3.EXE:2016/06/20(月) 19:48:39.36 ID:r7gHHjMI.net
おいぽまいら教えろ下さい、dotnetのライブラリを叩く際にだね

これは動かない
var random = new ActiveXObject("System.Random");
random.Next(1, 10);

これは動く
var random = new ActiveXObject("System.Random");
random.Next_2(1, 10);

上が動かないのは分かる、型宣言が出来ないからだ
じゃあ下は何故動くんだ、この_2は何を意味するの

895 :名無し~3.EXE:2016/06/20(月) 20:14:06.28 ID:FmZLWojr.net
さあ

896 :名無し~3.EXE:2016/06/20(月) 21:44:37.70 ID:r7gHHjMI.net
ああ何となく事故解決した、オーバーロードなんて仕様ないからケツに数字付けて区別するのか
型宣言とか全く関係なかった、数字の振り方の規則性がこれまたよく分からんがトライアンドエラーしかないのか

ちなみにSystem.Randomだとこうなるみたい
Next()→Next()
Next(Int32)→Next_3(Int32)
Next(Int32, Int32)→Next_2(Int32, Int32)

897 :名無し~3.EXE:2016/07/18(月) 13:49:40.77 ID:FluRcm0P.net
すみません、全くの素人です。

アプリのアプリケーションキーの「(T)」を出力するだけのファイルを作りたいです。
どう書いたらいいですか。

898 :名無し~3.EXE:2016/07/18(月) 14:58:15.83 ID:FluRcm0P.net
自己解決

Set objShell = WScript.CreateObject("WScript.Shell")
WScript.Sleep 50
objShell.SendKeys "%(T)"

899 :名無し~3.EXE:2016/07/20(水) 11:55:20.08 ID:XFWp37Gp.net
vbsを使って社内システムへの自動ログイン処理をしたいと思っています。

yahooへは問題なくidpassを入れてログインできるのですが、社内システムの場合はエラーが表示されidpassも表示されません。
"エラーを特定できません"のエラーが表示されます。

どうも信頼済みサイトに登録されていることが原因というようなwebの記載を見つけました。
この場合は回避策はないのでしょうか。

総レス数 947
299 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
read.cgi ver.24052200