X



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

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

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

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

前スレ
お前ら、wsh使ってますか? Part7
http://hibari.2ch.net/test/read.cgi/win/1190548945/
0002名無し~3.EXE
垢版 |
2010/12/19(日) 22:22:00ID:SZFqF39w
2 名前:名無し~3.EXE[sage] 投稿日:2007/09/23(日) 21:03:13 ID:2RosR0QK
●便利なリンク
Windows Script
http://www.microsoft.com/japan/msdn/scripting/default.asp
MSDN Library (オンラインドキュメント)
http://msdn.microsoft.com/library/ja/
Windows Script 5.6 ドキュメント ダウンロード (exe 形式; 1.67 MB)
http://download.microsoft.com/download/winscript56/Install/5.6/W98NT42KMe/JA/scd56jp.exe
OLE/COM Object Viewer ダウンロード (exe 形式; 656 KB)
http://download.microsoft.com/download/win2000platform/oleview/1.00.0.1/NT5/EN-US/oleview_setup.exe

Sesame Script (スクリプト作成初心者向けコラム)
http://www.microsoft.com/japan/technet/scriptcenter/resources/begin/default.mspx
Hey, Scripting Guy! (スクリプトのQ&A・ハウトゥ集)
http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/default.mspx
Windows管理者のためのWindows Script Host入門 (@IT内記事)
http://www.atmarkit.co.jp/fwin2k/operation/wsh01/wsh01_01.html
Windows XP に含まれるコマンドラインツールの紹介 (@IT内記事)
http://www.atmarkit.co.jp/fwin2k/xp_feature/013commandtool/commandtool.html
ADSI (Active Directory Service Interfaces) の特集記事全文
http://web.archive.org/web/20050309045811/http://www.galliver.co.jp/writing/nikkei_tokushu/wad002/index.html

●個人サイト
Windows Script Wiki
ttp://winscript.s41.xrea.com/wiki/index.php
趣味のJavaScriptなページ
ttp://homepage3.nifty.com/aya_js/
Windows Scripting Host Laboratory
ttp://www.roy.hi-ho.ne.jp/mutaguchi/wsh/
Tips - (小技にも満たない)微ワザ集
ttp://www1.u-netsurf.ne.jp/~tomo_c/tips/Scr002.html
0003名無し~3.EXE
垢版 |
2010/12/19(日) 22:23:08ID:SZFqF39w
●コンポーネント関連リンク

○Microsoft 製外部コンポーネント
DCOM
(98/Me ※リンク切れ) http://www.microsoft.com/japan/com/dcom/dcom98/dcom13.asp
(95)  http://www.microsoft.com/japan/com/dcom/dcom95/dcom13.asp
MDAC - データベース・メールボックス・WebDAV・バイナリの操作
http://msdn2.microsoft.com/ja-jp/data/aa937730.aspx
WMI(95/98/NT4.0) - 統一されたコンピュータオブジェクト化モデルを提供するスクリプティングAPI、リモート管理
http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=AFE41F46-E213-4CBF-9C5B-FBF236E0E875
ADSI - Active Dictoryの機能を操作
http://www.microsoft.com/downloads/details.aspx?FamilyID=f4bf2bf6-ed15-4789-9c63-e849d530a6df&DisplayLang=ja
MSXML - XMLパーサ、SAX・DOM API、XSLT変換、POST/HTTPダウンロード
http://www.microsoft.com/downloads/details.aspx?familyid=993c0bcf-3bcf-4009-be21-27e85e1857b1

○サードパーティ製外部コンポーネント
BASP21 - メール、ファイルエンコード、文字コード変換、FTP/HTTPアップ、その他
http://www.hi-ho.ne.jp/babaq/basp21.html
Doodle2 - グラフィック変換、操作、描画
http://www.vector.co.jp/soft/winnt/prog/se219120.html
DynaCall - Win32APIコール
http://people.freenet.de/gborn/WSHBazaar/WSHDynaCall.htm
AutoItX - マウス・キーボード・クリップボード操作
http://www.hiddensoft.com/AutoIt/
0004名無し~3.EXE
垢版 |
2010/12/19(日) 22:24:05ID:SZFqF39w
●WSH(COM)参考書籍

「はじめてのWindows Scripting Host」 (株)アンク著 技術評論社
http://www.amazon.co.jp/gp/product/477410650X/

「[改訂版] VBScriptポケットリファレンス」
http://www.amazon.co.jp/gp/product/4774127930/

「使いながら覚えるWindows Scripting Hostプログラミング入門」 竹田英雄著 エーアイ出版
http://www.amazon.co.jp/gp/product/4871936678/

「Windows Scripting Host入門 with VBScript」 毎日コミュニケーションズ
http://www.amazon.co.jp/gp/product/4839900906/

「WSHで楽しむWindows95/98/NT4.0版 ウィンドウズ・スクリプティング入門 VBScript編」 メディアテック出版
http://www.amazon.co.jp/gp/product/4896270207/

「WSHクイックリファレンス」 羽山博著 オライリー・ジャパン
http://www.amazon.co.jp/gp/product/4873110068/

「Rubyを256倍使う本 邪道編」 arton著 ASCII
http://www.amazon.co.jp/gp/product/4756136036/

「ADSIスクリプトによるWindows2000システム管理 Windows2000管理者ガイドブック」ピアソン・エデュケーション トーマス・エック 著
http://www.amazon.co.jp/gp/product/4894712881/ (どちらかというとVBによる操作本?)

「標準ASPテクニカルリファレンス」山田祥寛著 SOFTBANK
http://www.amazon.co.jp/gp/product/4797314001/
0006名無し~3.EXE
垢版 |
2010/12/20(月) 01:30:01ID:0VqfHqM5
言いたいことも言えないこんな世の中じゃ
0008名無し~3.EXE
垢版 |
2010/12/20(月) 02:20:06ID:aLFKp+NM
>>11 に無駄口さんが来るかな、来ないかな。
0011名無し~3.EXE
垢版 |
2010/12/25(土) 16:11:37ID:IjNpG0xL
---------------------------
Windows Script Host
---------------------------
スクリプト: C:\Users\10\Desktop\10.js
行: 1
文字: 1
エラー: 'Wscript' は宣言されていません。
コード: 800A1391
ソース: Microsoft JScript 実行時エラー

---------------------------
OK
---------------------------
0012名無し~3.EXE
垢版 |
2010/12/30(木) 00:17:30ID:08ofgx/l
WSHで1番汎用的なのって結局vbsなんですか?
001412
垢版 |
2010/12/30(木) 17:02:11ID:08ofgx/l
>>13
一般的なデフォルトだと使えるのはVBSとJSCRIPTですよね?
0015名無し~3.EXE
垢版 |
2010/12/30(木) 17:08:36ID:0MWDFXK8
wsfが何か解ってての発言ならそう
解ってなくての発言なら「wsfもデフォルト、しかもwsf内でVBSとJS、更に他のActiveScript対応言語が混在できる」と言っておく
0018名無し~3.EXE
垢版 |
2010/12/31(金) 20:09:14ID:kL9e4eNw
汎用的なんつー曖昧なことをいうからだ。
どれも何かの処理に特化したもんでもないし*それなりに*汎用的だ。
0019名無し~3.EXE
垢版 |
2011/01/01(土) 16:30:59ID:u9x30d7f
wsfはvbsより専用的?
jsはvbsより専用的?
一般的なデフォルト?
特殊なデフォルト?
0020名無し~3.EXE
垢版 |
2011/01/02(日) 18:32:59ID:92kNE2ba
vbsはvbscript専用。jsはjscript専用。wsfはvbscript、jscript両用なので汎用
0023名無し~3.EXE
垢版 |
2011/01/08(土) 02:47:48ID:wFF3NM0U
rubyは一般的なデフォルトで使えないから汎用的でないんだよ
0024名無し~3.EXE
垢版 |
2011/01/11(火) 18:20:42ID:qCTX6A0m
>>23
デフォルトだとJSCRIPTとVBSCRIPTは使えるけど、って事?
0025名無し~3.EXE
垢版 |
2011/01/13(木) 17:38:31ID:xqN3E9C5
汎用的なデフォルトは一般的でないんだよ
0026名無し~3.EXE
垢版 |
2011/01/13(木) 20:44:52ID:JxRGBuOr
>>25
うん
質問が悪かった
窓APIとかWMIいじるならrubyよりVBSのがいいって事だよね?
0029名無し~3.EXE
垢版 |
2011/01/15(土) 16:21:12ID:4x/qG0WE
>>28
27ではないけど、書名にあるようにRuby側から見たらあくまで「邪道」
ただRubyやPerlそのものでは無くて
ActiveScriptRubyや、PerlScriptに依存した話なら
ここで良いのではと思う
0030名無し~3.EXE
垢版 |
2011/01/15(土) 16:21:56ID:zaQ/9Snk
窓APIとかWMIいじるならrubyよりPowerShellがいいって事だよ

0031名無し~3.EXE
垢版 |
2011/01/16(日) 16:57:09ID:aEtK6RmW
わざわざwshでrubyしていいことあるのか?
0032名無し~3.EXE
垢版 |
2011/01/18(火) 21:09:35ID:6oYqEXc4
HTAでActiveScriptRubyやPerlScriptやりたいならわからんでもないが
0033名無し~3.EXE
垢版 |
2011/02/04(金) 19:18:50ID:zRGsp834
Temporary Internet Files に溜まっている容量を食う画像ファイルの削除方


var fs = new ActiveXObject( "Scripting.FileSystemObject" );

function d1(aaa)
{
if(fs.FileExists(aaa)) fs.DeleteFile( aaa );
}

d1( "J:/Documents and Settings/inet2004user.ZISAKUPCAT1.001/Local Settings/Temporary Internet Files/Content.IE5/07HBQI7X/*.jpg" );
d1( "J:/Documents and Settings/inet2004user.ZISAKUPCAT1.001/Local Settings/Temporary Internet Files/Content.IE5/07HBQI7X/*.gif" );
d1( "J:/Documents and Settings/inet2004user.ZISAKUPCAT1.001/Local Settings/Temporary Internet Files/Content.IE5/09CZH168/*.jpg" );
d1( "J:/Documents and Settings/inet2004user.ZISAKUPCAT1.001/Local Settings/Temporary Internet Files/Content.IE5/09CZH168/*.gif" );
たらたら

スマートではないな。
0035名無し~3.EXE
垢版 |
2011/02/05(土) 17:42:37ID:oOuGbzzj
そんなもんバッチファイルでやれや
0036名無し~3.EXE
垢版 |
2011/02/05(土) 18:19:50ID:rk7KWhb/
バッチファイルとかDOS窓ひらくじゃん
0037名無し~3.EXE
垢版 |
2011/02/05(土) 18:28:22ID:oOuGbzzj
それくらい最小化すればええがな
0038名無し~3.EXE
垢版 |
2011/02/07(月) 08:37:45ID:DSR2LhTh
むしろ俺はWSHもcscriptでやるし、wscriptでもmsgbox表示するぞ
何かしらの表示があったほうが進行状況が分かって個人的に安心できる
0041名無し~3.EXE
垢版 |
2011/02/07(月) 21:08:05ID:FEcKz/Kj
color f0
ってやれば気にならねーよ
0042名無し~3.EXE
垢版 |
2011/02/07(月) 21:50:23ID:FEcKz/Kj
ついでに
title Temporary Internet Files に溜まっている容量を食う画像ファイルを削除中です...
0043名無し~3.EXE
垢版 |
2011/02/09(水) 21:43:47ID:bFO76Jsd
>>38
バッチファイルからCSCRIPT.EXEで.vbsファイルを呼び出す手法は、私も良く使うほうだな。
0044名無し~3.EXE
垢版 |
2011/02/10(木) 03:35:40ID:p4x9btO0
個人的にはバッチファイルならJSかな

@if (0)==(0) @echo off
cscript.exe "%~f0" //Nologo //J:JScript %*
goto :EOF
@end
var args = new Enumerator(WScript.Arguments)

この辺まで個人的にテンプレ文だわ
0045名無し~3.EXE
垢版 |
2011/02/10(木) 16:10:00ID:DW3C2PEC
>>44
//Jてなんだよ

やっぱバッチもVBSが楽だな
rem; & @cscript.exe "%~f0" //Nologo //E:VBScript %* & @goto :EOF
0046名無し~3.EXE
垢版 |
2011/02/10(木) 17:14:47ID:uU7ZMDHw
俺は拡張子でwscript.exeとcscript.exeを使い分けてる
.vbs、.js、.wshはwscript.exe、.vbc、.jcs、.cshはcscript.exeってね
C Shell等、別な物と被るなら他の拡張子でもいいし

エディタが拡張子で言語見分けてるから、.bat拡張子だと
中身がJSやVBSでもバッチファイルの強調表示や入力補完になっちゃうし
0047名無し~3.EXE
垢版 |
2011/02/10(木) 21:49:52ID:p4x9btO0
>>45
ごめん間違えたw Eで合ってる

VBSだとそういう書き方になるんだな
0048名無し~3.EXE
垢版 |
2011/02/13(日) 00:53:31ID:lqMvXV0f
// jscriptでも1行でいけるね
@if (0)==(0) (@cscript.exe "%~f0" //nologo //e:jscript %*) & (@goto :eof) & @end

for(var iii=0;iii<WScript.Arguments.length;iii++){ WScript.Echo(iii + '-'+ WScript.Arguments(iii));};
new ActiveXObject('WScript.Shell').popup(WScript.Arguments.length);
0050名無し~3.EXE
垢版 |
2011/02/13(日) 23:22:03ID:6qPKG8Qf
それほどの事でもないだろ
0051名無し~3.EXE
垢版 |
2011/02/14(月) 06:15:38ID:v7eRmHxP
>>45
remの後って、セミコロン?
; だと上手く行かなくて、^ に変えたら上手く行ったんだけど…
0052名無し~3.EXE
垢版 |
2011/02/14(月) 15:25:37ID:WWZot1vK
昔はVBSのほうがドキュメントもそろってたけど、もう立場は逆転した感じ。
0054名無し~3.EXE
垢版 |
2011/02/14(月) 19:39:06ID:IB1nvu1Z
>>52
JavaScriptだとWEB関連でJSだとあやしいのがひっかかり検索しにくい困ったところ
0055名無し~3.EXE
垢版 |
2011/02/15(火) 02:33:03ID:5kt/fSLl
ちょっと教えてください。
時刻の文字列から、合計の秒数を計算して表示しようとしてるのだけれど、数字によって表示がおかしくなります。
何か大事なことを忘れてるんでしょうか?
わけがわからないです。

oshl=new ActiveXObject('WScript.Shell');
var nsec=33.48 ;
nsec=nsec + 60;
oshl.popup(nsec);/ * なにも文字を付け足さないと表示は問題ない * /;
oshl.popup(nsec +''+ " 60を足した結果に、文字を付け足すと数字がおかしくなる");

var nsec=33.48 ;
nsec=nsec + 100;
oshl.popup(nsec);/ * なにも文字を付け足さないと表示は問題ない * /;
oshl.popup(nsec +''+ " 100を足した結果に、文字を付け足しても数字がおかしくならない");
005655
垢版 |
2011/02/15(火) 02:49:44ID:5kt/fSLl
わかりにくいかもしれないんで、書き直します。たとえば、関数の戻り値がおかしくなっちゃうのです。

test=function(n){
return( "合計 "+ (33.48 + n)+ "" + " 秒です");
};

oshl=new ActiveXObject('WScript.Shell');

n=60;
oshl.popup( test(n));// この場合は、数字がおかしい。

n=100;
oshl.popup( test(n));// この場合は、数字は問題ない。
005755
垢版 |
2011/02/15(火) 03:13:19ID:5kt/fSLl
ぐぐったら、これがjavascriptの仕様なんだとw そ、そんな馬鹿なと思ったけど。
少数を含む数値を1000倍にしといて整数にしてから計算して、1000で割ることにしました。まんどくせえw

test=function(n){
return( "合計 "+ (33.48 + n)+ "" + " 秒です");
};

test2=function(n){
return( "合計 "+ (((33.48)*1000 + (n*1000))/1000)+ "" + " 秒です");
};

oshl=new ActiveXObject('WScript.Shell');

n=60;
oshl.popup( test(n));// 数字がおかしい。

n=60;
oshl.popup( test2(n));// 数字は問題ない。
0058名無し~3.EXE
垢版 |
2011/02/15(火) 11:21:20ID:KQK8NgNf
nが文字列になる瞬間に数字が変わってるね。
「return n;」だと異常ないのに、「return n+"";」だと循環小数になる。
こっちでもっと良い解決方法が無いか15分くらい探してみたけど、見付からなかった……。

あと、returnは関数ではなくて文なので、「return(n);」でなくて「return n;」の方が良いと思う。
0059名無し~3.EXE
垢版 |
2011/02/15(火) 11:26:34ID:KQK8NgNf
「return n;」の前に「n+=33.48;」って書いて説明するの忘れてた……。

function test(n){
n+=33.48;
//return n;/*93.48*/
//return n+"";/*93.47999999999999*/
return "合計"+n+"秒です";
};
var oshl=new ActiveXObject('WScript.Shell');
oshl.Popup(test(60));
0060名無し~3.EXE
垢版 |
2011/02/15(火) 17:27:27ID:63WoE9G3
俺はVBSがメインでJSは多少しか使わないんだけど
MsgBox関数に相当するようなのはJSでは何?

デバッグ用によく使うんだけど、JS使うときいつも困る。
0062名無し~3.EXE
垢版 |
2011/02/15(火) 18:33:56ID:S4MkxuXz
>>59
return "合計"+Math.ceil(n*1000)/1000+"秒です";
0063名無し~3.EXE
垢版 |
2011/02/15(火) 18:45:58ID:ohiLAigb
// スクリプトコントロールのVbscriptで逃げられるかと思ったら、引き算がアウトだった。
// nilscriptもjscriptと同じく駄目。dmscriptで試すと、引き算を除いて、問題なしだった。
oshl=new ActiveXObject('WScript.Shell');
ovbscript=new ActiveXObject('ScriptControl');
ovbscript.Language = 'VBScript';
ovbscript.AddCode("Function vbscriptexecute(scommand):dim sret:Execute scommand:vbscriptexecute=sret:End Function");

sreteval=function(scommand){return ovbscript.Run('vbscriptexecute',scommand);};
0064名無し~3.EXE
垢版 |
2011/02/15(火) 18:47:51ID:ohiLAigb
n=33.48; nplus=60;
oshl.popup( (n + nplus)); oshl.popup( (n + nplus) + "どうですかjs");
oshl.popup( sreteval('n=33.48:nplus=60:sret=(n + nplus) & "どうですかvbs"'));
oshl.popup( sreteval('sret= (33.48 + 60) & "どうですかvbs"'));

n=1.01; nplus=1.1;
oshl.popup( (n + nplus)); oshl.popup( (n + nplus) + "どうですかjs");
oshl.popup( sreteval('n=1.01:nplus=1.1:sret=(n + nplus) & "どうですかvbs"'));
oshl.popup( sreteval('sret= (1.01 + 1.1) & "どうですかvbs"'));

n=1.01; nplus=-1.1;
oshl.popup( (n + nplus)); oshl.popup( (n + nplus) + "どうですかjs");
oshl.popup( sreteval('n=1.01:nplus=-1.1:sret=(n + nplus) & "どうですかvbs"'));
oshl.popup( sreteval('sret= ((1.01 - 1.1)+0.01) & "どうですかvbs"'));
0065名無し~3.EXE
垢版 |
2011/02/15(火) 19:02:44ID:ohiLAigb
@set @SHORT_CIRCUIT = true/* & (@title batdm:%~nx0) & (@dm.exe "%~f0" %*) & (@goto :eof) & @end */
// d-monkeyのdmscriptでも一行バッチが動いたわ。jscriptでも起動の部分だけ変えると動くね。
0066名無し~3.EXE
垢版 |
2011/02/15(火) 22:18:48ID:qdYN7Y8/
>>60
cscriptからだとダイアログ絡みはオブジェクトの管轄になっちゃう
俺はダイアログ使うようなのはVBS、テキストフィルタみたいなのはJSでやってるかな
0067名無し~3.EXE
垢版 |
2011/02/16(水) 14:03:18ID:9iSQ4aMo
>>60
関数作ればいいじゃん。
function msgbox(s,n){new ActiveXObject('WScript.Shell').Popup(s,n);};

msgbox("www");
0068名無し~3.EXE
垢版 |
2011/02/19(土) 10:10:15ID:QTF/dNrf
スクリプトコンポーネント(WSC)内部から
呼び出し元のコンテキスト(グローバルオブジェクト)を取得することってできるかな。
WSC内のグローバルオブジェクトと
呼び出し元(例えばWSH)のグローバルオブジェクトは異なるんだよね。
現状WSH側から明示的にthisを渡しているけど、
できればこれを暗黙的にやりたいんだ。
0069名無し~3.EXE
垢版 |
2011/02/19(土) 10:28:51ID:QTF/dNrf
>>55
小数点の桁合わせには toFixed メソッド使うといいよ。
return "合計 "+ (33.48 + n).toFixed(2) + " 秒です";
0070名無し~3.EXE
垢版 |
2011/02/19(土) 20:38:09.30ID:3yL0phsS
>>68
executeglobalつかえばできるんじゃね
0071名無し~3.EXE
垢版 |
2011/02/19(土) 23:30:19.14ID:QTF/dNrf
>>70
WSC側でexecuteglobalを呼び出す限り
WSCのグローバルコンテキストで実行されるだけなんだよね(eval系は全部同じ)。

ちなみにJScript使っているんだけど
WSC側でevalするとWSCのグローバルコンテキストで評価される。
WSHのグローバルを受け取って(仮に変数wshに入れておくとする)
WSC側でwsh.evalとするとWSH側のグローバルコンテキストで評価される。
これをしたいがためにWSH側のグローバルオブジェクトが必要だった。
WSH側から明示的には渡せるけど、
WSC側から暗黙的に取得することは可能なのかなと思った次第っす。
0072名無し~3.EXE
垢版 |
2011/02/20(日) 00:27:41.73ID:yeS7euVC
通りすがりです

>>71
>WSH側から明示的には渡せるけど、
>WSC側から暗黙的に取得することは可能なのかなと思った次第っす。
これいろいろ探したけどダメだったな

>WSC側でwsh.evalとするとWSH側のグローバルコンテキストで評価される。
オレもこれやったな
wsh 側のメソッドを wsc 側で再定義して利用したとき気がついた
0073名無し~3.EXE
垢版 |
2011/02/20(日) 22:06:10.54ID:w/qV1CAR
classはexecuteglobalできたがwscはだめみたいね
0074名無し~3.EXE
垢版 |
2011/02/20(日) 22:20:30.93ID:+TcATz3w
それってWSC側で、たとえばWSHのJscriptを使ってるときには、WSCの関数の中で勝手にWScriptオブジェクトを使い、
HTAから呼び出す場合は、locationを、エディタのマクロからだとEditorオブジェクトを使えるよう出来るって話でもある?
それが出来たらシンプルになるなぁ。
でも一回は外からオブジェクトを渡さないと無理なんでしょ?
0075名無し~3.EXE
垢版 |
2011/02/20(日) 22:59:44.10ID:W5fSZz0V
>>69
もうちょっと教えてくれない? こういう処理でも問題ないのかな?

oshl=new ActiveXObject('WScript.Shell');

n=60;
s = "合計 "+ ((33.48 + n)-0) + " 秒です。 小数がだらだら続く・・・orz";
oshl.popup(s);

s = "合計 "+ ((33.48 + n).toFixed(13) -0) + " 秒です。.toFixed(13);トレビア〜ン!";
oshl.popup(s);

s = "合計 "+ ((33.48 + n).toFixed(14) -0) + " 秒です。.toFixed(14);・・・orz";
oshl.popup(s);

13桁にしとくと問題ないみたいだが。14桁だとまた出てくる。この境目に重大な謎が潜んでるですかね?
とりあえず((33.48 + n).toFixed(13) -0) って感じに書き換えて動かしていきます。ありがとう。
0076名無し~3.EXE
垢版 |
2011/02/20(日) 23:27:24.33ID:e7HEvFyX
人間の考える小数とは違うんよ。
「浮動小数点数」ってのを知っとくといいよ。
0077名無し~3.EXE
垢版 |
2011/02/21(月) 00:12:12.32ID:Tq0Q360t
>>76 いまぐぐってます。ありがとう。
とりあえず計算のあとには、 .toFixed(13)-0 をつけることにします。
0078名無し~3.EXE
垢版 |
2011/02/21(月) 01:39:52.68ID:We8Hkeyt
>>74
現状、既定のメソッドを定義して
new ActiveXObject('foo.bar')(this)
という一行で済ましているよ。
とりあえず呼び出し側のグローバルさえ渡せば
WSC内である程度自由にできるから。

呼び出し側とWSCの連係で厄介なのは
グローバルオブジェクトの交換はできても
両者のスコープは完全に独立しているってこと
関数をどちらのコンテキストで実行するかで
スコープチェーンが異なってくるんだよね。
arguments.callerとか使うとハマるwww
0079名無し~3.EXE
垢版 |
2011/02/21(月) 23:19:21.24ID:rbGY7ZiC
>>78
WSCへthisで渡すってか。またひとつ勉強になった。ノシ
0080名無し~3.EXE
垢版 |
2011/02/23(水) 01:28:34.67ID:YNUK4o1U
@set @s=1;/* & (@title batjs:%~nx0) & (@"cscript.exe" //nologo //e:jscript "%~f0" %*) & (@goto :eof) & @end */;g=GetObject("script:"+"C:\\g.wsc").init(this);

g.popup("cscriptでwscを使うバッチを1行でまとめてみた。");

/* g.wscの中身
<?xml version="1.0" encoding="shift_jis" ?>
<component><?component error="true" debug="true"?><public>
<method name="popup"/>
<method name="init"/>
</public><implements type="Behavior" id="Behavior"/>
<script language="JScript"><![CDATA[
var oshl=new ActiveXObject('WScript.Shell');
function popup(smes,nsec){return oshl.popup(smes,nsec);};
function init(othis){
if(typeof(othis.WScript)=='object'){WScript=othis.WScript;
}else if(typeof(othis.location)=='object'){location=othis.location;
};return this;
};
]]></script></component>
*/
0081名無し~3.EXE
垢版 |
2011/02/23(水) 01:48:39.04ID:8LTNmD8F
大したことではないけど
popup メソッドのディスパッチIDを0にしておけば、
メソッド名も省略して呼び出せるよ。
これはJScriptではなくCOMコンポーネントの規約。
0082名無し~3.EXE
垢版 |
2011/02/23(水) 02:42:23.12ID:uWPO9giD
wscのほうで、 <method name="init" dispid="0"/>
にしておけば、スクリプトのほうで
g=GetObject("script:"+"C:\\g.wsc")(this);
でいいってことなんだ。
それが >>78
new ActiveXObject('foo.bar')(this)
の話なわけだ。
やっと理解できたw
やっぱり晒して添削を受けてみるもんだね。ありがとう。
さっきぐぐったら英語の記事で、dispid=0 in .WSC does not work in Vista がうんたらかんたらと出てきたがワケワカメ・・・
0083名無し~3.EXE
垢版 |
2011/03/03(木) 17:58:00.79ID:yGt/TIu+
三陸産カットワカメ・・・
0084名無し~3.EXE
垢版 |
2011/03/03(木) 22:08:51.13ID:EjH1JmdG
おまえはどこのワカメじゃ!
0085名無し~3.EXE
垢版 |
2011/03/03(木) 22:56:09.53ID:3EDIrNbf
素人の質問ですみません。以下の記述で

〜〜〜
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

FilePATH = "C:\WINDOWS\system32\drivers\etc\hosts"
set PNTR_fullPATH = objFSO.GetAbsolutePathName( FilePath )
〜〜〜

オブジェクトがありません。: '[string: "C:\WINDOWS\system32\"]'
とエラーが返ってくるのですが、いまいち原因が分かりません。

すみませんが教えて下さい。
0087名無し~3.EXE
垢版 |
2011/03/04(金) 03:21:31.70ID:wiEZLKWL
あ・・・ありがとうございます!!
0088名無し~3.EXE
垢版 |
2011/03/04(金) 19:46:37.57ID:tFN5KqE3
@echo off
ruby -x "%~0"
goto :exit

#!ruby
puts "hello"

で.batとrubyを混在させることができますが
同様に.vbsファイル中にbatのコードを記述するやり方があったら教えてください。
0090名無し~3.EXE
垢版 |
2011/03/04(金) 20:16:18.74ID:gkErHLUc
>>89
そうだよな

>>88
batファイルの中に vbs のコードを記述するんだろ?
>>45 とかじゃね
0091名無し~3.EXE
垢版 |
2011/03/04(金) 20:17:01.88ID:bG2qjjj3
100レスもないこのスレを読めばいいよ
0092名無し~3.EXE
垢版 |
2011/03/04(金) 20:23:04.12ID:tFN5KqE3
逆ではないです。>>88の質問の通りです。
0093名無し~3.EXE
垢版 |
2011/03/04(金) 20:30:56.41ID:3PGgX7eE
同様にって言うならrubyの中にbatを混在させてなきゃいけないだろ。
出来るのかどうか知らんが。

bat中にruby書いてる>>88の例から言うなら「逆に」等の接続詞が妥当。
0096名無し~3.EXE
垢版 |
2011/03/05(土) 00:32:27.66ID:AVPrJyfw
var str = "abc";
typeof str は "string"
str instanceof Object は False
なのに str.constructor はエラーにならず String と出る
constructor プロパティは Object のメンバーのはず。
暗黙的な new String はどこで行われている?
0097名無し~3.EXE
垢版 |
2011/03/05(土) 00:57:31.81ID:w8aZ0SFU
適当な考えだが、
バリアント型なんで評価時にクラスが決定されるんでないのかね。

var x ="123"; // これだと string

さらに

x++; // こうすると number になる
0098名無し~3.EXE
垢版 |
2011/03/05(土) 07:18:20.64ID:XA/P3Nuj
>>96
ttp://msdn.microsoft.com/ja-jp/library/0y7dd8cx.aspx

> JScript の Object は特殊です。
> オブジェクトは Object コンストラクターで作成された場合にだけ
> Object のインスタンスであると見なされます。

つまり、StringはObjectの派生であるからObjectのメソッドが使えるのだが
incetanceofがObjectの直接のインスタンス以外を
Objectのインスタンスとして認めない、という話

JSではObjectを連想配列(ハッシュ、辞書)のように使うことがあるから
そのための配慮だと思われるが、ややこしいな
0099名無し~3.EXE
垢版 |
2011/03/05(土) 12:00:42.65ID:AVPrJyfw
>>97,98
サンクスです。
仕様ということで頭に入れておけばいいのでしょうけれど
typeof や instanceof を使った条件分岐の際、
あいまいな理解だと予期せぬ動作を引き起こしそうですねw。
0100名無し~3.EXE
垢版 |
2011/03/06(日) 16:57:59.80ID:rO7bjyyi
javascriptのプロトタイプの例としてtrim()コマンドってのがあります。
ぐぐるとよく出てきます。
このようなprototypeをwscに登録して、関数やプロパティのように楽して使いたいのですが
よくわからんです。
いまの自分のwscの理解の状態は、関数やプロパティをwscに書いて、
jscriptやhtaのgetobjectから呼ぶことは出来るレベルです。
windows script component に詳しい人がいたらヒントをお願いします。
0101名無し~3.EXE
垢版 |
2011/03/06(日) 20:15:06.19ID:OTYUKE1n
>>100
wscは既存のオブジェクトを拡張するための機能ではないよ。
新規にオブジェクトを設計してそれをスクリプトから再利用出来るようにするもの。

君の場合、jsやvbsで拡張用のコードを用意しておいて
それをwsfやhtaから利用するほうが楽なんじゃないかな?
scriptタグを使って読み込めるからね。
質問から察するにそちらのほうが正攻法だと思う。

もちろんWSCを使って呼び出し元のオブジェクトを
無理矢理拡張できないこともないけど。
0102名無し~3.EXE
垢版 |
2011/03/06(日) 22:39:37.78ID:0PSkRQeX
WSC prototypeでぐぐって見たら、
ttp://moz-addon.g.hatena.ne.jp/ZIGOROu/?word=*[WSC]
が引っかかりました。wsc経由でも、prototypeが使えるらしい。  やった!w
・・・が細かい記述はなし。
あと、スクリプト内部の外部ファイル化も出来るらしい。試したら・・・出来た!w
<property name="test0"/>
<script language="JScript" src='./test0.js'/>
これ便利だわw

prototypeが出来るか?もうちょっと粘ってみます。
0103名無し~3.EXE
垢版 |
2011/03/06(日) 23:21:41.58ID:OTYUKE1n
>>102
ひとつ言っておくけど
wscのグローバルコンテキストと呼び出し元のそれとは異なるからね。
つまりwsc内のStringオブジェクトのプロトタイプを拡張しても
呼び出し元のStringオブジェクトには使えないということ。
まあ試せるだけ試して、また来なさいな。
0104名無し~3.EXE
垢版 |
2011/03/07(月) 00:34:09.18ID:cQcCMBvw
たしかにw WSFかHTAでやったほうがいいね。WSFなら<job>と<script src=....>タグで包めばいいだけだものね。
<job><script src=./test0.js /><script src=./prototype0.js /><script>

s=" Trim WSH ";
oshl=new ActiveXObject('WScript.Shell');
test0.alert3("WSFから読み込んで実行" + "\n" + s +"\n" + s.trim());
test0.表示する2("---"+ s +"---\n" +"---"+ s.をトリム()+"---");

/*
// test0.jsの中身
test0={
alert3 : function(s){oshl.popup(s,3);},
表示する2 : function(s){oshl.popup(s+"\n\n"+s);}
};
// prototype0.jsの中身
trim = function(){return this.replace(/^[ \t ]+/,'').replace(/[ \t ]*$/,'');};
String.prototype.trim = trim; String.prototype.をトリム = trim;
*/
</script></job>
0105名無し~3.EXE
垢版 |
2011/03/07(月) 03:50:20.20ID:cQcCMBvw
結論を先に言うと、WSCに書いたprototypeのtrimを、WSC側だけでなく、スクリプト本体からも使えるようですw!
スクリプト本体からGetObjectでWSCに送るオブジェクト this にprototypeを付け足せばOKのようです。
 
で、下記のサンプルのjsファイルと同じフォルダに、別記のthistest.wsc ファイルと
wscに読み込むための test1.js ファイルを置いて試して見て下さい。
trimとコマンドラインの引数を表示するサンプルです。
とりあえず動くようなんでこれで問題ないかな?と思ってるんですけど、どうかな?
0106名無し~3.EXE
垢版 |
2011/03/07(月) 03:52:33.62ID:cQcCMBvw
main=function(){
s=" test ";
sTrim= "TrimBefore==="+s +"==="+"\n";
sTrim+="TrimAfter ==="+s.trim()+"==="+"\n";
sTrim+="TrimAfter ==="+s.をトリム()+"==="+"\n";
sTrim+="TrimAfter ==="+funsub(s)+"==="+"\n";
oshl.popup("trim()のテスト\n\n"+ s + "\n\n"+ sTrim);
test1.alert3(" --- コマンドラインの引数argcl=\n" + argcl.join("\n"));
test1.表示2( 3333 );
n = ( 999 + 1000 ).を表示(); sss=(" 終了です " + n ).を表示();
oshl.popup("---"+sss+"---");
};

pWscのパス=WScript.Scriptfullname.replace(/^(.+)[\\]([^\\]+)$/,'$1')+"\\thistest.wsc";
GetObject("script:" + pWscのパス)(this);

funsub=function(s){return s.trim();};

main();

/*** thistest.wsc から読み込む test1.js ファイルの中身。 thistest.wscは別記する。
test1={ alert3 : function(s){oshl.popup("==="+ s.trim()+"===",3);},
表示2 : function(s){oshl.popup(s+"\n\n"+s);}
};
***/;
0107名無し~3.EXE
垢版 |
2011/03/07(月) 03:56:57.64ID:cQcCMBvw
<?xml version="1.0" encoding="shift_jis" ?><component><?component error="true" debug="true"?><public>
<method name="init" dispid="0"/> <property name="test1"/>
</public><implements type="Behavior" id="Behavior"/>
<script language="JScript" src='./test1.js'/>
<script language="JScript"><![CDATA[
var oshl=new ActiveXObject('WScript.Shell');
var ofso=new ActiveXObject('Scripting.FileSystemObject');
trim = function(){return this.replace(/^[ \t ]+/,'').replace(/[ \t ]*$/,'');};
String.prototype.trim = trim; String.prototype.をトリム = trim;
を表示= function(){oshl.popup(this);return this;};
String.prototype.を表示 = を表示; bWScript=false; blocation=false;

function init(ooo,sopt){
if(typeof(ooo.WScript)=='object'){
bWScript=true; WScript=ooo.WScript; ppScriptfullname=WScript.ScriptFullname;
getArgcl=function(){var aaa=[];for(var iii=0;iii<WScript.Arguments.length;iii++){aaa.push(WScript.Arguments(iii));};return aaa;};
}else if(typeof(ooo.location)=='object'){
blocation=true;location=ooo.location;ppScriptfullname=location.pathname;getArgcl=function(){var aaa=[];return aaa;};
};
ooo.test1=test1; ooo.ppScriptfullname=ppScriptfullname; ooo.argcl=getArgcl(); ooo.oshl=oshl; ooo.ofso=ofso;
ooo.String.prototype.trim = trim; ooo.String.prototype.をトリム = trim;
ooo.String.prototype.を表示 = を表示; ooo.Number.prototype.を表示 = を表示;
return this;
}; ]]></script></component>
0108名無し~3.EXE
垢版 |
2011/03/07(月) 19:34:50.38ID:o0m549Gn
>>105
そうですね、>>78 でも書いたけど、現時点においては
呼び出し元のグローバルオブジェクトを渡すというのが唯一の解法だと思う。
少なくとも私は他の方法を知らない。ほとんどの場合、それで事足りると思うけど、
両者のスコープは完全に独立しているという点だけは注意しておいたほうがいいよ。
コードによっては弊害が発生するから。

何か特殊なことをしたいのでなければ
このコードは明らかにwsfのほうが向いていると思うけど、
WSCの調査目的でやっているのなら、そいつはお節介かw。

0109名無し~3.EXE
垢版 |
2011/03/08(火) 00:08:48.35ID:hefFAWy/
昨日いろいろ試していて、>>78 new ActiveXObject('foo.bar')(this)
g=new ... というような戻り値を取らない意味がやっと理解出来ましたw
呼び出し元がWSHの場合は、thisに返すことも出来るってことですね。
>>102 のURLの中の人の解説も、今になると少しは理解できましたw

WSCを掘ってみようと思ったのは、WSHとは役目の違うAutohotkeyなどのスクリプト言語からもJscriptで作った関数を楽に使いたかったからです。
関数を一つ一つScriptControlするかという手もあるけど、ScriptControlからGetObjectで一括で取り込んでしまおう!というわけです。
WSCを経由することのスピードのロスは、自作のツールだから割り切れますんでね。
これで、Bat偽装のJscriptで作ったツールを、prototypeを除いてAutohotkeyやhtaboxコアからもほぼ同じように再利用出来ることがわかってよかったです。
このスレには、WSHやjavascript関係でググると出てくる方たちが何人か常駐してるんだろうねw
>>108 さんをはじめみなさんいろいろ教えてもらってありがとう!
0110名無し~3.EXE
垢版 |
2011/03/09(水) 05:55:35.07ID:Mqnv57Gr
JScriptでcatchブロックの下にあるfinallyブロックを使い、
ソースコードを定期的かつ自動的に実行したいのですが
どのように記述しするべきなのでしょうか?

ちなみにfinallyブロックはこのように記述されていて、
IEブラウザが勝手に閉じてくれます

finally{
ie.Quit();
}
0111名無し~3.EXE
垢版 |
2011/03/09(水) 09:22:51.55ID:yiJYnNja
try〜catch〜finally はそういう用途で使うもんじゃないんでないの
0112名無し~3.EXE
垢版 |
2011/03/09(水) 22:12:50.52ID:LlSweAWG
WSHでクリップボードを使おうと思って次のようなコードを書きました。
値の取得はできるのですが、値の設定がうまくいかないんです。
xxxは表示されず、それ以前にクリップボードに入れた値が表示されます。
どうすれば値の設定ができるようになりますか?

var cb = new ActiveXObject("htmlfile").parentWindow.clipboardData;
cb.setData("text", "xxx");
new ActiveXObject("WScript.Shell").popup(cb.getData("text"));
0113名無し~3.EXE
垢版 |
2011/03/10(木) 01:52:14.41ID:cSFmRFjD
インターネットオプション セキュリティ インターネット 低
0114名無し~3.EXE
垢版 |
2011/03/10(木) 05:07:35.87ID:OzXGAxB6
>>112
SFCminiのDLLをインストールしてやる方法もあるよ。

CopyPathToClipBoard.vbs

ttp://d.hatena.ne.jp/Shinez/20100730/p1
0115名無し~3.EXE
垢版 |
2011/03/10(木) 05:14:36.60ID:OzXGAxB6
ただこんな話もあるようですが・・・
ttp://d.hatena.ne.jp/Fio/20050321
データ実行防止
 DynaCallを使って、WSHでクリップボードを直接操作したりすることをテストしているのですが、ほんのわずかのテキストだったらいいのですが、ちょっと数が多くなるとてきめんにデータ実行防止の画面が出てきてWSHを落とされます。

 これはXPのSP2以降の機能のようですが、ウィルスでないWSHスクリプトをウィルスといっしょにすなーー
0116名無し~3.EXE
垢版 |
2011/03/10(木) 05:29:08.75ID:hGam45QR
>>113
about:blankを信頼済みに追加して「スクリプトによる貼り付け処理の許可」を有効にしています。
ここを無効にするとクリップボードの読み取りも不可になるのでちゃんと反映されていると思うんですが。
WSHから呼び出したときabout:blankであることは以下のコードで確認しました。
var win = new ActiveXObject("htmlfile").parentWindow;
new ActiveXObject("WScript.Shell").popup(win.location);
IEのバージョン依存とかもあるんですかね。自分の環境はIE8です。
>>113 さんの環境では値の設定もできてますか?

>>114
参照先を見てみました。今の自分にはちょっと難しそうなのでこれから勉強してみます。
0117名無し~3.EXE
垢版 |
2011/03/10(木) 05:55:38.56ID:/U/Q8ZHj
GetObjectだとコンピュータゾーンになるらしいけど
ただ、どっちにしてもsetDataで設定できないみたいね
InternetExplorer.Applicationとかは
0118名無し~3.EXE
垢版 |
2011/03/10(木) 07:37:59.38ID:TVU14U2L
about:blank の新規窓作ってスクリプトでコンテンツ作成するサイトもあるよ
0119名無し~3.EXE
垢版 |
2011/03/10(木) 19:31:42.80ID:hGam45QR
>>118
うう、なるほど。
about:blankだからといって安心出来ないわけですね。
0120名無し~3.EXE
垢版 |
2011/03/10(木) 21:23:25.37ID:cSFmRFjD
alert()はできてもprompt()はできないのと一緒
parentWindowは実際にosのwindowを持ってないからだめ
0121名無し~3.EXE
垢版 |
2011/03/11(金) 00:20:10.33ID:V8ey7rJ7
>>112
WSH は元々クリップボードを扱うことを想定していないから、
OLE の初期化という処理をアプリケーション側で行っていないんだよね。
だからクリップボードに値を設定することができない。
HTA のように OLE の初期化を行っているスクリプトホストであれば
>>112 のコードは正しく実行される。

じゃあ WSH では不可能なのかというと、API を直接呼び出して
WSH 上で OLE の初期化をさせてしまうという強引な方法もある。
コードの理解には DynaCall や Win32API の知識が必要になるけど、
DynaCall を登録後、以下の三行をオマジナイとして
>>112 のコードの前に追加してみてください。
WSH でもクリップボードに値を設定できるはずだよ。

var dynwrap = new ActiveXObject('DynamicWrapper');
dynwrap.register('ole32','OleInitialize','f=s','i=l','r=l');
dynwrap.OleInitialize(0);

>>114
SfcMini だとこんな感じかな。
var API = new ActiveXObject('SfcMini.DynaCall');
API.LoadLibrariesW('ole32');
API.OleInitialize(0);

ちなみに OleInitialize の戻り値は WSH では 0 だけど HTA だと 1 になる。
これは HTA が既に OLE 初期化済みですよというエラーコード。
つまり 1 が返るスクリプトホストであれば OleInitialize は不要ってこと。
OleInitialize が何をしているかについてはかなり専門的な話になるので省略。
ネットで詳細な解説を見つけるのは難しいかも。興味がある人は以下の本を読むとよろし。
http://www.amazon.co.jp/dp/4756102379
0122名無し~3.EXE
垢版 |
2011/03/11(金) 01:28:02.40ID:u15/Db+W
割り込みスマン。

出来たわ。そういう手もあるのか。
0124名無し~3.EXE
垢版 |
2011/03/12(土) 17:51:36.66ID:r5dmqnIa
お〜い、おまいら生きてるか?
0125名無し~3.EXE
垢版 |
2011/03/29(火) 15:01:07.19ID:LTJJZQ9e
UTF-8のtarget.csv、Shift-JISのmaster.txtがある
master.txtにはtarget.csvで置換したい文字列が入っている

target.csv
1,2,3,fuga,5
1,piyo,4,5,5
...

master.csv
hoge
fuga
piyo
...

概要
master.csvの1レコード目の値を取得(変数keyとする)
keyでtarget.csvの1行目を検索する。
HITするならnullに置換。(要は削除したい)
HITしないなら2行目。
target.csv内でループ
master.csv内でループ

問題点
文字コードが違う為、print、write、ODAの使用ができない。
(ODAは文字コード関係ないって聞いた事があったのに…)
これではソースコード内で置換できても、出力ができない上に
文字列を取得する際も文字化けしてしまっている為、処理ができない。

JAVAなんかだと文字コード変換する関数があるけど
JSCRIPTではやっぱ無理?
0126名無し~3.EXE
垢版 |
2011/03/29(火) 15:16:03.05ID:C2y6smjb
FSOかADODB.Stream使えばいいんじゃね?
0127名無し~3.EXE
垢版 |
2011/03/29(火) 17:03:21.21ID:LTJJZQ9e
>>126
両方駄目だった
UTF-8のテキストを読み込んでアラート出すと2バイト文字が化ける
0128名無し~3.EXE
垢版 |
2011/03/29(火) 17:11:32.48ID:C4uw/B/3
それはばけるでなくばかなんだろw
0129名無し~3.EXE
垢版 |
2011/03/29(火) 17:31:23.95ID:C2y6smjb
>>127
君がちゃんと使えてないだけだから頑張れ
0130名無し~3.EXE
垢版 |
2011/03/29(火) 17:50:11.87ID:aPraUPt/
>>129
マジで出来るのか
もう1度やってみる
ありがとう
0131名無し~3.EXE
垢版 |
2011/04/04(月) 21:15:15.89ID:yLz3Zj6h
wshに渡した引数のダブルクォートが消えないようにするにはどうしたらいいでしょうか。

用途はだいなファイラーの補助スクリプトです。
マクロで変換後スクリプトには"a" "b"...のように渡るのですが、これがa b...になってしまいます。
渡す文字列に半角空白が含まれている場合に不都合です。
0133名無し~3.EXE
垢版 |
2011/04/05(火) 10:02:45.94ID:Pf/rrN9p
個人寄付ランキング

100億 孫正義(ソフトバンク)
10億 柳井正(ユニクロ) 三木谷浩史(楽天)
6億 ブリトニー・スピアーズ(米・歌手)
5億 似鳥昭雄(ニトリ)
2億 久米宏(アナウンサー) 中居正宏(SMAP4億、内2億)
1.2億 レディー・ガガ(米・歌手)
1億 イチロー(マリナーズ)
8000万 サンドラ・ブロック(米・俳優)
7500万 ぺヨンジュン(韓・俳優)
5000万 安室奈美恵(歌手)
3500万 浜崎あゆみ(歌手)
3200万 ジャッキー・チェン ←New
100万 堀江貴文 (ホリエモン)
33万 蛯原友里(タレント)
6万9千 内田裕也(ロック)
体で支払い 江頭2:50(タレント)
折り鶴  アブネスチャン
0134名無し~3.EXE
垢版 |
2011/04/05(火) 17:59:30.38ID:fuIR9JzL
>>131
マ社に入社してソースを変更しろ
他の文字に変えて全体括って戻す
環境変数で渡す
wmiでコマンドラインを取得する
0135131
垢版 |
2011/04/05(火) 23:27:40.19ID:bVidqRdy
回答ありがとう。またいろいろ調べて試してくる
0136名無し~3.EXE
垢版 |
2011/04/16(土) 11:27:42.13ID:MufQ4JVW
ダイアログを表示させずにファイルをごみ箱へ移動するスクリプトがw2kで正常に動きません(XPだと動く)
エクスプローラでこのスクリプトにファイルをD&Dすると、ファイルの移動先が"C:\Documents and Settings\ユーザー"へ
他のファイラ(X-Finder)だと、そのファイラの実行ファイルの有るフォルダに移動します
2000で動かす方法は無いですか

var fso=new ActiveXObject("Scripting.FileSystemObject");
var args = WScript.Arguments;
var Shell=new ActiveXObject('Shell.Application');
var Folder=Shell.NameSpace(fso.GetAbsolutePathName(fso.GetParentFolderName(args(0))));
var FolderItem=Folder.Items().Item(fso.GetFileName(args(0)));
Shell.NameSpace(10).MoveHere(FolderItem);
0137 忍法帖【Lv=15,xxxPT】
垢版 |
2011/04/16(土) 15:09:10.47ID:i6zoZumo
ゴミ箱のプロパティに、確認しないようにするチェック欄あるけど、2000だとそれないの?
0138名無し~3.EXE
垢版 |
2011/04/16(土) 19:39:45.68ID:0UUwM/iL
Shell.NameSpace("::{645FF040-5081-101B-9F08-00AA002F954E}")
0139136
垢版 |
2011/04/16(土) 22:37:16.64ID:MufQ4JVW
>>137
チェック欄を変更してみたけれど効果有りません

>>138
書き換えてみたけれど変化ありませんでした

var Shell=new ActiveXObject('Shell.Application');
WScript.echo(Shell.NameSpace("::{645FF040-5081-101B-9F08-00AA002F954E}"));
WScript.echo(Shell.NameSpace(0xa));
WScript.echo(Shell.NameSpace(10));

三つとも「ごみ箱」と出るけど、移動先が>>136になります
0140名無し~3.EXE
垢版 |
2011/04/16(土) 23:14:45.38ID:CtNIy87X
カレントディレクトリ変えるとか
0141名無し~3.EXE
垢版 |
2011/04/16(土) 23:21:20.32ID:0UUwM/iL
非同期だから待ち合わせしないとあかんみたいよ

参考ソース
ttp://www.vector.co.jp/soft/winnt/util/se427319.html
0142136
垢版 |
2011/04/17(日) 00:02:04.93ID:uhTjQ+VV
>>141
136はvector(Remove.CMD)のソースをテスト用に改変したものです。Remove.CMDも2000では動きません
非同期回避のループ文が有るとファイルが本来と違う場所に移動した後でエラーを吐きます

またD&D操作でなく、スクリプト内で削除するファイルを決め打ちにするとファイルは移動もしなくなります
2000のwshバージョンを5.7に上げても効果ありませんでした
0144名無し~3.EXE
垢版 |
2011/04/17(日) 01:54:12.61ID:4japXLT8
ttp://www.roy.hi-ho.ne.jp/mutaguchi/bbs/list39.shtml

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2001年 06月 22日 22時 45分 04秒
に既出やね
0145名無し~3.EXE
垢版 |
2011/04/17(日) 09:13:00.95ID:hP33oYWG
Shell Automation Service は
shell32.dll に実装されているけど
単にこれが古いというオチじゃないかな
まあW2K版shell32.dllのバグという見方もできるが。
強引にAPIのSHFileOperationでも使う?w
0146名無し~3.EXE
垢版 |
2011/04/17(日) 09:19:07.96ID:hP33oYWG
そうそう、久しぶりにMiTeC覗いたら
OLEViewerのバージョンが上がってたよ
といってもiviewers.dllは提供されていないから
基本的な性能は変わっていないんだけどw

他にも色々と有用なツールがあるから
興味がある人は覗いてみては?

http://www.mitec.cz/
0147名無し~3.EXE
垢版 |
2011/04/23(土) 02:18:54.08ID:4NAn1xc8
WSHでUSBポートの監視、制御ってできますか?
できるのであればAPIの宣言方法を教えて下さい
0148名無し~3.EXE
垢版 |
2011/04/23(土) 08:31:31.29ID:i7wvdnoN
覚えた当時文字列処理系の関数が多かったからvbsにしたんだけど
世間じゃjsが流行ってんな〜

IEのjsエンジン高速化されまくってるみたいだけど
wshでもjsのが高速だったりするの?
0149名無し~3.EXE
垢版 |
2011/04/23(土) 09:26:59.69ID:PDrnfeB9
>147
接続や切断ってことかい?
とりあえずRegisterDeviceNotification あたりから調べてみ。
ただ頭からケツまでAPIでゴリ押しする気なら
言語の選択を考え直したほうがいい。
C++とかで書く以上に面倒になると思うぜ。
0150名無し~3.EXE
垢版 |
2011/04/23(土) 10:34:29.25ID:+bpxYnWG
>>148
JSは慣れりゃVB以上に色々出来るからなあ
0151名無し~3.EXE
垢版 |
2011/04/23(土) 10:58:21.98ID:PDrnfeB9
>148
オレは関数型言語がキライという理由かな
だからphpも好きじゃない
あくまで書き方に限った話だがw
0152名無し~3.EXE
垢版 |
2011/04/23(土) 11:36:59.05ID:4NAn1xc8
>>149
thx
やりたい事が漠然としてるんでWSHでどこまでできるのか知りたかったんだ
無論Cも考えてる。ありがとうさぎ
0153名無し~3.EXE
垢版 |
2011/04/23(土) 13:22:59.86ID:+bpxYnWG
>>151
phpのどこが関数型言語の書き方なんだ…
0154名無し~3.EXE
垢版 |
2011/04/24(日) 07:05:08.61ID:dtEm5GAz
web の cache の property を知りたくて調べて行くうちに
ADSI というのにたどりついたんですが、
この方向は、正しいのでしょうか?
何か、2000のころの技術だったりするみたいですが、
これで作ってXPやVista、Win7で動くものが出来上がるのでしょうか?
0155154
垢版 |
2011/04/24(日) 17:22:51.00ID:dtEm5GAz
すいません。 >>2 も読まずに書き込んでしまいました。
調べていたら、どうも違っているような気がするし、
もう少し調べて出直してきます。
0156名無し~3.EXE
垢版 |
2011/05/06(金) 18:17:10.29ID:nbD2ZVvS
何か原始的なスクリプトですいませんが、これは Vista や Win7 で動くものなのでしょうか?
XP や 2000 上では試したつもりです。

Option Explicit
const Win2k="5.0",WinXP="5.1",WinVista="6.0",Win7="6.1"
dim ver: ver=get_os_version()
if ver=Win2k then
msgbox "Windows 2000"
elseif ver=WinXP then
msgbox "XP"
elseif ver=WinVista then
msgbox "Vista"
elseif ver=Win7 then
msgbox "Windows7"
end if
続く
0157名無し~3.EXE
垢版 |
2011/05/06(金) 18:17:39.53ID:nbD2ZVvS
続き
function get_os_version()
Dim wshell: Set wshell = CreateObject("WScript.Shell")
dim objExec: Set objExec = wshell.Exec("%comspec% /c ver")
dim str: str = objExec.StdOut.ReadAll
str=right(str,len(str)-6)
Dim regEx: Set regEx = New RegExp
regEx.IgnoreCase = True: regEx.Global = False: regEx.Pattern = ".*Version *"
str = regEx.Replace(str,""): str = left(str,3)
get_os_version = str
end function
0158名無し~3.EXE
垢版 |
2011/05/08(日) 17:07:59.03ID:Dob9Sr1E
64bitOSを想定しないのならそれでオケ。64bitかサーバーOSを想定するのならダメ。
WMIのWin32_OperatingSystemクラスを使うべきじゃないか?
0159名無し~3.EXE
垢版 |
2011/05/08(日) 19:26:32.97ID:tRFPSx9t
>>158
使い方調べるの面倒なら単純にシステムのプロパティ-全般タブ見るという手もあるね
0160名無し~3.EXE
垢版 |
2011/05/08(日) 21:55:17.51ID:rPyeiUAT
>>158
64bit だと。今想定している本体が、動かないだろうから。
それ以外でOKだったら大丈夫です。特殊なサーバーOSで動かす人もいないだろうし
これでOKということですね。ありがとうございました。
>>159 さんの言っていることは、私のスキルでは理解できませんが、情報ありがとうございます
0161名無し~3.EXE
垢版 |
2011/05/11(水) 18:58:17.23ID:WU/TO40v
画面の右下に出るリマインダーをWSHで実装できないですか?
流石にVBSからのAPIでは対応してないですかね
0162名無し~3.EXE
垢版 |
2011/05/12(木) 00:58:45.25ID:cqVKMmVu
APIってのがWin32APIではなく
COMなども含めた総合的なAPIのことなら
VBSからAPI(COM)使って実現できるよ
0163名無し~3.EXE
垢版 |
2011/05/12(木) 08:09:01.23ID:Tc/SDtQ0
>>162
成る程ー
WinAPIでは無理がありますか
ありがとうございましたー
0164名無し~3.EXE
垢版 |
2011/05/25(水) 19:43:11.61ID:45W+js0P
ラジオボタンで選択できるインターフェースをできればvbsから関数的に呼び出して使用したい。なんかいい方法はないですか?
元々のvbsのソースが膨大なのでHTA化は避けたいです
0165名無し~3.EXE
垢版 |
2011/05/25(水) 20:04:38.42ID:Q0zeNMv6
ScriptFormとかのGUI作れるCOM使うとか
外部にラジオボタン選択インターフェイスだけのHTA作ってVBSから呼ぶとか

ScriptFormはだいぶ前に公式は死んでたけど、他の所から落とせたから
今でも探せばどっかにあるんじゃないかな?
0166名無し~3.EXE
垢版 |
2011/05/25(水) 22:24:06.22ID:nzVZlxBu
hta で vbs だけは使うまい、ておもたわ。
0167名無し~3.EXE
垢版 |
2011/05/26(木) 00:25:27.39ID:TXX3L4YD
HTAを呼び出して選択した結果を受け取るのってどうやるの?
なんか参考になるサイトとかあったら教えていただけませんでしょうか
0168名無し~3.EXE
垢版 |
2011/05/26(木) 01:39:18.55ID:T9mvRx0z
そこまでするならpowershell使うわ
0169名無し~3.EXE
垢版 |
2011/05/26(木) 19:24:49.18ID:5BJmGOz1
ドライブに挿入された音楽CDの
CDシリアル番号を取得することってできる?

cdaファイルをパースするのはナシの方向で。
というのもCDがマルチセッションだと
cdaファイルにパス名でアクセス出来ないので。
0170169
垢版 |
2011/05/27(金) 21:25:55.55ID:jtI0zCu/
難しく考えすぎてたorz
0171名無し~3.EXE
垢版 |
2011/05/29(日) 16:53:43.65ID:xcYhyO0n
>>167
お手軽なのは、連絡用ファイルを設定して、HTA側から結果をカキコ。
WSH側は.Sleep → Loop 辺りでテキト〜に待ち合わせ。

神ブログ:ttp://scripting.cocolog-nifty.com/blog/2007/07/hta_2d73.html
をパクって、CreateHTAObject()を作ってみたこともあったが、
アイ〜ン立ち上げて、またHTA≒アイ〜ン立ち上げるのは、やっぱ速度でほんのり難が^^
0172名無し~3.EXE
垢版 |
2011/05/29(日) 18:05:14.02ID:VMqRtOtk
>>171
mshtaをwscript.shellのexecで起こしてhtaから標準出力に書き出してやれば?
そこにGetStandardStreamのサンプルがあるから探してみ
0173名無し~3.EXE
垢版 |
2011/05/29(日) 18:25:31.32ID:xcYhyO0n
>>172
WshShell.Execで窓を表示しない方法も、神ブログに書いてるけど、
お手軽方法で、別に不満なかったから、自分はあまり追求しなかったな。
HTAをオブジェとして使う事が重要なら、ぜひ追求してみるべきだろうね。
0174名無し~3.EXE
垢版 |
2011/05/29(日) 18:50:47.38ID:VMqRtOtk
>>173

mshtaはコンソールアプリでないからコンソールは出ないが?
0175名無し~3.EXE
垢版 |
2011/05/29(日) 20:41:59.51ID:Ri5jBDVX
>>174
あ゙〜、完全にわし間違ってた。173は撤回する。
0177名無し~3.EXE
垢版 |
2011/05/30(月) 01:44:11.04ID:JGc46t5+
勘違いというか、HTA化を避けたいと言ってる奴に
IE使えってのはあり得ない話だと思うのだが
0178名無し~3.EXE
垢版 |
2011/05/30(月) 02:19:12.01ID:dEax9gcE
そうかvbs(wsh)からIEコンポも使っちゃいけないのか。
それはスマン。
俺はただvbsをhtaに全面書き換えるのがイヤなだけだと思ってた。
0179名無し~3.EXE
垢版 |
2011/05/30(月) 08:18:11.77ID:JGc46t5+
vbsをhtaにするのに、全面書き換えなんて必要ないよ
前後をタグで囲んで拡張子変えるだけで、vbs部分の書き換えなんてしなくて良い
0181167
垢版 |
2011/05/30(月) 22:59:05.05ID:GG049trQ
>>171-179
皆様ありがとうございます。もう見放されたかと思ってましたw
HTAから標準出力を使いたかったのですが自力ではできなかったので、vb.netで挑戦しようかと考えていました。
これからレスと参考リンクを読んでいろいろやってみます。
0182名無し~3.EXE
垢版 |
2011/05/31(火) 16:40:25.93ID:K7148uoi
ぐぐってたら、javascriptとQTを使えるスクリプトエンジンが出てたよ。Qtjsって奴。WinでもLinuxでもMacでも動くそうだ。
ttp://www.vector.co.jp/vpack/browse/person/an054784.html ttp://qt.loftz.net/
XPで試したら素直に動いたわ。日本語使うならUTF-8で保存。
Titaniumもあるし、Htaboxcoreもあるし、javascriptの世界は広がりますね。
// sample.qtjs
var _window=QWidget();
_window.setWindowTitle("test window");
_window.setGeometry(100,100,220,100);

var _edit=QTextEdit(_window);
_edit.setGeometry(100,30,90,50);

var _b1=QPushButton("button 1",_window);
var _b2=QPushButton("button 2",_window);
_b1.move(10,30);
_b2.move(10,60);
_b1.connect("clicked",_edit,function(){@setText("button 111")});
_b2.connect("clicked",_edit,function(){@setText("button 222")});

var _label=QLabel("button text",_window);
_label.move(10,10);
_window.show();
sys.exec();
0183名無し~3.EXE
垢版 |
2011/05/31(火) 18:58:03.11ID:CXpwkTbm
>>182
QtはマルチプラットフォームだけどqtjsはMAC対応してないよ

jsの汎用性は凄いよねー
0184名無し~3.EXE
垢版 |
2011/05/31(火) 22:27:42.25ID:9cCA8ild
>>182
処理が比較的早く、簡単にGUIツールが作成できるのはいいが、
結局、クライアント(実行するPC)にもQtjs.exeがないとダメって事じゃん
これは微妙かも。あくまで自分のPCでGUI使ってなんかツール作りたい時は便利かもだけど、
オレオレツールって自分が理解してればいいからわざわざGUIにしなくてもって思うわ

あと、ショートカットリンクから実行しても動かない。
これじゃ使えないわ。cmdショートカットなら動くんだろうけど

[Window Title]
X:\Qtjs\qtjs_win_20110529_rev37_qt4_7_2_gcc\qtjs.exe

[Content]
X:\Qtjs\qtjs_win_20110529_rev37_qt4_7_2_gcc\qtjs.exe は有効な Win32 アプリケーションではありません。
0185184
垢版 |
2011/05/31(火) 23:29:37.09ID:9cCA8ild
悪い、変なエラーが出てて気になって再起動したら
Blue Screen Of DEATH食らった
Windows7はBlue Screen Of DEATHにならないって聞いてたけど
あれは嘘なんだなw
(まぁ青画面になっても死なないようにはなってるみたいだけど)

復旧せずに通常起動後に実行したら普通にショートカットからでも起動した

QtjsはC++利用だからマウス操作の自動化処理もJavaScriptで書けるって事なのかな?
何か従来のWSHより全然汎用的でビビったわ
慣れれば間違いなくWSHよりQtjsのがいいね
0186名無し~3.EXE
垢版 |
2011/06/01(水) 01:29:18.93ID:5Nq11jQ6
// <job id='qtjs'><resource id='qtjs'><![CDATA[;;;
// sample.wsf としてUTF-8で保存。これを起動すると、最初の起動はWSHで実行して、下のパスのQtjs.exeで再実行する形になる。関連付けしてなくても動く。
var label = QLabel("Hello, world!"+"\n\n"+"ポポポポ〜ん!");
label.show();
sys.exec();
//
// ]]></resource><script>
/* ここからはjscript。関連付け無しでも実行できるようにする処理。var pqtjsexeでQtjs.exeのパスを決め、そのexeでスクリプトを実行する。*/;
if(typeof(WScript)=='object'){
//var pqtjsexe="V:\\Script_Qtjs_Win\\Qtjs.exe";/ * パスを決めうちの場合 * /;
var oshl=new ActiveXObject("WScript.Shell");
var ofso=new ActiveXObject("Scripting.FileSystemObject");
var pdirscript = ofso.GetFile(WScript.ScriptFullname).ParentFolder;
var pqtjsexe=pdirscript + "\\Qtjs.exe";/ * 同じフォルダにqtjs.exeの環境がある場合 * /;
oshl.run("\""+pqtjsexe+"\""+ " " + "\""+ WScript.ScriptFullName+"\"",1,false);
};
//</script></job>
0187名無し~3.EXE
垢版 |
2011/06/01(水) 01:41:57.48ID:5Nq11jQ6
上の奴は、拡張子Qtjsを関連付けしてる場合は、ファイル名の拡張子を.qtjsで保存すればそのまま動くよ。
スクリプトの最後のほうを変えればWSHから引数も引き継げると思う。
for(var arg=WScript.Arguments,iii=0,sadd='';iii<arg.length;iii++){sadd+=" " + "\""+ arg(iii)+"\"";};
oshl.run("\""+pqtjsexe+"\""+ " " + "\""+ WScript.ScriptFullName+"\""+" "+sadd,1,false);
0188名無し~3.EXE
垢版 |
2011/06/01(水) 01:45:57.06ID:5Nq11jQ6
>>183
ほんとだ。Macは対応してなかったw スマソ
0189名無し~3.EXE
垢版 |
2011/06/01(水) 18:34:22.79ID:unjL6vtH
>>187
拡張子設定すりゃいいだけか!thx
最近出だばっかみたいだけど、これからに期待だわ
いい加減スレチだけど、過疎気味だからいいかw
オレオレツールがGUIでサクッと作れて簡単なコーディングで色々出来るのがいい
0190名無し~3.EXE
垢版 |
2011/06/02(木) 19:48:10.79ID:CWksyqWH
ActiveXからCODのMessage使ってメール送信してるんですが
受信したメールを転送できなくさせるプロパティや別の方法ありませんか?
ご教示を…
0191名無し~3.EXE
垢版 |
2011/06/02(木) 22:31:31.17ID:CWjjGc48
もうちっと背景を晒せ
なぜメールを送りたいのか 相手は人間なのか
相手はどんなツールで転送するのか 相手が転送したら何がまずいのか
0192190
垢版 |
2011/06/02(木) 22:58:43.37ID:ls1CRCom
>>191
>なぜメールを送りたいのか
システム上で使用する為

>相手は人間なのか
受信者は人間

>相手はどんなツールで転送するのか
超マイナーなメーラ

>相手が転送したら何がまずいのか
セキュリティ上の問題
本文コピペすりゃ意味ないんだけどねw

簡単に概略を説明を付け足す
VB系言語で使用しており、現に正常に機能している。
VB内でActiveXのCODオブジェクトを使用し、Message関数でメールをSMPT送信している。
この部分に機能を追加すると言う意味です。
欲しい機能は、受信者がそのメールを転送できなくする事。

メール送信時にMessage関数のプロパティとかで付加できないかなぁと淡い期待をいだいている。
そもそもメールが転送できなくなる機能がメールプロトコルに存在した事すら今日知った。
メールのオプションで「重要」とか「受信者がメール開いたら送信者へ受信確認を行う」とかの設定あるでしょ?
あんな感じで「転送不可」にする設定があるらしい。
それをWSHやらのWindows Scriptでちょちょいとハックしてやりたい。
0193190
垢版 |
2011/06/03(金) 21:55:17.68ID:0Ff8pwrr
解決した
Message.Sensitivityでできる
ただSMTP送信ではムリだったので諦めてVBのSendで結局やる事になりそうだわ
0194名無し~3.EXE
垢版 |
2011/06/03(金) 22:44:08.40ID:71Rc4YUZ
Sensitivityって、ほとんどOutllookでしかサポートされてないのとちゃう?
0195190
垢版 |
2011/06/04(土) 11:53:30.64ID:tAuxhA3v
>>194
OL以外でもSensitivityが機能するメーラがあるんだな、これが
まぁ、普通はこんな機能使わないし本文コピペできるから意味ないけどw
0196名無し~3.EXE
垢版 |
2011/06/08(水) 20:27:12.99ID:u8KGLz+m
basp21のdllでメールの送受信するスクリプト書いてます。
sslの処理は、melonにお願いしてpop3で受信してます。
メールの受信でほかにもっと便利なActiveXのDLLはあるんでしょうか?
0197名無し~3.EXE
垢版 |
2011/06/11(土) 18:57:59.05ID:yFQjK4iS
いくらでもあるけど、何を以て便利と感じるかは人それぞれ

なので、いろいろ使って自分が一番便利だと思うのを使えば良い
0198名無し~3.EXE
垢版 |
2011/06/11(土) 19:15:07.83ID:JhcRxHh+
IE9を入れるとmshta.exeがバージョンアップし
sfcminiのCallBackが利かなくなるんだが
誰が解決策を見つけた人がいたら教えて。
何らかのセキュリティ制限に掛かっていると思うんだが。
0204名無し~3.EXE
垢版 |
2011/06/16(木) 23:37:06.02ID:vZlUxwoj
関数が使えるから関数型言語ってw
そんなアホなこと言う奴まだいたんだw
0206名無し~3.EXE
垢版 |
2011/07/05(火) 16:49:08.59ID:Vww4Gcrx
JScriptを使い始めたんですが
関数の引数に使用できるオブジェクトの一覧みたいなのないですか?

ある関数Aでオブジェクト作って、それを引数にして別の関数Bに投げて、
戻り値をAでまた処理する〜みたいなことをやってるんですが
オブジェクトによって引数にできるものとできないものがあるみたいで…

試行錯誤してるうちに、ArrayオブジェクトとStringオブジェクトは使えるけど
FileSystemObject オブジェクトからGetFolderメソッドで取得したフォルダオブジェクトは使えない〜みたいな経験則は分かってきたんですが
時間がかかりすぎるんで一括で知りたいんです
でもういうドキュメントが見つからなくて……

ご存知でしたら教えくてください
0207名無し~3.EXE
垢版 |
2011/07/05(火) 20:26:18.16ID:JPwGM5pz
どんなオブジェクトでも関数の引数に使用できるが?
使えない〜って〜のがわからん
0208名無し~3.EXE
垢版 |
2011/07/05(火) 20:50:55.33ID:y3KcID81
Default Property のことだな。
そんなモン使うな。
0209名無し~3.EXE
垢版 |
2011/07/05(火) 21:01:29.56ID:JPwGM5pz
Default Propertyがあるとオブジェクトそのものが渡せんてこと?
ならDefault Propertyがあるオブジェクトの一覧がほしいってこと?
0210206
垢版 |
2011/07/06(水) 12:23:31.80ID:skFqsTsw
サーセン、なんか今日書き直してみたら普通にフォルダオブジェクトも渡せました
別の部分が間違ってたみたいです

>>208
使うとなんかマズイですか?

>>207,209
とりあえずどんなオブジェクトでも渡せるってことが分かれば十分です
ありがとうございました
0211名無し~3.EXE
垢版 |
2011/08/03(水) 21:36:10.58ID:ps1zRwLo
色々弄繰り回してたら、wshで出来ないことを探す方が難しいかもしれないと思い始めている自分がいる...
0212名無し~3.EXE
垢版 |
2011/08/03(水) 22:08:50.93ID:2N1IXc+j
wshでできることよりできないことのほうが多いが?
0214名無し~3.EXE
垢版 |
2011/08/03(水) 23:30:51.81ID:ps1zRwLo
>>213
何のためにバイナリを扱うの?
用途によっては、バイナリが扱えなくても、操作は出来たりするよ
0215名無し~3.EXE
垢版 |
2011/08/04(木) 02:39:21.16ID:5aLayNA2
バイナリくらい扱えないでwsh使ってるような顔するんじゃねーよ
0216名無し~3.EXE
垢版 |
2011/08/04(木) 06:22:11.50ID:boF8mYqi
ADO.Streamでバイナリ扱えるが
0217名無し~3.EXE
垢版 |
2011/08/04(木) 06:43:49.56ID:7pIgG5eb
どちらも正しい
WSHでは何も出来ない、バイナリも扱えない
出来るのはちょっとした計算と文字列操作、そしてそれをメッセージボックスやコンソールに表示する程度

でもWSHにはActiveXという強力なAPIがある
これを使えばほぼ何でも出来る
COMの自作が出来るようになれば、「出来ないことの方が多い」なんてことは無くなる
但し、COMの自作が出来る奴が、WSHに拘る必要は無いと思うけどね
0218名無し~3.EXE
垢版 |
2011/08/04(木) 08:08:20.71ID:yS1szih7
>>217
COM自作するんだったら最初からCだよな
COMも便利だけど
0219名無し~3.EXE
垢版 |
2011/08/04(木) 08:31:53.61ID:jHSdlNb+
ファイルを開く/保存ダイアログをXP限定じゃなく標準で使えるようにしてほしい
0220名無し~3.EXE
垢版 |
2011/08/04(木) 09:37:20.28ID:umshcNeO
>>217
別に自分でCOMを作らなくても、誰かが作ってるさ...とか思ったりして...
ある意味、非常に正しいオブジェクト指向だが...
0223名無し~3.EXE
垢版 |
2011/08/04(木) 17:48:38.95ID:5aLayNA2
>>219
標準のPowerShellで使えるからWSHからRun/Execすれば使える
標準の.NETでdll作ればWSHで使える
0224名無し~3.EXE
垢版 |
2011/08/04(木) 18:32:13.05ID:5aLayNA2
officeが入ってればcommon dialog ocxが使えるんじゃなかった?
0225名無し~3.EXE
垢版 |
2011/08/09(火) 10:28:34.52ID:TjrYeXBk
Windows2000+WSH5.6で使える「ファイルを開く」ダイアログ
ttp://scripting.cocolog-nifty.com/blog/2007/02/windows2000wsh5_ee23.html
0227名無し~3.EXE
垢版 |
2011/08/26(金) 15:20:07.29ID:LvLtNN8d
Shiftキー押してるかどうかで挙動を変えたいんだけどどうすればいいの?
0228名無し~3.EXE
垢版 |
2011/08/26(金) 19:18:19.23ID:HAom/pq3
>>227
Keycode
てかどっからのイベントなんだよ?
htmlなのかアイコン押下時からなのか
0229名無し~3.EXE
垢版 |
2011/08/26(金) 20:12:32.27ID:C1/Pylbq
htaとかのキーイベント内での判定なら
event.shiftKey
で取れると思うけど、
コンソールのプログラムでのやり方は分からない
0230名無し~3.EXE
垢版 |
2011/08/26(金) 22:49:44.40ID:hYZBT1ST
Windows7のタスクバーからワンクリックでごみ箱を削除するために以下
 Empty.CMD 1.05 (ごみ箱を空にするバッチファイルとVBScript)
 http://www.vector.co.jp/soft/win95/util/se313491.html
※bat版とvbs版それぞれに確認ダイアログの有無違いで2種の計4種、機能は同じ

を試してみたのですが、XP機では問題なく動作するものがWin7では動作しません
削除の確認は必要でbat窓は不要なためvbs版を使いたいのですが
Win7で正常に動作させるためには何か修正が必要なのでしょうか?
「wsh ごみ箱 空」等のキーワードで複数ggってみたのですが原因らしいものが掴めません
ggった中でYahoo知恵遅れでは上記ファイルがWin7で正常に動作したという書き込みも見たのですが
手元のXP機とWin7機の確認ではWin7機だけどうしても動作してくれません
XPと7でのWSH互換性などといった問題は特に無いようなのですが
手ほどきお願いします
0231名無し~3.EXE
垢版 |
2011/08/26(金) 22:56:56.11ID:hYZBT1ST
環境で書き忘れましたがXPも7も32bitです
そして書ききれなかった上記ファイルの「削除前に確認ダイアログを表示するvbs」のソースです

' EmptyF.VBS V1.05 (C) yoshioka.teruo@nifty.com 2007-12-14
' EmptyF.VBS empties RecylcleBin.
' Usage: EmptyF.VBS

Option Explicit
Const ssfBITBUCKET=10
Dim fso
Dim Shell
Dim Folder
Dim FolderItem
Dim sFolder
0232名無し~3.EXE
垢版 |
2011/08/26(金) 22:57:52.01ID:hYZBT1ST
Set fso=CreateObject("Scripting.FileSystemObject")
Set Shell=CreateObject("Shell.Application")
Set Folder=Shell.NameSpace(ssfBITBUCKET)
For Each FolderItem In Folder.Items()
If fso.FileExists(FolderItem.Path) Then
fso.DeleteFile FolderItem.Path,True
ElseIf fso.FolderExists(FolderItem.Path) Then
fso.DeleteFolder FolderItem.Path,True
End If
Next
If Folder.Items().Count=0 Then
Set sFolder=Shell.NameSpace(WScript.ScriptFullName & "\..")
Folder.MoveHere sFolder.Items().Item(WScript.ScriptName)
Do While Not sFolder.Items().Item(WScript.ScriptName) Is Nothing
WScript.Sleep 100
Loop
sFolder.MoveHere Folder.Items().Item(0)
End If

-----------
ここまで
0233名無し~3.EXE
垢版 |
2011/08/27(土) 00:21:15.25ID:yzI0rKlM
Set sFolder=Shell.NameSpace(WScript.ScriptFullName & "\..")
が駄目なんだろ
Set sFolder=Shell.NameSpace(fso.getparentfoldername(WScript.ScriptFullName))
にしろ
0234名無し~3.EXE
垢版 |
2011/08/27(土) 00:26:04.52ID:Gxo9AMAs
>>233
ありがとう!
Win7でもvbs実行で正常にごみ箱が空になりました
0235名無し~3.EXE
垢版 |
2011/08/27(土) 00:31:50.43ID:Gxo9AMAs
>>233
せっかく教えてもらったのに確認ダイアログが出るコードはこちらでした orz
-----------------------------------------------------------
Option Explicit
Dim Folder

Set Folder=CreateObject("Shell.Application").NameSpace(10)
If Folder.Items().Count=0 Then
WScript.Echo "ごみ箱は空です。"
Else
Folder.Self.InvokeVerb "ごみ箱を空にする(&B)"
End If
------------------------------------------------------------

申し訳ないですが↑のどこが悪いのか教えてください
0236名無し~3.EXE
垢版 |
2011/08/27(土) 01:48:01.94ID:2AZeqjI/
>>235
Windows 7 だと、InvokeVerb がうまく動かなくて、DoIt() を使うといいらしい
という情報があって、ちょっと試してみたんだけど、

-----------------------------------------------------------
Dim Folder
Set Folder=CreateObject("Shell.Application").NameSpace(10)
If Folder.Items().Count=0 Then
WScript.Echo "ごみ箱は空です。"
Else
Folder.Self.Verbs().Item(2).DoIt() '2は3番目のメニュー項目(ゴミ箱を空にする)を表す
End If
------------------------------------------------------------

VBScript的には正しいみたいで、Win7でも、インタプリタ上からは動くんだけど、
.vbsファイルにして、cscript/wscript経由で起動すると DoIt() が反応しない

セキュリティ設定とかの問題かもしれんが、これ以上調べられなかった
0237名無し~3.EXE
垢版 |
2011/08/27(土) 02:26:41.74ID:Gxo9AMAs
>>236
ありがとうございます
自身でもわからないながら色々ggってみてはいますが
Folder.Self.InvokeVerb "ごみ箱を空にする(&B)" をとりあえずWScript.Echo "入ってますが何か?"に置き換えて
ここまではOKで、削除でコケてるということまでは理解できました
言われるようにVista以降のUAC絡みの問題なのかもしれませんが
自身でももう少し調べてみます
もし他にわかる方いらっしゃいましたら宜しくお願いします
0238名無し~3.EXE
垢版 |
2011/08/27(土) 04:09:37.51ID:yzI0rKlM
doitに変えて
最後に
msgbox "waiting"
と入れれ

0239名無し~3.EXE
垢版 |
2011/08/27(土) 04:16:54.04ID:yzI0rKlM
invokeverb "empty"
に変えてもいいが、待つのは必要だな
0240名無し~3.EXE
垢版 |
2011/08/27(土) 12:35:55.97ID:Gxo9AMAs
>>238-239
変えてみましたが動きませんでした
削除されずに"waithing"が表示されるだけです
>>238のは>>236
Folder.Self.Verbs().Item(2).DoIt()

Folder.Self.Verbs().Item(2).DoIt
で合ってますよね?
0241236
垢版 |
2011/08/27(土) 13:47:03.43ID:2AZeqjI/
>>238
非同期の問題だったとは気がつかなかった

いくつかパターンを試してみたけど、以下だと同期で処理されるみたい(Win7 x64 SP1で確認)
同期と非同期の基準が分からん

---------------------------
Dim items
Set items = CreateObject("Shell.Application").NameSpace(10).Items()
If items.Count > 0 Then
For Each verb in items.Verbs
If verb.Name = "削除(&D)" Then
verb.Doit()
End If
Next
End If
---------------------------
0242名無し~3.EXE
垢版 |
2011/08/27(土) 14:19:33.04ID:Gxo9AMAs
ありがとうございます
Win7 x86 SP1での動作もばっちりokでした!
>>236>>238のお二方に心から感謝します
おかげさまでexe化してタスクバーピン化することもできて快適になりました
0243名無し~3.EXE
垢版 |
2011/08/27(土) 20:28:52.69ID:ptTGLG6K
"削除(&D)" て"ゴミ箱を空にする" と違うけどええの?
0244名無し~3.EXE
垢版 |
2011/08/27(土) 20:59:32.17ID:Bo3iCK5G
>>243
参照してるオブジェクトが違う
>>241のはゴミ箱に対するコマンドじゃなくて、ゴミ箱の中のファイル群に対するコマンドなので、
「ゴミ箱を空にする」はない
0245名無し~3.EXE
垢版 |
2011/08/27(土) 21:04:34.76ID:ptTGLG6K
そいいう手があったんね
0246名無し~3.EXE
垢版 |
2011/08/27(土) 21:05:58.03ID:rMZXHF9P
根拠は説明できかねますが
Win7だと何故かスクリプトからコンテキストメニューの「ごみ箱を空にする(B)」を叩くことができない
そこで>>241さんの手法だと
ごみ箱内のファイルをループで全選択した状態でのコンテキストメニューの「削除(D)」を叩いて空にする
といったやり方をされているようなので間違いではないはずです

できれば>>241さんに直接説明いただけると参考になるのですが
0247名無し~3.EXE
垢版 |
2011/08/27(土) 21:07:31.53ID:rMZXHF9P
書いてる間に>>244さんがわかりやすく説明してくれていました
すみません、、、、
0248名無し~3.EXE
垢版 |
2011/08/27(土) 21:10:18.99ID:ptTGLG6K
なら

Dim items
Set items = CreateObject("Shell.Application").NameSpace(10).Items()
If items.Count > 0 Then
items.invokeverbex "delete"
End If

でもいいな
0249名無し~3.EXE
垢版 |
2011/08/27(土) 22:49:41.89ID:41W0E71M
>>248
うまく動作しました

ところで、パラメタ "empty" や "delete" は、どこを調べれば情報があるのでしょうか
キーワードで検索してもそれらしいものを見つけられないので
0250名無し~3.EXE
垢版 |
2011/08/27(土) 23:49:46.71ID:ptTGLG6K
たぶん、dllの中を探せばあると思う
0251名無し~3.EXE
垢版 |
2011/08/28(日) 00:03:46.43ID:rMZXHF9P
>>248
これも問題なく動作しました(Win7 SP1 x86)
仮にごみ箱内に1000とか大量のファイルが存在した場合
>>241さんのようにループ回すやり方と比べて単純に"delete"とするほうが
コストはかなり低いものでしょうか?
0252名無し~3.EXE
垢版 |
2011/08/28(日) 01:37:04.39ID:F83k7zR/
>>250
回答ありがとう
さすがにdllの中では私には難しそうですが

>>251
>>241のループはメニュー文字列からコンテキストメニューのインデックスを計算してるだけで、シェルに対する削除指示は1アクションのみ
ファイル毎にループして削除してるわけではない
なので、実行コストはどちらも変わらないと思う

ソース記述に関しては "delete" の方がスマートかな、とは思うけど
0253名無し~3.EXE
垢版 |
2011/08/28(日) 01:54:42.96ID:eQoxoyne
>>252
丁寧な解説ありがとう
つまりコンテキストメニュー内をループで"削除(D)"のインデックスを探すわけですね
変数Itemsはごみ箱内のオブジェクト数をカウントするためのものと勘違いしてました
とても勉強になりました
0254名無し~3.EXE
垢版 |
2011/09/25(日) 19:39:06.42ID:MDcIqEtA
BSAP21使用のクリックすればメールを飛ばす.jsスクリプトファイルがあるのですが、
Windows7の64bitで動作させるとbasp21のオブジェクトが作成できないと出ます
クリックして動作するようになるにはどうればいいでしょうか
おたすけお願いします

環境変数に以下の二行を追加しましたが、クリックしても同エラーが出ました
cscript c:\windows\SysWOW64\cscript.exe
wscript c:\windows\SysWOW64\wscript.exe
0255名無し~3.EXE
垢版 |
2011/09/25(日) 20:13:28.39ID:wOWFeO1g
>環境変数に以下の二行を追加しましたが、
この場合、環境変数が何の関係がある?
関連付けを変えろボケ
0256名無し~3.EXE
垢版 |
2011/09/25(日) 21:11:57.26ID:MDcIqEtA
ありがとうございます
関連付けをどうすればいいか詳しく教えてください
BASP21を利用していないwshスクリプト(.jsファイル)はダブルクリックしただけで動きます
もちとんBASP21はインストール済みです

環境変数を変えたのは以下サイトを見て
32bit版のCscript.exe / WScript.exeを利用していないからだと思ったからです
http://blog.goo.ne.jp/cestaff/e/9a080184a3e6008e54e49e958e87503d
0257名無し~3.EXE
垢版 |
2011/09/25(日) 22:11:30.83ID:mHEOumJu
>256
メールを送るだけならCDO.Messageでいいはずだぜ
他にもたとえば圧縮するならコマンドラインの7zipっていう手もあるはず

その用途だけのために関連づけを変えるのは
ちょっと他のスクリプトにも影響が出そうで怖いな
0258名無し~3.EXE
垢版 |
2011/09/25(日) 22:59:17.89ID:wOWFeO1g
HKEY_CLASSESROOT\jsfile\shell\open\command

それだけならショートカット作れば?
0260254
垢版 |
2011/09/26(月) 22:39:54.33ID:ne+0rpvW
いろいろアドバイスありがとうございます
デスクトップに置いていた.jsスクリプトファイルのショートカットをクリックしたときに
上記オブジェクトが作成できないのエラーが出ていたのですが、
.jsファイル本体をクリックした場合はエラーが出ませんでした
理由は分からないですが解決はできました。ありがとうございました。
0262名無し~3.EXE
垢版 |
2011/09/29(木) 03:51:42.39ID:+/G6sFao
dosのバッチより利点は?
0264名無し~3.EXE
垢版 |
2011/09/29(木) 20:07:56.49ID:PUuNldfV
>>262
forなど制御文は充実してる
(というかバッチにはほとんどない)
0265名無し~3.EXE
垢版 |
2011/09/29(木) 20:15:14.33ID:Ft7GX4v2
バッチよりははるかにまともな構文とライブラリ
特に文字列処理、日付処理が充実している
COMが使える

ただWSHはシェルスクリプト特有の省文字表記が少ないからちょっと面倒だ
その意味でバッチの直系はPowerShellだな
0266名無し~3.EXE
垢版 |
2011/10/05(水) 00:46:47.20ID:dNokulIT
msgboxをだしてok押されるまで
beep音でも間欠音鳴らすには
どう書けばいいのでしょうか?
0267名無し~3.EXE
垢版 |
2011/10/05(水) 01:12:36.60ID:VhrEzm6o
WSHは便利だけど時間のかかる作業やらせた時にどの辺まで
進んでるかっていうのが見られないのがな…

その点バッチは全部出るからバグ取りもやりやすい。
0268名無し~3.EXE
垢版 |
2011/10/05(水) 02:10:38.59ID:pRvu6KFp
>>266
別プロセスでbeepしてMsgBox解ければプロセス終了
>>267
cscript使えばええだけだろぼけ
0269名無し~3.EXE
垢版 |
2011/10/05(水) 12:35:17.08ID:VhrEzm6o
>>268
cscript使ったって一々echoしなきゃ何も出ないだろ。

元々全部出るバッチと比べるのは間違ってる。
0270名無し~3.EXE
垢版 |
2011/10/05(水) 12:42:32.02ID:gkeR/6Og
最近メッセージ表示は
nircmd trayballoonか
%log%ファイルに書きこんで別窓にtail -f %log%
してそっちに表示させるようにしてるな。

ちょっとした進捗はバッチだとtitleで表示させると見やすくかつ邪魔にならない。
0271名無し~3.EXE
垢版 |
2011/10/05(水) 15:20:29.09ID:LjSl6eYH
>>266
かなり強引でお粗末だけど

Set objShell=CreateObject("Wscript.Shell")

Do While True
objShell.Run "cmd /c @echo " & chr(7), 0, true
If objShell.Popup("やらないか?",3,"確認") = 1 Then Exit Do ' 引数2で間欠時間調整/秒
loop
0272名無し~3.EXE
垢版 |
2011/10/05(水) 16:30:17.85ID:pRvu6KFp
createobject htmlfile
<sound src=hoge.wav>
みたいな
0273名無し~3.EXE
垢版 |
2011/10/06(木) 02:09:00.06ID:+bYLm4WF
>>269
だよね

取捨選択の余地も無く、表示内容の自由度もなく
他人(MS)が決めた表示形式で、不要なものまで全部出るバッチなんかより
任意のもののみ自由な形で表示できるcscriptの方が余程優れてるよね

まあバッチもecho offして任意のもののみechoすれば同じだし
俺は何もかも表示されるのはウザいから、大抵そうしてるけどな

プログラムに置いて、何処かに表示したい内容が有れば表示させる処理を書くなんてのは
当たり前のことで別に煩わしくも無いし
0274名無し~3.EXE
垢版 |
2011/10/06(木) 12:41:20.91ID:2Fx0Iqck
いや、逆なんだが…

全部出したい時にWSHじゃ困るって話。

なんかバグ抱えてる時はいちいちechoさせて調べるより
ハラワタ全部さらけ出すバッチの方がわかりやすい時がある。

WSHも良く使うけどね。バッチの方が良いと思う場面もたまにあるってだけさ。
0275名無し~3.EXE
垢版 |
2011/10/06(木) 12:48:49.57ID:BXZ/lA8o
batは想定外の命令文に展開されちゃうことがあるけどwshはいらないだろ〜
0277名無し~3.EXE
垢版 |
2011/10/06(木) 19:41:29.32ID:/2WMJRNk
sfcminiって7の64bitでも動く?
なんか特殊なことしないとダメとかある?
0278名無し~3.EXE
垢版 |
2011/10/06(木) 21:37:18.56ID:+bYLm4WF
>>274
なんかバグ抱えてる時は、普通に実行して単に表示するだけではなく
スクリプトデバッガで実行して、ブレイクポイントやウォッチ式を使うわけだが、、、
0281名無し~3.EXE
垢版 |
2011/10/07(金) 02:33:25.02ID:gKBmiUzh
>>280
tonks
って結局10年前のプロダクトだしなー。もう WSH は見捨てられたのか?
0283名無し~3.EXE
垢版 |
2011/10/08(土) 11:55:17.92ID:AZqaPYDW
WinXPだって10年前のものだよな
未だに超現役だけど
0284名無し~3.EXE
垢版 |
2011/10/08(土) 18:48:39.09ID:Ql472fAY
現役を超えると退役だろ
0285名無し~3.EXE
垢版 |
2011/10/08(土) 23:20:26.63ID:x/W81UVV
>>271
Popupの文字を引数で複数行書くにはどうすれば・・
0289名無し~3.EXE
垢版 |
2011/10/13(木) 21:56:41.61ID:Th80tkLY
popup([
'hoge',
'hoge',
'hoge'
].join('\n'))
0292名無し~3.EXE
垢版 |
2011/10/14(金) 21:26:33.25ID:QJV1RGnu
定番だよね
俺はVBSだからJoin(Array(,,,),vbLf)だけど、やってることは全く同じだし
0294名無し~3.EXE
垢版 |
2011/10/15(土) 04:20:43.43ID:TjatCbGb
性能的に問題が出るときは.NETのStringBuilderを使うのもいいかもね
Set sb=CreateObject("System.Text.StringBuilder")
sb.Append_3 "hoge" & vbCrLf
sb.Append_3 "hoge" & vbCrLf
MsgBox sb.ToString()
0296名無し~3.EXE
垢版 |
2011/10/15(土) 08:34:01.93ID:RKuV4VZ6
負けって・・・勝ち負けだったの?
というか、誰が何と勝負してるの?
0298名無し~3.EXE
垢版 |
2011/10/15(土) 15:22:57.34ID:FcLWV6Nd
wshって.netのクラスまで呼び出せるのかよ
すげぇ〜
0299名無し~3.EXE
垢版 |
2011/10/15(土) 15:46:59.12ID:nNRFiouT
COMのクラスを提供してるものだけだろ
すごかねえ
0300名無し~3.EXE
垢版 |
2011/10/16(日) 10:25:51.52ID:EibUK6Vk
何でwmiスレなくなってしまったん?
スクリーン輝度変更するスクリプトくれくれトンカツ
0303名無し~3.EXE
垢版 |
2011/10/22(土) 21:15:14.53ID:pAk7XCDQ
javascriptからきて、WHSにたどりついた自分はJscriptで勉強中なんだけど、
参考資料少なすぎ。なんで、こんなにJscriptしいたげられてるんでしょ。
javascriptを中心にアドビ系のスクリプトもこなせるし、WSHでこまごまとした
雑務もこなせて、おまけにホームページもこなせる。いいと思うんだけどなあ。
ま、ちょっとした便利な部分だけVBScriptで書いて、残りはJscriptで書くとか
抜け道はいろいろあるんだけど。
0304名無し~3.EXE
垢版 |
2011/10/22(土) 21:39:32.30ID:YVgfBuVq
javascriptで書けばいいんじゃね
0305名無し~3.EXE
垢版 |
2011/10/23(日) 03:24:55.19ID:5OnGmYpi
>>303
MSから説明書をダウンロードしろよ。Jscript,VBscript,WSHの解説は日本語だから大丈夫だよ。
scd56jp.exe
0306名無し~3.EXE
垢版 |
2011/10/23(日) 15:29:49.81ID:FdJcwIUR
わざわざ古いのダウンロードせんでも、新しいのがネットで見れるだろ
0307名無し~3.EXE
垢版 |
2011/10/23(日) 17:46:07.37ID:dWRveOmB
わざわざレスポンスの遅いネットで見ずとも、ローカルのchmでスムーズに見れるだろ

ネットがいくら速くなっても、こういうのに必要なのは速さより早さだし
速さでもメモリ上に読み込まれたchmの読み出し速度と比べたら、光回線ですら千〜万倍遅いし
いくらネットの方が新しいって言ったって、WSHに限れば99.9%以上変化無しだし
0308名無し~3.EXE
垢版 |
2011/10/23(日) 18:51:07.66ID:7jE02IgD
scd56jp.exeの5.6はほぼWSH最終バージョンだしね
0309名無し~3.EXE
垢版 |
2011/10/24(月) 16:41:55.48ID:RmOMuIOm
なんか載ってない記事があったけど忘れた
0310名無し~3.EXE
垢版 |
2011/11/02(水) 00:16:59.87ID:yCP1kMg5
>>277
c:\windows\syswow64\wscript.exe
で動かすのぢゃ
0311名無し~3.EXE
垢版 |
2011/11/02(水) 18:40:54.37ID:hqgrRrtl
関連付けを変えるのか?
0312名無し~3.EXE
垢版 |
2011/11/02(水) 21:38:39.62ID:yCP1kMg5
そこは好きにしたらいいんじゃない?
俺はスクリプト先頭で WScript.FullName をチェックして
c:\windows\syswow64\wscript.exe じゃなかったら,Run で
起動しなおしてるけど
0313名無し~3.EXE
垢版 |
2011/11/04(金) 10:55:10.52ID:tDqmD/cU
WSHスクリプトを64/32bitが違っていたら起動し直す。
ttp://scripting.cocolog-nifty.com/blog/2011/02/wsh6432bit-b32d.html
0314名無し~3.EXE
垢版 |
2011/11/16(水) 17:57:01.26ID:3+bIFKJZ
JScriptでファイルの更新日時の比較をしたくて調べてたんですが
http://msdn.microsoft.com/ja-jp/library/ee722142.aspx

>>ミリ秒ベースの日付比較は、いずれかの Date オブジェクトに
>>午前 0 時以外の時刻が格納されている場合には正しく機能しません。

とありました。ただ実際にスクリプトを組んで動かしてみて
同日のファイル同士やコピーしたファイル同士など色々試してみたんですが
特に不具合は起きませんでした。

上のページにも、「正しく機能しません」とあるだけで具体的な説明がなくて・・・
どういう場合に正しく機能しないのでしょうか?
0315名無し~3.EXE
垢版 |
2011/11/16(水) 18:17:44.31ID:6E+WOUs3
同じ日の異なる時間で等しいとなるのか?
0316名無し~3.EXE
垢版 |
2011/11/16(水) 20:41:14.89ID:wNGKk1F/
>>314
多分単純に
var date1 : Date = new Date('11/16/2011 00:00:00');
var date2 : Date = new Date('11/16/2011 12:00:00');
date1.getTime() == date2.getTime();  // false
ってことだと思う。

getTime()は日付比較ではなくて日時比較ですよ、と言いたいのではないかと。
0317名無し~3.EXE
垢版 |
2011/11/16(水) 20:41:34.70ID:2KwtPpsL
>>314
Dateオブジェクトは日付+時刻を扱うので、
2つのDateオブジェクトで 「(時刻を除いた)日付のみの比較」 を行いたい場合、
比較対象の両者の時刻を 0 にしておく必要がある
というだけでは?

不具合の説明ではなく、プログラミングの初心者に対する単なるアドバイスとしての説明に思える
0318名無し~3.EXE
垢版 |
2011/11/16(水) 22:05:11.67ID:Hn7HAISL
もうひとつ。ファイルの更新日時を比較するんだろ?
ネットワークドライブの場合、保存先のファイルシステムの制限で
1秒ぐらいズレることがあるのはしょうがない。
datediff("s", date1, date2)が2以下なら同じとみなしていくしかないか?
0319名無し~3.EXE
垢版 |
2011/11/17(木) 20:14:35.85ID:6WgVP9XE
>>315-318
よく読み返してみたら日時じゃなくて「日付比較は〜」ってしっかり書いてありましたね
いつも日付+時間のセットで使っているのでうっかりしました。
ネットワークドライブの方でズレるというのは初めて知りました。
こちらは別に注意してみます

ありがとうございました。
0320名無し~3.EXE
垢版 |
2011/11/23(水) 06:34:21.16ID:nwtiGPYP
電波テロ装置の戦争(始)
魂は幾何学、コピー出来る公安はサリンオウム信者の子供を40歳まで社会から隔離している
オウム信者が地方で現在も潜伏している
それは新興宗教を配下とする公安(慶應卒T)の仕事だ発案で盗聴器を開発したら霊魂が寄って呼ぶ来た
<電波憑依>
スピリチャル全否定なら江原三輪氏、高橋佳子大川隆法氏は、幻聴で強制入院矛盾する日本宗教と精神科
<コードレス盗聴>
2004既に国民20%被害250〜700台数中国工作員3〜7000万円2005ソウルコピー2010ソウルイン医者アカギ絡む<盗聴証拠>
今年5月に日本の警視庁防課は被害者SDカード15分を保持した有る国民に出せ!!<創価幹部>
キタオカ1962年東北生は二十代で2人の女性をレイプ殺害して入信した創価本尊はこれだけで潰せる<<<韓国工作員鸛<<<創価公明党 <テロ装置>>東芝部品)>>ヤクザ<宗教<同和<<公安<<魂複<<官憲>日本終Googl検索
0321名無し~3.EXE
垢版 |
2011/12/01(木) 20:01:00.32ID:mSpMO4/a?2BP(0)

WindowsXP Pro SP3 + WSH 5.7
test.js に、フルパスが258Byte以上のファイルをD&Dすると、
WScript.Arguments(i) がバラバラになってしまいます。(日本語は2Byteとして計算)
何とかこれを、バラバラにせずに処理する方法はないでしょうか?
よろしくお願いします。
0322321
垢版 |
2011/12/01(木) 21:02:02.93ID:mSpMO4/a?2BP(0)

WMIService.ExecQueryでwscript.exeを検索して、CommandLineを見てみても、
"が外されてバラバラになっています。
また、Argumentsでも、WMIでもフルパスが長いと後ろの方が切れてしまうようです。
0324名無し~3.EXE
垢版 |
2011/12/02(金) 17:02:35.97ID:lQcqRQ8c
それってだれの制限なの?
0325名無し~3.EXE
垢版 |
2011/12/02(金) 17:13:12.44ID:lQcqRQ8c
ファイル名を指定して実行にドロップしたらどうなる?
それで駄目ならドラッグ&ドロップできんてことだろ?
0326名無し~3.EXE
垢版 |
2011/12/02(金) 17:37:52.90ID:lQcqRQ8c
ショートパス名使えば?
0327321
垢版 |
2011/12/02(金) 19:28:41.17ID:2Ca29Y9K
うーん・・・ とりあえず作っているスクリプト晒します
WSHの仕様なのかなぁ?

D&Dされたショートカットファイルや実行ファイルをDropMyRightsで実行するWSH
http://www1.axfc.net/uploader/Sc/so/297301.zip
0328名無し~3.EXE
垢版 |
2011/12/03(土) 01:45:13.33ID:luRL2aN8
windowsのファイルパス名の最大長は256 Bytes(MAX_PATH=256)
でもAPIでのバッファ長は260 Bytesだから、ファイル移動とかで
256-259Bytesになることはある。
ただし、256Bytesを超えるファイルパスは削除とかできなくなるのは有名。
CMD.exeもこの制限を免れることはできない。
0329321
垢版 |
2011/12/03(土) 04:09:16.88ID:adpHRkP6
>>328 おぉ ありがとうございます。

ついでなので検証結果メモ。(WindowsXP Professional SP3 + NTFS 3.1(5.1))
フルパスに半角スペースを含まない(=D&D時、引数が「"」で囲まれない)場合
・フルパスが259Byte以下ならD&D正常 開く・移動・削除可能
・フルパスが260Byte以上ならD&D異常 開く・移動・削除不能

フルパスに半角スペースを含む(=D&D時、引数が「"」で囲まれる)場合
・フルパスが257Byte以下ならD&D正常 開く・移動・削除可能
・フルパスが258〜259ByteならD&D異常 開く・移動・削除可能
・フルパスが260Byte以上ならD&D異常 開く・移動・削除不能
0330321
垢版 |
2011/12/03(土) 04:25:57.01ID:adpHRkP6
あれ 日本語を含む場合、開く・移動・削除は300Byte以上でもできた
0331名無し~3.EXE
垢版 |
2011/12/03(土) 05:00:45.99ID:luRL2aN8
Bytesじゃなくて文字数だったかもしれん。
あと、WIN32APIのMAX_APTHは260だった。(MAX_FNAMEが256)
ただしNTFSの制限は確か32767だったと思うので、64bit Windows(WIN64API)はまた別かも知れん。
まあC++言語とか使う人じゃなかったら意味ないdefine値だが。
0332名無し~3.EXE
垢版 |
2011/12/03(土) 05:44:57.72ID:luRL2aN8
あっ、NTFSのMFTはは内部Unicode(UTF-16)だった。(なのでwindowsでの取り扱いも同様)
なので260はUnicodeでのカウントであり、Bytesにすると520Bytesだね。
あと、32767はNTFSのパス名の制限であり(とはいえwindowsでは扱えない)
ファイル名、フォルダ名は255文字までなのでお間違えなく。
0333名無し~3.EXE
垢版 |
2011/12/03(土) 05:54:52.63ID:luRL2aN8
ただMAX_PATHが260だとしても、windowsの内部でどうAPIが使われているのか
不明なので正確な制限はexplorerその他の作りにもよるので
使うものを自分で調べるしかないのかも。
0334名無し~3.EXE
垢版 |
2011/12/03(土) 10:49:09.39ID:/gF/+gk+
>>321
ちゅーかなぜ258byteものパスを作れてしまったのかを
追求もすべきじゃね? その原因を防がないと再発するだろ。
0336名無し~3.EXE
垢版 |
2011/12/03(土) 22:24:14.94ID:7jSx8jTM
OLEのドラッグ&ドロップ用インターフェイスを実装できれば
MAX_PATHからは解放されるんだけどね。
0337名無し~3.EXE
垢版 |
2011/12/04(日) 03:54:45.77ID:/eM36+ib
>>336
それはパス名取得にWINAPIを使わずに独自にファイルシステムへの
アクセスを構築するってことか?
FSへのアクセスでWINAPIを使わないなんてDISK解析ツール並みだな。
0338名無し~3.EXE
垢版 |
2011/12/04(日) 14:12:41.55ID:Z/kxLnYq
この制限をほぼ 32,000 ワイド文字へ拡張するには
0339名無し~3.EXE
垢版 |
2011/12/05(月) 00:06:11.19ID:ka3P5M2Z
>>336
それって何を作ればいいの?
デスクトップ上でのドラッグドロップってexplorerの機能じゃなかったっけ?
explorer作れってこと?
0340名無し~3.EXE
垢版 |
2011/12/05(月) 14:17:39.48ID:dd+MJMfN
wshのドロップハンドラはバグってるからな
代わりに使えるまともなドロップハンドラがほしいな
0341321
垢版 |
2011/12/05(月) 18:31:33.54ID:heCA4j0r
「wscript.exe "〜.js"」へのショートカットファイルに、D&Dすると問題ないようです。
ちなみに、D&Dしたファイルは
「C:\Documents and Settings\root\My Documents\MSDN\DropMyRights\引数の最後で権限を指
定 N=NormalUser(制限付きユーザーアカウント相当), C=ConstrainedUser(アクセストー
クンのSIDを制限した更に制限されたアカウント ファイルの入出力もできない), U=Untrus
tedUser(殆ど動かない) 省略するとNになる.txt」
です。(改行含まず)
0342名無し~3.EXE
垢版 |
2011/12/05(月) 19:14:42.85ID:dd+MJMfN
exeなんかのドロップハンドラだな
wshの関連付けを変えてみ
たしか別の問題であかんかったはず
0343名無し~3.EXE
垢版 |
2012/01/04(水) 11:05:50.23ID:kJQWcUz6
C:\Documents and Settings\user\Desktop\foo.js
をダブルクリックで開こうとするとファイルパスのスペースのせい?で
「"C:\Documents" にファイル拡張子がありません。」
と言われます。
C:\Documents and Settings\user\Desktop上で開きたいのですがどうすればいいですか?

foo.jsの中身は
WScript.Echo("Hello World!");
です。

初歩的なことだと思いますがよろしくお願いします。
0344名無し~3.EXE
垢版 |
2012/01/04(水) 11:39:01.18ID:A8nCGYOV
WSHの問題じゃない
関連付けを直せ
0345343
垢版 |
2012/01/04(水) 12:21:16.45ID:kJQWcUz6
エラーメッセージのダイアログのタイトルは「Windows Script Host」です。
このファイルの種類を開くプログラムは「Microsoft (R) Windows Based Script Host」です。
どのプログラムに関連付ければいいんですか?
0346名無し~3.EXE
垢版 |
2012/01/04(水) 12:24:18.98ID:kJQWcUz6
意味がわかりました。できました。すみません。ありがとうございます。
0347名無し~3.EXE
垢版 |
2012/01/04(水) 23:35:05.25ID:ub3zHs/o
>>346
解決策くらい書いてけよ
どうせダブルクォーテーション抜けてただけなんだろうけど
0349名無し~3.EXE
垢版 |
2012/01/05(木) 08:35:09.20ID:swem1qeH
>>348
自己解決しましたはリソースのゴミになる事もしらないのか?
0350名無し~3.EXE
垢版 |
2012/01/05(木) 11:29:22.36ID:yDkWjbJR
解決策は>>344さんが指摘してくれた通りです
0352名無し~3.EXE
垢版 |
2012/01/06(金) 18:49:36.10ID:V81QeaC/
最初から一貫して>>344のレスを受けてできたと書いてあるだけで
自己解決したなんて一言も書いてないし実際に自己解決でもないよねこれ
回答レスに対してできたとレスがある。それで完結してるわけだし。
ただ煽りたいだけなんだろうけど曲解した上に執拗すぎる
0353名無し~3.EXE
垢版 |
2012/01/06(金) 22:20:49.38ID:g4d1YN+d
347からここまでリソースのゴミ
0354名無し~3.EXE
垢版 |
2012/01/07(土) 14:02:14.20ID:qrwUWLRj
神経質なクソムシを放し飼いにしている池沼夫婦が一番のゴミ
0355名無し~3.EXE
垢版 |
2012/01/07(土) 16:40:13.96ID:Pb1/yGKx
ゴミの話はすれ違いなので他所でやってくれ
0356名無し~3.EXE
垢版 |
2012/01/08(日) 20:24:39.99ID:r0HEJAQF
コントロールパネルの拡張子cplファイルをスクリプトで実行したいのですが、どう記述すればいいのでしょうか?
system32上の実体パスを直接Runしてみましたが「アプリケーションに関連付けられていません」と叱られてしまいました

windows7 64bitです
0357名無し~3.EXE
垢版 |
2012/01/08(日) 21:02:45.17ID:r0HEJAQF
自己解決しました
control をつけたら動作しました
0358名無し~3.EXE
垢版 |
2012/01/09(月) 00:04:04.69ID:WH9VO6X0
すれ違い wshと関係ない
0360名無し~3.EXE
垢版 |
2012/01/14(土) 09:52:01.68ID:OtXvzrxF
すみません。主戦場適当なJavaScriptをWebに埋め込むくらいだから詳細不明で教えてくれくれ。
単純な自分だけのバックアップスクリプト作ろうと思ってるんだけど、可能だよね?
・特定のフォルダを常駐監視
・特定フォルダにファイル、フォルダが入ってきたらサーバーにコピー
・できればそれをメールで通知

ざっと調べたところではできそうな気がしてるけど、できないことってあるんだろうか。
Javascriptでローカルのファイルの書き換えとかが面倒、みたいな。
0361名無し~3.EXE
垢版 |
2012/01/14(土) 11:50:29.59ID:Jw8FcaTN
全部出来るよ
FSOとかCDO.Messageとかの超基礎的なCOM使うだけで簡単に
0362名無し~3.EXE
垢版 |
2012/01/14(土) 14:27:14.48ID:OtXvzrxF
>>361
だよね。なんかこんなことに何十万か金を払うとか言ってるばかがいるから
自分でやろうかと思ってるけど、やるとまたそのシステムのメンテとかやらされる
んだろうなあ。俺にその金をよこせ、と言いたい。
ありがとうございます。頑張ってみます。
0363名無し~3.EXE
垢版 |
2012/01/14(土) 21:42:00.36ID:dKG7sohZ
>>362
JScriptね
スクリプト何か書ける人なら1時間あれば余裕で完成するレベル
0364名無し~3.EXE
垢版 |
2012/01/14(土) 22:28:00.85ID:JL/SQUeV
>>俺にその金をよこせ、と言いたい。
いや、やるんなら言いましょうよ。
0366名無し~3.EXE
垢版 |
2012/01/15(日) 12:34:50.35ID:5P5Cq6cB
JScriptはちょっとできるんだけど、文献少ないんだよね。
今まで作ったもの、練習にVBで作ってみよう!
0367名無し~3.EXE
垢版 |
2012/01/22(日) 22:29:15.70ID:sK/e/Fcd
InternetExplorer.Applicationを利用する際にページの読み込みが完了したかどうかを
busyやdocument.readyStateで判断するサンプルを見かけますが、ページの読み込みが
完了した後にJavaScriptを実行しページに変更があっても上記のプロパティには変化が
ないのですが、JavaScriptによる変更が反映されたかどうか確認するには
どうしたらいいのでしょうか?

現在は特定のidを持ったタグ(Element)が追加されるのをwhileでまっているのですが
他に方法があるのなら知りたいです。よろしくお願いします。
0368名無し~3.EXE
垢版 |
2012/01/22(日) 22:48:32.13ID:sK/e/Fcd
すみません忘れていました
IEのバージョンは8.0.6001.18702、cscript.exeのバージョンは5.7です

古いIEでは動かなくても構いません。8で判断する方法をご存知の方がいましたら教えてください。
0370名無し~3.EXE
垢版 |
2012/01/23(月) 17:33:00.93ID:VjSvZeh4
待つようなものじゃないけどな
0371名無し~3.EXE
垢版 |
2012/01/23(月) 20:02:10.36ID:EDFegH9J
既に操作は可能になってるわけだしね
0372名無し~3.EXE
垢版 |
2012/01/24(火) 06:13:43.62ID:mqHHZ9IF
Perlで直接取りに行くってのは?
0373367
垢版 |
2012/01/24(火) 15:31:05.50ID:4k51VPeE
すみませんbusyプロパティは変化していました。setTimeout()で指定した秒数 > WScript.Sleep()で
指定した秒数になっていたので関数が呼び出される前にbusyプロパティを見ていたif文を
抜けていました。ごめんなさい

一応以下が気になっていた処理です。 busyが変化しないならIsScriptRunnigのようなプロパティやメソッドが
存在するのかもと思いお尋ねしました。

[操作するページ]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<script type="text/javascript">
function insert_element(){
 // innerHTMLの書き換えまでのウエイト。このfor文自体に意味はないです。
 for (var i = 0; i < 800; i++)
 {
   for (var j = 0; j < 10000; j++) { }
 }
 var parent_element = document.getElementById('main');
 parent_element.innerHTML = '<p id="new_element">new</p>';
}
</script>
</head>
<body><div id="main"><p>&nbsp;</p></div></body></html>


0374367
垢版 |
2012/01/24(火) 15:32:29.04ID:4k51VPeE
<?xml version="1.0" encoding="UTF-8"?>
<job>
<script language="jscript">
<![CDATA[

var objIE = WScript.CreateObject("InternetExplorer.Application");
// このURLは私の環境でのもの
objIE.Navigate("http://localhost/test/wsh_test.html");
objIE.Visible = true;
while(objIE.busy || objIE.document.readyState != "complete"){ WScript.Sleep(1000); };

// ページの読み込みが完了したのでページ内のJavaScriptの関数を呼び出す
objIE.document.Script.setTimeout("javascript:insert_element();", 100);
// 関数の呼び出しを待つ
WScript.Sleep(100);
WScript.Echo("関数を呼び出しました");
// 関数が呼び出されただけでは下のプロパティには変化がない。
while(objIE.busy || objIE.document.readyState != "complete"){
 WScript.Echo("wait...");
 WScript.Sleep(1000);
};
// insert_element()の処理内容がページに反映されていないので取得できない
var target = objIE.document.getElementById("new_element");
if (!target)
 WScript.Echo('idがnew_elemntのタグは存在しません');

0375367
垢版 |
2012/01/24(火) 15:34:29.39ID:4k51VPeE
[操作するコード続き]

// -----------------------------------------------------------
// ここからが別の方法があるのか知りたかった待機処理
while(true)
{
 WScript.Sleep(1000);
 var target = objIE.document.getElementById("new_element");
 if (target && target.innerText.match(/new/i))
 {
  WScript.Echo('タグが見つかりました');
  break;
 }
}
// -----------------------------------------------------------
// ここでtargetに対する操作

objIE.Quit();
]]>
</script>
</job>

0376名無し~3.EXE
垢版 |
2012/01/24(火) 16:57:00.47ID:DUAeQj0m
なんかアホみたいな気がする
0377名無し~3.EXE
垢版 |
2012/01/24(火) 17:34:10.43ID:DUAeQj0m
最適な助言は、アホなことはやめる
0378名無し~3.EXE
垢版 |
2012/01/24(火) 19:19:37.85ID:DUAeQj0m
なんでsettimeout使うんだ?
0379 忍法帖【Lv=2,xxxP】
垢版 |
2012/01/27(金) 18:33:46.25ID:Z1MT2wFw
// 24時間つけっ放しの電気ポットの消費電力は、冷蔵庫と同等なので
// 朝使う直前に加熱するようにタイマーをセットすれば
// 節電を実現しつつ、朝熱いコーヒーが飲めれる。
0380 忍法帖【Lv=2,xxxP】
垢版 |
2012/01/27(金) 18:35:49.75ID:Z1MT2wFw
// タイガーのポットには6,9時間タイマーが憑いているが
// タイマーの刻時が完了する1時間前に加熱が始まることを考慮して
// パソコンを夜に人生だらだらと使っている人が
// 6,9時間タイマーをいつセットすればいいかを表示するフログラム。
0381 忍法帖【Lv=2,xxxP】
垢版 |
2012/01/27(金) 18:39:02.60ID:Z1MT2wFw
using System;
using System.Text;
using System.Drawing;
using System.Windows.Forms;

public class Test : Form {
[STAThread]
0382 忍法帖【Lv=2,xxxP】
垢版 |
2012/01/27(金) 18:43:02.30ID:Z1MT2wFw
 static void Main() {

 DateTime dtNow = DateTime.Now;
 int hour_min = dtNow.Hour*60 + dtNow.Minute;

 if ( hour_min < 1*60+40 ) {
  MessageBox.Show("ポットのタイマーの6時間セット予定");
  System.Threading.Thread.Sleep(60000*(100-hour_min));
  MessageBox.Show("ポットのタイマーの6時間セット"); }
0383 忍法帖【Lv=2,xxxP】
垢版 |
2012/01/27(金) 18:45:54.69ID:Z1MT2wFw
 dtNow = DateTime.Now;
 hour_min = dtNow.Hour*60 + dtNow.Minute;

 if ( hour_min < 22*60+40 ) {
  MessageBox.Show("ポットのタイマーの9時間セット予定");
  System.Threading.Thread.Sleep(60000*(22*60+40-hour_min));
  MessageBox.Show("ポットのタイマーの9時間セット"); }
0384 忍法帖【Lv=2,xxxP】
垢版 |
2012/01/27(金) 18:49:23.75ID:Z1MT2wFw
 dtNow = DateTime.Now;
 hour_min = dtNow.Hour*60 + dtNow.Minute;

 if ( hour_min > 22*60+40-1 ) {
  MessageBox.Show("ポットのタイマーの6時間セット予定");
  System.Threading.Thread.Sleep(60000*(24*60-hour_min+1*60+40));
  MessageBox.Show("ポットのタイマーの6時間セット");
 } } }
0385 忍法帖【Lv=2,xxxP】
垢版 |
2012/01/27(金) 18:52:51.80ID:Z1MT2wFw
// C:\Windows\Microsoft.NET\Framework\v2.0.50727\csc.exe /t:winexe PM1040AM0140pot.cs
// レベルが低いと2ちゃん人生つらいよ。
0387名無し~3.EXE
垢版 |
2012/01/27(金) 21:51:27.40ID:v/z+KYfY
お兄さん”キ”が抜けてますよ
0388名無し~3.EXE
垢版 |
2012/01/28(土) 01:04:31.95ID:FTMxJQ6Q
settimeoutを使わずに読み込んだページのjavascrptの関数を呼ぶ方法ってあるんですか?
アホなことはやめます。それ知りたいです。
0389名無し~3.EXE
垢版 |
2012/01/28(土) 01:08:49.49ID:FTMxJQ6Q
何故呼び出した関数を待つ必要があるのか伝わらなかったようなので敢えて書きましたが
読み出す方のページも編集できるならこんなことしてませんよ
0390名無し~3.EXE
垢版 |
2012/01/28(土) 02:49:02.27ID:rYMqbgzQ
やっぱりあほだったw
なぜできないと思うんだ?やってみれば?
0391名無し~3.EXE
垢版 |
2012/01/28(土) 22:27:47.27ID:KJ9P9ebl
今までは、xmlの処理の仕方は、url に適当な物が入っているとして
Set objxml = CreateObject("MSXML2.XMLHTTP")
'Set objxml = CreateObject("Microsoft.XMLHTTP")
objxml.Open "GET", url, False
objxml.Send
として、objxml.responseText を実際には正規表現で処理していました
これを以下のようにして
'Set xDoc = CreateObject("MSXML.DOMDocument")
Set xDoc = CreateObject("MSXML2.DOMDocument")
xDoc.async = False
If xDoc.Load(url) Then
Else
'エラー処理
end if
にして後は、標準的なxml処理を勉強して書き換えようと思っています。
この方法が標準的な物かどうか良く分かりませんが、MSや他のサイトで実際の例が多いので
しかし、今までは処理の過程で変なことになったとき(例えば日付のデータが半年以上前)
そういう風な情報と共に objxm.responseText をmsgboxで出力していました。
新しいやり方で.responseText に対応する物はどうやって得られるのでしょうか?
自分なりに検索して見ましたが、よく分かりません
0392 忍法帖【Lv=13,xxxPT】
垢版 |
2012/02/02(木) 22:51:53.30ID:o9UYucJK
既出だったら申し訳ない
Windows 8って(特にDPインスコした方)VBScript動く?
0393名無し~3.EXE
垢版 |
2012/02/03(金) 19:14:57.21ID:5Q43K06C
>>392
互換性命のMSがそんなに早く切るとでも?
0394名無し~3.EXE
垢版 |
2012/02/03(金) 20:33:57.24ID:kUR9WePX
WSHはメジャー更新が無くなって10年以上経つんだよ
そろそろ切っても、全然「早い」うちに入らないし、
今までも10年未満で切ってきたものは腐るほどあるし
0395名無し~3.EXE
垢版 |
2012/02/08(水) 21:51:18.29ID:VU86cqPY
すみません。どなたか叡智をご披露ください。
Win7でWSH使ってますが、cscript.exeで使っているスクリプトをちょっと改変して
ファイルをドラッグアンドドロップして作動する作りにしようといろいろ苦闘してみましたが、
どうもできず、ならばいっそドラッグアンドドロップでcscript.exeから作動するように
設定したいのですが、どうやらバグで自分でレジストリを書き換えろ、とGoogle様は
おっしゃいます。
http://support.microsoft.com/kb/981847/ja
いじるのはやぶさかではありませんが、見るといろいろいじるみたいで、若干
不安。なにか特徴的にほかに重大な影響与えたりするんですかね、、、。
テストマシンではないので、不安定なのは避けたいかなあと思っておりまして、、、、、、。
0396名無し~3.EXE
垢版 |
2012/02/08(水) 22:00:55.19ID:7syHCDa/
batでも書けばいいんじゃない?
0397名無し~3.EXE
垢版 |
2012/02/08(水) 22:35:18.33ID:VU86cqPY
>>396
素人仕事でbatも書いてはいるんですが、すでにWSHで完成してるものを
わざわざまた1からというのもどうかと思い、、、、。目の前にあるこのVBS
をそのまま流用できないかと思っているわけでして。
しかも、batはbatで例の全角スペース問題があるのでまたいろいろ面倒で
もうVBSでいかせてくれ、という気分なのです。
なんでこうどれも中途半端なんですかね? M$さん。
0399名無し~3.EXE
垢版 |
2012/02/08(水) 22:51:52.84ID:fq1ZqKmm
>>395
何をどう苦闘してどんな結果になったから「どうもできず」という判断に至ったのかサッパリわからんわけだが……
if WScript.FullName <> "cscript.exe" then
Run "cscript.exe //nologo " & WScript.ScriptFullName & 引数
end if
みたいなことをすればいいんじゃね?
0400名無し~3.EXE
垢版 |
2012/02/08(水) 22:59:50.78ID:3/Fw/xJz
CScript.exe強制実行でぐぐれだな
0401名無し~3.EXE
垢版 |
2012/02/08(水) 23:09:36.25ID:VU86cqPY
いろいろありがとうございます。ちょっとアタマが痛いので、本日は失礼します。
書いてあることを参考にまたいろいろいじってみます。
ありがとうございます。あー頭が痛い。もう仕事やだorz
0402名無し~3.EXE
垢版 |
2012/02/11(土) 13:31:40.94ID:vThnfM65
>>395
> いじるのはやぶさかではありませんが、見るといろいろいじるみたいで

色々って…お前全然文章読んでないだろ。
2か所を一文字変えるだけだろが。
0403395
垢版 |
2012/03/03(土) 09:39:45.03ID:+PGrtVhN
>>402
久しぶりに来たら止まってるので激遅レスしますが、そのちょっとした変更が
重大な破滅を及ぼしませんですか、ってことですよ。
だってたった3文字の言葉で世界が滅びちゃうんですよ。ムスカさんだって
「目が目があぁぁぁ」とかなっちゃうんですよ。慎重にやらないと。この1ヶ月
まるでプライベートの記憶がないですが、ちょっといじってみましょうかな。ははは。
0404名無し~3.EXE
垢版 |
2012/03/03(土) 11:47:14.80ID:0qp0Fq4r
負け惜しみバカ、現るw
0406名無し~3.EXE
垢版 |
2012/03/06(火) 01:05:47.20ID:lps1eYvQ
MTP(Media Transfer Protocol)/PTPデバイスのフォルダやファイルにアクセスするには
どうやればいいの?
0409名無し~3.EXE
垢版 |
2012/03/11(日) 01:47:40.05ID:CnuvY2td
「馬鹿」って言うと「馬鹿」って言う...
0410名無し~3.EXE
垢版 |
2012/03/11(日) 02:10:51.13ID:9MbQzsVW
こだまでしょうか、いいえWScript.Echoです
0411上殿
垢版 |
2012/03/14(水) 21:53:48.17ID:9hRXbLfc
問題解決授業進行
0413名無し~3.EXE
垢版 |
2012/04/08(日) 18:37:59.27ID:6qr8+IAw
いろいろ使ってるよ、継続。
0414名無し~3.EXE
垢版 |
2012/04/08(日) 18:44:50.12ID:YEOnBHjJ
sfcmini入れとくと暇な時にJScriptで色々なことができる。
開発環境はどこにでも入れられるわけじゃないからな。
0415名無し~3.EXE
垢版 |
2012/04/08(日) 23:24:08.93ID:6qr8+IAw
そういうとこでは逆にexcel.applicationが使えるだろ
0416名無し~3.EXE
垢版 |
2012/05/14(月) 17:42:05.47ID:pkrFa5M6
JavaScriptでブラウザの自動操作した後に、完了画面を取りたいのですが、
スクリーンショットは調べたら無理そうとのこと。(VBA使えば可)
どのようにするのが1番いいでしょうか?
名前をつけて保存とか?
0418名無し~3.EXE
垢版 |
2012/05/20(日) 22:42:56.19ID:IBtJUAZy
WSH(・∀・)スレッド! Part 4
なくなった?
0419名無し~3.EXE
垢版 |
2012/05/21(月) 00:30:50.92ID:gwPcaf05
Win8ってJSでしょ
JSからならWSH使うんじゃんあいの?
0420名無し~3.EXE
垢版 |
2012/05/22(火) 00:05:41.79ID:wtcQQlP5
Win8ってPSでしょ
PSからならWSH使わないんじぁあいの?
0421名無し~3.EXE
垢版 |
2012/05/22(火) 03:54:51.37ID:qMewaru7
>>418
1000いってそのまま立ってないっぽいね
0422名無し~3.EXE
垢版 |
2012/05/24(木) 18:19:27.60ID:recfJsFn
>1
久しぶりに、
アドミ権限がなくMS-WORDが導入されている環境で
rtfファイルをMS-WORD以外のソフトでオープンさせるのに
wshを使いますた。
0425名無し~3.EXE
垢版 |
2012/06/26(火) 16:06:57.77ID:TSwv9Fho
外部コマンドの標準出力を処理したい。
以下のようにやってみたが、ファイルができる前に開こうとしてエラーになる。
WshShell.Run "%comspec% /c aaa.exe > " & outFileName
Set FSO = CreateObject("Scripting.FileSystemObject")
Set outFile = FSO.OpenTextFile(outFileName,1)
0426425
垢版 |
2012/06/26(火) 16:09:58.26ID:TSwv9Fho
コマンド実行が同期でできていないのが問題に思えるが、
調べた限りではWshShell.Runは同期実行のはず。
リダイレクトでファイル作成の部分だけ、非同期で行われているのでしょうか。
コマンドの実行時間は時によって変わるので、一定時間待つ、
という対応もできないのですが、
ファイル出力が完了してから次の処理を行うには
どうすればよいのでしょうか。
0427名無し~3.EXE
垢版 |
2012/06/26(火) 19:02:36.09ID:HXu8BJ81
うそこけ ちゃんとしらべろ ばーか
0431名無し~3.EXE
垢版 |
2012/07/24(火) 07:07:48.13ID:dZFU48S0

助けてください。
FTPサーバからパソコンにファイルをダウンロードするスクリプトを書いたのですが

Set Sh = CreateObject("shell.application")
Set savedir = Sh.namespace("c:\test")
savedir.CopyHere "ftp://ftpserver/hoge.pdf"

WinXPで動作するけどWinVista以降で動作しません。
WinVista以降で動作させるにはどうしたらよいでしょうか。
0432名無し~3.EXE
垢版 |
2012/07/24(火) 22:14:23.02ID:mCLsCJjn
c:\testを作ってないとか管理者モードじゃないとか?
0433名無し~3.EXE
垢版 |
2012/07/25(水) 18:20:03.29ID:GYUYU0zk
>WinXPで動作するけどWinVista以降で動作しません。
こういうときはまず最初にUACを疑うべき
0434名無し~3.EXE
垢版 |
2012/07/26(木) 23:25:55.89ID:3VLZYKNv
そういうときは
msgbox "waiting..."
0435名無し~3.EXE
垢版 |
2012/08/01(水) 16:55:04.84ID:rKc6mq28
A.exeからプロセスの環境変数でB.vbsにパスワードなどの文字列を渡すときに、
ツールなどを使って、その値を途中で抜くことは出来るもんなんでしょうか?
B.vbs自体は改変できないものとして。
0436名無し~3.EXE
垢版 |
2012/08/01(水) 20:06:17.37ID:z/eWl0Ae
B.vbsをC.vbsにリネーム。
B.vbsをゼロから作り、「環境変数を抜いてWScript.Shell.RunでC.vbsを呼ぶ」処理を作る。

しかしそもそもがあまり安定した設計じゃないなこれ。
B.vbsでダミーの環境変数をセットすることもできちゃう。
0437名無し~3.EXE
垢版 |
2012/08/02(木) 21:36:34.40ID:F4xK+iAB
ありがとうございます。
最悪、そのPCが盗まれた場合か、そのスクリプトや連動するアプリだけが盗まれて別のPCで動かした場合に、
IDとパスワードが抽出出来ることだけは避ける仕様にしといたほうがいいかなと考えてます。
0438名無し~3.EXE
垢版 |
2012/08/02(木) 22:58:54.98ID:OmQOAXNM
スクリプト使ってる限り無理だろ
0439名無し~3.EXE
垢版 |
2012/08/04(土) 21:01:55.73ID:zJdYkzbx
環境変数は他のプロセスから見えるだろ
0440435
垢版 |
2012/08/05(日) 14:15:36.76ID:DJAkb7Zf
>>439
A.exeで設定したプロセスの環境変数の値は、別のexeやスクリプトから見えるんですか?
A.exeから起動したB.vbsからなら、継承されたプロセスの環境変数の値が見えるのは理解できるんだけど。
他のexeやスクリプトから、どうやったら覗けるんでしょうか?
0441名無し~3.EXE
垢版 |
2012/08/05(日) 14:33:59.31ID:XWepDnrU
不正行為にも流用できる方法なので
知りたければ他人を不正幇助のリスクに巻込まずに自分で調べましょう
0442名無し~3.EXE
垢版 |
2012/08/07(火) 19:09:10.65ID:1JXfprE0
ttp://technet.microsoft.com/ja-jp/sysinternals/bb896653.aspx
0443名無し~3.EXE
垢版 |
2012/08/10(金) 00:51:43.02ID:mFDwaUT+
すみません、お尋ねしたいのですが
eventquery.vbsでタスクスケジューラのログ(microsoft-windows-taskscheduler/operational)の内容を
表示させることって出来るのでしょうか?
家のPCがWinXP-Homeなので試すことが出来ず、ググってもよくわかりませんでした・・・
0444名無し~3.EXE
垢版 |
2012/08/10(金) 00:53:14.69ID:mFDwaUT+
間違えました。

× eventquery ⇒ ○ eventquery.vbs
0445名無し~3.EXE
垢版 |
2012/08/10(金) 00:57:15.43ID:mFDwaUT+
あれ?拡張子「.vbs」を付けたのになぜか消えますね。
2chの仕様なのかな?
もう1度書きます。

× eventquery  ⇒  ○ eventquery.vbs
0446名無し~3.EXE
垢版 |
2012/08/10(金) 06:13:09.86ID:FUQ1JoYr
VBScriptは昔のノートン先生が結構誤反応をすることが多かったの。
Loveletterウィルスと間違えてDATを消してしまうし
それを逆手にとった荒らしも多かった。
ファイル名やソースを張るときには「対策」されて変換されてしまう。
0447名無し~3.EXE
垢版 |
2012/08/11(土) 05:00:33.23ID:ufIe32gS
443,444ともに拡張子までちゃんと見えてるけど?
0448名無し~3.EXE
垢版 |
2012/08/11(土) 13:22:01.76ID:H+ocVX4U
自分でreplacestr設定したの忘れてるだけじゃね?
0449445
垢版 |
2012/08/11(土) 13:52:06.92ID:TBiUViGB
おっしゃる通りギコナビのオプションで「セキュリティ対策ソフトの誤反応対策」というチェックを外したら
拡張子まで表示されるようになりました。
お騒がせしました・・・
0451名無し~3.EXE
垢版 |
2012/08/27(月) 15:55:20.37ID:JY+Friag
innerHTMLに書いてinnerTextを読めばよかんべ
0452名無し~3.EXE
垢版 |
2012/08/27(月) 21:25:12.48ID:h8v7q1oD
ありがとうございます。以下参考にしてできました。
http://blog.tojiru.net/article/211339637.html

a = "キタ━━━(゚∀゚)━━━!! ";

var IE = WScript.CreateObject("InternetExplorer.Application");
IE.Visible = false
IE.Navigate("");
WScript.Sleep(1000);
WScript.echo(unescapeHTML(a));
IE.Quit();

function unescapeHTML(str) {
var div = IE.Document.createElement("div");
div.innerHTML = str.replace(/</g,"<")
.replace(/>/g,">")
.replace(/ /g, " ")
.replace(/\r/g, " ")
.replace(/\n/g, " ");
return div.textContent || div.innerText;
}
0453名無し~3.EXE
垢版 |
2012/08/27(月) 21:26:16.80ID:h8v7q1oD
戻っちゃってますけどaには数値文字参照が入っているということで・・・
0454名無し~3.EXE
垢版 |
2012/09/09(日) 09:54:48.26ID:ZAXEJnUU
質問があるのですがどなたかお願いします。

ノートパッドにごにょごにょしようと、下記コードにて子ウィンドウのハンドル取得しようとしてるんですが、
2つ目のハンドルがNULLで返ってきます。子ウィンドウ「Edit」のハンドルはどのようにすれば取得できますでしょうか。

hWND(0) = CreateObject("Excel.Application").ExecuteExcel4Macro("CALL(""user32"",""FindWindowA"",""JCJ"",""Notepad"",0)")
hWND(1) = CreateObject("Excel.Application").ExecuteExcel4Macro("CALL(""user32"",""FindWindowExA"",""JJJCJ"",hWND(0),0,""Edit"",0)")
0457名無し~3.EXE
垢版 |
2012/11/12(月) 03:36:14.90ID:Wei4fOg8
結局wsh使ってない?
既存のスクリプトは使ってるだろうけど、
新規で書いてるのか?って意味ね。

個人的には特に不満がないので新規には書いてない
ってか今となってはよくスクリプト書いてたなって思う

powershellスレも勢いあるわけでもないし、そこまで使われてなさげだし
0458名無し~3.EXE
垢版 |
2012/11/12(月) 22:25:11.01ID:1QB6fMeL
>>457
基本的にWindowsはスクリプト書く習慣あんまりないしなー
0460名無し~3.EXE
垢版 |
2013/01/14(月) 22:58:34.95ID:33jbQnCZ
WinXPで、職場の業務用アプリの操作を自動化しようと、WSHのAppActivateとSnedKeysで、自動キー入力を行いました。
キー入力は、Caps Lockはあらかじめオン状態で、↓キーとスペースを数回叩く程度なのですが、
そうするとどう言う訳か、スクリプト実行後にCaps Lockが勝手にオフになってしまいます。
キーボードのCapsLockランプは光ったまま、タスクバーのCAPS表示はOFFになってしまいます。
この状態の時キーボードのCapsLockをオフにすると、タスクバーのCAPS表示はオンになります(つまり逆に認識されてしまう)。
どうしたら、このような挙動を起きないようにできるでしょうか。
AppActivateの後、Sleepを入れても改善しません。
0462名無し~3.EXE
垢版 |
2013/01/15(火) 06:13:41.71ID:czUw0ZxF
SendKeysに任せること自体がそもそも
PCが受け付けずにしくじるリスクがある

つまりCapsLockがなぜONでなければならないのか
業務用アプリの方をなぜ変えられないのかを考えるべき
0463名無し~3.EXE
垢版 |
2013/01/15(火) 10:48:15.57ID:P2QJ2Sbx
windows側、wsh側のバグでしょうね。一個人にはどうしようもありません。
確かにその業務用アプリの出来が悪いけど、それを直すとかは様々な事情により不可能。
0464名無し~3.EXE
垢版 |
2013/01/15(火) 11:04:41.83ID:KTYwik2Y
自動化は普通、SendKeysではなくSendMessageでやるものだよな
戻り値でキーなり何かを送った結果を確認せずに次のキーを送るとか
もう馬かと、鹿かと

winやwshのバグより、不適切なもので不適切なことをしようとする
使用者の頭のバグが一番大きいと思う
0465名無し~3.EXE
垢版 |
2013/01/17(木) 00:10:40.21ID:ng0cD628
>460
 Win7(x64) で試してみただけだけど、regsvr32 からの DLL登録が
 許されてる環境なら、とりあえず AutoItX の ControlSendメソッドを
 使うと、回避出来るかも知れないですよ。
0466名無し~3.EXE
垢版 |
2013/01/26(土) 21:25:04.36ID:Jk0Gr315
>>465
ありがとうございます。 外部の物をインストールするとかは一切できません。
おかしくなる原因は WScript.Sleepにあるのは分かりました。Sleepを排除したら、正常動作しました。
もう、これ以上のことはしないので、では。
0467名無し~3.EXE
垢版 |
2013/01/29(火) 00:50:44.24ID:u4i4Qptw
wsfのscript要素は、charset属性に対応していない?
MSDNのリファレンスには載ってなかった
外部スクリプトをUTF-8にしたいんだけど、できないってことですかね?
0468名無し~3.EXE
垢版 |
2013/01/30(水) 13:18:59.02ID:QZYr9xY1
>467
 ファイル形式を UTF-8 から Shift JIS とかへ変換するだけなら、
 「Adodb.Stream」を CreateObject し、文字コードを指定したり
 すれば出来るけど (「Adodb.Stream Open Type Charset」
 あたりで検索すれば判る筈)、それを「Scripting.Encoder」
 オブジェクトに渡して (または少々荒っぽいけど、文字列を
 ごっそり eval させるとかして) スクリプトの実行が成功するか
 どうかは、やった事ないんで不明。やる気と時間があったら
 結果報告ヨロです。
0469468
垢版 |
2013/01/30(水) 13:51:49.53ID:QZYr9xY1
ありゃ間違えてた、恥ずかしい(/ω\;)
 ×「Scripting.Encoder」
 ○「ScriptControl」
0470名無し~3.EXE
垢版 |
2013/01/30(水) 15:21:02.78ID:0wtvxK+Y
<?xml version="1.0" encoding="utf-8" ?>
0471467
垢版 |
2013/01/31(木) 00:50:43.73ID:CH8AQPWd
回答ありがとうございます。

>>468
ADODB.StreamでUTF-8のjsを読み込み、ScriptControlに渡して実行できました。
今後、自分用のスクリプトを、どの文字コードで記述するかを検討してました。
あまり凝ったことはしたくないので、標準で使えるShift_JISとUTF-16で悩んでみます。

>>470
script要素のsrc属性に指定する、別ファイルのjs/vbsをUTF-8にしたいです。
ご指摘の記述で、wsf自体はUTF-8にできることを確認済みです。
分かりづらくてすみません。
0472名無し~3.EXE
垢版 |
2013/01/31(木) 21:36:24.14ID:kJD0/tlN
>>470の通りだろバカが。やって見てから文句言え。
0473467
垢版 |
2013/02/01(金) 00:29:58.22ID:8pnxd3pB
>>472
BOM付きだといけました
UTF-8のBOM無しにしたかったので、BOM付きは試してませんでした

できる事は分かったので、あとは自分的にBOMを許容するか考えてみます
みなさん、ありがとうございました
0475467
垢版 |
2013/02/02(土) 01:03:00.84ID:JfUKJu1L
UTF-8のwsfからUTF-8のjsをインクルードし、
XML宣言のencoding指定の有無と、BOMの有無で、
正常に動作する組み合わせを確認してみました。

長くなったので、コードと結果は分けて投稿します。
結論としては、外部のjsはBOM無しでは動作しませんでした。

>>474
インクルードする外部のjsもBOM無しでいけました?
0476467
垢版 |
2013/02/02(土) 01:08:39.00ID:JfUKJu1L
使用したコードは以下の通りで、encoding無しのケースでは、
XML宣言とCDATAの記述を削除しています。

■ wsf
<?xml version="1.0" encoding="utf-8" ?>
<job>
<script language="JScript" src="bom.js"></script>
<script language="JScript">
<![CDATA[
WScript.Echo('wsf UTF-8 BOM有 マルチバイト文字');
]]>
</script>
</job>

■ js
WScript.Echo('js UTF-8 BOM有 マルチバイト文字');
0477467
垢版 |
2013/02/02(土) 01:12:15.00ID:JfUKJu1L
結果は以下のようになりました。

encoding:○ wsfBOM:○ jsBOM:○ → ○
encoding:○ wsfBOM:○ jsBOM:× → ×
encoding:○ wsfBOM:× jsBOM:○ → ○
encoding:○ wsfBOM:× jsBOM:× → ×
encoding:× wsfBOM:○ jsBOM:○ → ○
encoding:× wsfBOM:○ jsBOM:× → ×
encoding:× wsfBOM:× jsBOM:○ → ×
encoding:× wsfBOM:× jsBOM:× → ×
0478名無し~3.EXE
垢版 |
2013/02/02(土) 18:41:58.44ID:TWIcQj0n
vbsだけどいけた
os wshのver違いか
0480名無し~3.EXE
垢版 |
2013/02/04(月) 23:56:39.97ID:a/0/56o4
「Alt+F4」で強制終了みたいな動作をVBScriptやJScriptで実現可能ですか?
実現可能ならばどの関数やオブジェクトからできるのかどうか教えてくれませんか
0481名無し~3.EXE
垢版 |
2013/02/05(火) 00:01:06.66ID:Bngv/V4c
createobject("wscript.shell").sendkeys "%{f4}"
0482名無し~3.EXE
垢版 |
2013/02/05(火) 20:42:40.00ID:gKA2Afmk
WMIのWin32_Processで特定のプロセスをTerminateProcess()ってのは?
0483名無し~3.EXE
垢版 |
2013/02/18(月) 21:18:36.99ID:JujOUcYl
Windows XPです
User権限でフォントをインストールするには
コントロールパネルのフォントから
「フォントの追加」で「フォント フォルダにフォントをコピーする」のチェックをはずして追加する
またはコントロールパネルのフォントにフォントファイルを右クリックでドラッグ&ドロップして
「ショートカットをここに作成」をする等といった方法じゃないとインストールできません
(コントロールパネルのフォントのアイコンにはショートカットのマークが付く)
しかしこれだとWindowsを再起動するとインストールされていない状態に戻ってしまいます
0484続き
垢版 |
2013/02/18(月) 21:27:57.37ID:JujOUcYl
そこでWindows起動時に上記の処理を自動でさせようと思い検索してみたところ
//gallery.technet.microsoft.com/scriptcenter/b5acfc13-3c7b-4168-b9c9-792e005304e6
に手順が書いてありました
がうまくいきません
コピーしようとしているからうまくいかないんだ、ショートカットを渡せばいいんだ
と思い
0485続き
垢版 |
2013/02/18(月) 22:45:48.17ID:JujOUcYl
var item = WScript.Arguments(0);
var itemName = item.slice(item.lastIndexOf("\\"));
var WshShell = WScript.CreateObject("WScript.Shell");
var strFonts = WshShell.SpecialFolders("Fonts");
var oShellLink = WshShell.CreateShortcut(strFonts + itemName + ".lnk");
oShellLink.TargetPath = item;
oShellLink.Save();

みたいなことをしてみましたがこれもうまくいきませんでした
0486続き
垢版 |
2013/02/18(月) 22:56:44.13ID:JujOUcYl
上記のページによるとNamespaceメソッド経由でフォントフォルダを取得しないといけないっぽいです
でもそうするとCopyHereかMoveHereしかなくShortcutHereのようなものありません
(そもそもショートカットを渡せばうまくいくのかどうかも定かではありませんが)

別のアプローチはないかと思ってフォントをインストールする際にレジストリやファイルに変化がないか確認してみましたが
Administrator権限での通常のインストールとは違ってレジストリにもファイルにも何も変化が起きていないようで(そんなことあるの?)
違う方法を探すこともできませんでした
0487続き
垢版 |
2013/02/18(月) 23:00:45.28ID:JujOUcYl
User権限でフォントのインストールを自動化させる方法があれば教えてください
外部コンポーネント等なしで自動化できればwshでもcmdでもinfでも構いません

連投すみませんでした
0488名無し~3.EXE
垢版 |
2013/02/18(月) 23:13:28.60ID:Iug60JJu
ちゅーかそんなことができたら怖くね?
メイリオをUsersで上書きできたらまずいだろ
よく知らないけどフォントのインストールは
基本はAdministratorなんじゃないの?
0489名無し~3.EXE
垢版 |
2013/02/18(月) 23:38:25.65ID:JujOUcYl
>>483のような一時的なフォントのインストールはUser権限でもできます
それをWindows起動時に自動的に処理させたいと思っています
0490名無し~3.EXE
垢版 |
2013/02/25(月) 06:37:29.56ID:ihmbGfHa
コマンドラインスレ落ちたのか……。

ジャンクション機能を使ってマウントしたボリュームの
空き容量を知る手がかりを探しに来たのに,ないとはなあ
0492名無し~3.EXE
垢版 |
2013/02/25(月) 12:09:41.57ID:55LTleg1
>>490
ついでに言うと普通にフォルダ内でdirすると表示される
空き容量はリンク先ドライブのものだが。
0493名無し~3.EXE
垢版 |
2013/02/27(水) 17:38:54.79ID:p9DdIIQk
ポップアップダイアログがどうにも最前面に出せないのは不具合なのか仕樣なのか
回避がメンドいな
それともVista以降なら問題ないのだろうか
0494名無し~3.EXE
垢版 |
2013/02/27(水) 21:07:30.82ID:eZq8UEbH
そいつはもうHTAを使った方が早いんじゃないか?
0495名無し~3.EXE
垢版 |
2013/02/27(水) 22:49:28.85ID:/Pjx7wd+
ポップアップダイアログってmsgboxのことかい?
最前面指定があるだろ?
0496名無し~3.EXE
垢版 |
2013/03/10(日) 15:06:32.12ID:VQ6tj2fB
メッセージボックスならポップアップダイアログとは呼ばんだろ
0497名無し~3.EXE
垢版 |
2013/03/10(日) 15:23:14.66ID:EOksbl+N
それは君個人のルールだろ
いや俺も呼ばないけどさ
0498名無し~3.EXE
垢版 |
2013/03/10(日) 19:05:42.47ID:w0fXATEC
wscript.shellのpopupのことじゃろ
0500名無し~3.EXE
垢版 |
2013/03/13(水) 14:26:13.02ID:dIXZUpk6
必要な機能はCOMで賄えってのはVBSというかWSHのスタイルだからな
マウントしたボリュームどころか、普通のドライブの空き容量を取得する手段すら
VBSそのものにはからは提供されていない
WSHのパッケージと同梱なので当たり前に使っているが、FSOだってVBSの機能ではなく
あくまで外部の汎用COMの一つ
0501名無し~3.EXE
垢版 |
2013/03/13(水) 23:34:19.81ID:pGp+xI5T
COMって簡単に作られる?
0502名無し~3.EXE
垢版 |
2013/03/14(木) 00:53:25.11ID:U60C2gX+
プリンターがオンラインかorオフラインか調べる方法を
あとに学ぶ人のためにカキコした方がいいと思う。

わしゃ知らん。
0503名無し~3.EXE
垢版 |
2013/03/14(木) 07:13:35.83ID:GZ3PCAcw
>>501
俺は簡単だと思うけど、君が簡単と感じるか否かは
君の能力次第だな

>>502
Google様に聞けばいつでもすぐ答えてくれる内容だから
わざわざここに書いておく必要は無いね

因みにネットワークに繋がってるか否かやIPアドレスなどを
調べる方法とやり方は一緒だ
0504名無し~3.EXE
垢版 |
2013/03/14(木) 19:14:07.25ID:kDbcE3ur
そういえばMS公式ドキュメントにWSHでCOM作る(not使う)方法を書いてあるセクションがあったな
0505名無し~3.EXE
垢版 |
2013/03/15(金) 00:32:47.07ID:5CYiOxYN
スクリプト コンポーネント(WSC)だろ
wshのヘルプにも載ってるぞ

確かにスクリプト コンポーネントはCOMだけど、今回のようにwshやVBSなどに無い機能を
COMで補うって用途には全く役に立たない

まあ外部ライブラリ的な物を作るにあたって、普通にvbsやjs作ってwsfのscriptタグのsrc要素で
インクルードするのに対して、いくつか利点も欠点もあるから、俺も適材適所で使ってるけど
別にそんな大層なものじゃないよ
0506名無し~3.EXE
垢版 |
2013/03/17(日) 10:57:39.04ID:ud5w/Y1w
若干スレ違い気味ですが、質問させてください。

http://ja.wikipedia.org/wiki/NT_File_System
>Win32サブシステムではファイル名の大文字小文字は区別されず、
>ファイル名の大文字小文字が異なるファイルを上書きした場合は、最後に使われたファイル名のファイルが保存される。
>POSIX・Interixサブシステムではファイル名の大文字小文字は区別され、
>ファイル名の大文字小文字が異なるファイルは上書きされず別のファイルとして保存される。

とのことですが、NTFSは同じフォルダに a.txt と A.txt や、フォルダa と フォルダA を共存出来るのでしょうか?
もし可能であるならば、上記ファイル・フォルダを作成可能なアプリを知りたいです。
また、WSHでNTFSの大文字小文字を区別する方法はありますでしょうか?

よろしくお願いします。
0507名無し~3.EXE
垢版 |
2013/03/17(日) 11:47:53.68ID:abXVSiyx
>>506
NTFS自体の機能では大文字小文字混在可能だが、通常のWindows用アプリを使っている限りそれを識別/操作できない、だからWSHでもできない
大文字小文字混在を操作可能なアプリはUNIX ベース アプリケーション用サブシステム配下で動作するUNIX互換アプリのみ
wikipediaに書いてある通り
0508名無し~3.EXE
垢版 |
2013/03/17(日) 19:30:43.42ID:ud5w/Y1w
>>507
ありがとうございます。
Subsystem for UNIX-based Applications で a.txt と A.txt を作り、
wsh.Exec("%windir%\posix /u /c /bin/cd $HOME; /bin/ls -a *.txt").StdOut.ReadAll()
的な感じで一応 a.txt と A.txt が取得できましたが、SUAインストールしてないと使えないので微妙ですね…
0510名無し~3.EXE
垢版 |
2013/04/18(木) 15:21:21.37ID:md9Cvmf3
そういう試み自体は理解できる
dos仕様のほうが異様
0511名無し~3.EXE
垢版 |
2013/04/18(木) 17:39:44.15ID:mpULZw/1
>>510今はそうだけど
DOSが最初にできた時代にはむしろ多数派の仕様だったような
途中で変更するタイミングはいくつもあったのにしなかったのが(ry
0512名無し~3.EXE
垢版 |
2013/04/18(木) 22:11:57.75ID:j4Qy4o0Q
そもそも大文字小文字があるほうが異様
0513名無し~3.EXE
垢版 |
2013/04/19(金) 20:20:18.38ID:eE+a4V23
ひらがな、かたかな、みたいなもんかな
0514名無し~3.EXE
垢版 |
2013/05/28(火) 22:37:08.99ID:5jK+KVue
Windows7にて入力文字をマスクする

CreateObject("ScriptPW.Password")

が使用できなくなってしまったのですが、
他に入力文字のマスクを実現できる手段はありますでしょうか?
0516名無し~3.EXE
垢版 |
2013/06/20(木) 11:43:38.31ID:wI6LNwCX
教えてください
set shell = WScript.CreateObject("WScript.Shell")
do until shell.AppActivate("hoge")
WScript.Sleep(100)
loop
このあと shell.SendKeys で hoge ウィンドウを操作したいのですが
AppActivate しているにも関わらず hoge ウィンドウが前面に来ないことがあってランダムに失敗してしまいます
この時タスクバーの hoge ウィンドウアイコンはオレンジに点滅しています
OS は Windows7 で、コンポーネントというのはよく分かりませんが .vbs をバッチファイルから実行しています
よろしくお願いします
0517名無し~3.EXE
垢版 |
2013/06/20(木) 11:45:40.80ID:wI6LNwCX
age
0518名無し~3.EXE
垢版 |
2013/06/21(金) 13:03:28.18ID:iHsgBUb6
>>516
これのXpと2003での現象と同じじゃね?
ttp://www.atmarkit.co.jp/fwin2k/tutor/cformwsh12/cformwsh12_02.html
0519名無し~3.EXE
垢版 |
2013/06/21(金) 16:14:55.34ID:X9D3VMgr
ちがう
ttp://support.microsoft.com/kb/886217/ja
0520名無し~3.EXE
垢版 |
2013/06/26(水) 19:19:50.57ID:SuSyk5yt
職場のパソコンでアドミ権限がなく、autoItxが入れられないので、
マウスのカーソル位置を設定する実行ファイルと、
マウスをクリックした座標位置をクリップボードに格納する実行ファイルと
左クリックを自動でおこなう実行プログラムを作って
jscript 内から呼び出してみたら、ちきんと動いた。

しばらくは、wshで遊べそう。

あわよくば、仕事の一部を自動化できればありがたい。
0521名無し~3.EXE
垢版 |
2013/06/27(木) 16:09:50.54ID:ES1eIR0c
>>516
Windows7で動いてたWSHが暫く同じ症状、AppActivate異常になっていた。
原因を調べても判らなかったが、今日のWindows7更新で正常動作に戻った。
きっと同じだと思う。
0523520
垢版 |
2013/07/10(水) NY:AN:NY.ANID:TYMFvckH
>522
そんなのがあるんやね。サンクス。

職場の情報課で、今度職場に新しいPCを入れるようだが
自動記録、自動実行するソフトも標準で導入してくれればいいなぁ。
サポートを必要とするソフトは極力導入したくないだろうが。

また、間違っても、wshを削除しないことを希望する。
0524名無し~3.EXE
垢版 |
2013/07/10(水) NY:AN:NY.ANID:hHP7uB6k
正しく使えれば便利なんだが、皆が皆、正しく使えるとは限らないからね
また、普段は正しく使える人も、100%バグのない完璧なコートを書ける訳じゃないし
場合によっては1つのバグで億単位の損失を出すこともあり得る

そういうこと考えると、ミスっても故意犯で無い限り全額の損害賠償を請求できない
自社員にはそういうものを使わせず、必要が有れば、バグが有れば損害賠償を請求できる外部に
そういったソフトやシステムを委託した方が良いという考えになる

wshなどを使える者としては、COMや自動化ツールなどの導入も自由開放して
存分に活用できればいいのになぁと思うところだろうが、最悪の事態などのリスクまで考えて
決定されている会社の方針には従うのが会社員の義務であり、社会人のマナーだ

まあ中小企業だと、リスクを考えてではなく、良く解らないけど危なそうだからと禁止してる場合もあるだろうけどね
0525名無し~3.EXE
垢版 |
2013/07/11(木) NY:AN:NY.ANID:jihHuc56
自動化は便利なんだけど、手作業では絶対しないようなバグを作りこんでて
それに気付くのが遅れたりすると悲惨だからなぁ…
0526名無し~3.EXE
垢版 |
2013/07/11(木) NY:AN:NY.ANID:WbRYJTo+
人事異動のとき、
各人の力量の差のあるレベルだと
残業時間が違ってくるレベル程度なら
作成したものを一切引き継がないって手段しか残されていないつうか
実際、そうした。

2chにも、無料サポートいい加減にしろ!みたいなスレが昔はあったが
今もあるのかなぁ?
0528名無し~3.EXE
垢版 |
2013/07/18(木) NY:AN:NY.ANID:xOivBrme
新しく作り替えるならまだしも・・・引き継ぎ拒否って単なる怠惰よな
0529名無し~3.EXE
垢版 |
2013/07/21(日) NY:AN:NY.ANID:Jrx+BFrY
手作業業務の自動化スクリプトだぞ?引き継がなくても、効率低下を除けば業務に支障は出ない
スクリプトの運用技術は業務範囲を逸脱してるだろうし、運用技術無しで使うのは只の自殺行為
精々使ってたスクリプトを資料として残しておいて、運用技術を持つ人間だけが引き継ぐ程度で良い。

手作業に戻した時に業務に支障が出るレベルの自動化だった場合は……
事情を説明して自動化を正式に(手製または外注で)実装させるか、後任を増員させるかあたりだろう。

どのみちスクリプトの"運用技術"を引き継ぐ必要はないと思うけどな。
0531名無し~3.EXE
垢版 |
2013/07/23(火) NY:AN:NY.ANID:kF+P0JKY
とりあえず、日本語は若干改善されたようだ
0532名無し~3.EXE
垢版 |
2013/07/24(水) NY:AN:NY.ANID:izHOTRoU
いや俺(529)は526じゃ無いぞ?
「業務効率が落ちるだけで支障がないなら自動化は引き継がなくても良い」
って所に賛同してるだけだ。
0535名無し~3.EXE
垢版 |
2013/10/10(木) 02:37:19.89ID:0aaCd3NF
>>533
659 : 名無し~3.EXE[sage] 投稿日:2005/05/12(木) 19:05:23 ID:xGQFP/QE [1/3回]

こんなレス引っ張ってくるならもっと有用な話題あるだろ・・・
いやこのセンスじゃ無理か
0536名無し~3.EXE
垢版 |
2013/10/20(日) 09:25:34.96ID:QZyrn1nr
作成日を変えたいときどうしてる?
0537名無し~3.EXE
垢版 |
2013/10/20(日) 15:26:01.69ID:wi+AEHpw
作成日を変えるコードを書いてる
まあ取得するだけみたいに簡単にはいかないけど
0539名無し~3.EXE
垢版 |
2013/10/28(月) 00:29:22.97ID:ROb/yb9H
JScriptでActiveXオブジェクトのプロパティ列挙って不可能ですかね?
forin使っても何も出てこないし
0540名無し~3.EXE
垢版 |
2013/10/28(月) 00:50:43.81ID:0xg2V9sv
>>539
無理だと思う
どうしても必要なら ActiveScriputRuby を経由したりすれば取り出すことはできる
0541名無し~3.EXE
垢版 |
2013/10/28(月) 01:09:12.84ID:ROb/yb9H
>>540
やっぱ無理っすか…orz
jsonも使えないんだよなぁ、あくちぶえっ糞
Rubyはホストアプリが対応してないので諦めます
0542名無し~3.EXE
垢版 |
2013/10/28(月) 01:26:04.42ID:kq0bJQu0
>>541
JSONはjson2.jsをちょい弄って埋め込めば普通に動くぞ。
0543名無し~3.EXE
垢版 |
2013/10/28(月) 01:33:05.76ID:ROb/yb9H
>>542
ActiveXオブジェクトをシリアライズできるなら、そのちょい弄ってを詳しくおながいします
0544名無し~3.EXE
垢版 |
2013/10/28(月) 01:48:41.62ID:kq0bJQu0
>>543
そういう意味か。すまんそっちはムリス
0545名無し~3.EXE
垢版 |
2013/11/10(日) 00:27:37.61ID:G8/WXFGb
WScript.echo(GetObject("winmgmts:root\\cimv2").execquery("select * from win32_process where name='svchost.exe'").count);
上だと正しく数字が表示されるのに、下だと表示されないのはどこがおかしいのですか
var func = function(){GetObject("winmgmts:root\\cimv2").execquery("select * from win32_process where name='svchost.exe'").count;}
WScript.echo(func());
0548名無し~3.EXE
垢版 |
2013/11/12(火) 00:07:05.72ID:wio6Fajt
コンソールの環境変数を書き換えたいのですがどうしたらいいのでしょうか?
環境はWinXP SP3です
あくまで現在の環境変数を書き換えたいのでSYSTEMやUSERは不可です

>type test.js
var ws, env;
ws = WScript.CreateObject("WScript.Shell");
env = ws.Environment('VOLATILE');

WScript.echo("1:" + env.Item("foo"));
env.Item("foo") = "ABC";
WScript.echo("2:" + env.Item("foo"));

>set foo
環境変数 foo が定義されていません

>cscript /nologo test.js
1:
2:ABC

>set foo
環境変数 foo が定義されていません

>cscript /nologo test.js
1:ABC
2:ABC

cscriptからfooは見えるのに、コンソールからfooは見えません・・・

よろしくお願いします
0549名無し~3.EXE
垢版 |
2013/11/12(火) 00:28:01.79ID:+gIKuuPP
>>548
環境変数はプロセスごとに保持されていて、継承は子プロセスへの一方通行です。
CScriptから環境変数を引き継いで新たにコマンドプロンプトを起動するか、
コマンドプロンプト側で環境変数を設定しなおす必要があります。

方法としては、
・ファイルに環境変数をファイルとして書き出して、親プロセス側からfor /Fやcallで読む
・標準出力に環境変数をテキストとして書き出して、親プロセス側からパイプで読む
等があります。書き出す形式はsetコマンドの形でも構いませんし、for /Fで読みやすい形式でも構いません。

あとはデバッガ的な方法で外側から環境変数を書き換える事も出来る気がしますが全くオススメできません。
0550548
垢版 |
2013/11/12(火) 00:48:54.08ID:wio6Fajt
即レスthx。あぁ・・・なるほど・・・

>type test.js
var ws, env;
ws = WScript.CreateObject("WScript.Shell");
env = ws.Environment('VOLATILE');

WScript.echo("1:" + env.Item("foo"));
env.Item("foo") = "ABC";
WScript.echo("2:" + env.Item("foo"));
ws.run("cmd.exe", 1, true);

>cscript /nologo test.js
1:
2:ABC

※新コンソール
>set foo
環境変数 foo が定義されていません

>cscript test.js
1:ABC
2:ABC

あれ?cscriptには引き継がれるけどコンソールに引き継がれません
どうなっているんだ・・・

美しくないけどバッチファイルに書き出して後で実行するしかないのか?(´・ω・`)
0551名無し~3.EXE
垢版 |
2013/11/12(火) 01:33:55.42ID:+gIKuuPP
Volatileがcmd.exeでは見えなくてプロセスツリー内のcscriptでは見えるってのはよく分らんけど、
この場合env = ws.Environment('PROCESS');でいいんじゃない?

パイプ例…ファイル作るよりはちょっとマシだが美しくはない。
@if(0)==(0) ECHO OFF
for /f "delims== tokens=1,*" %%j in ('CScript.exe //NoLogo //E:JScript "%~f0"') do set %%j=%%k
echo %foo%
pause
goto :EOF
@end
WScript.Echo('foo=ABC=ABC');
0552548
垢版 |
2013/11/17(日) 03:16:29.80ID:/2CP9OZ4
レス遅れてすみません
結局バッチファイル渡しとしました
実運用時(WinPEのシェルの初期化)の起動はcmd.exeからではないので
その場でパイプ渡しは難しいためです

試したこと
1.PROCESSに書き込んで新コンソールを起動する
 環境変数は期待通りに繁栄されるけどコンソールが常に2枚以上開くので見た目が
 美しくないし誤操作の元。WSHインタプリタがシェルになってしまうのも好ましくない
2.USERに書き込む
 普通のWinだとcmd.exeが開いたときに繁栄されるけど、WinPEでは繁栄されない。ボツ
3.バッチファイルを生成しcmd.exe /kで起動
 何故かオプションがcmd.exeに渡されない。ボツ
4.バッチファイルを生成しAutoRunで起動
 ひとまずこれで期待した結果が得られた。美しくないけど背に腹はかえられない

VOLATILEが期待した動作をしてくれればこんな事をする必要は無いんだけどなぁ・・・
0553名無し~3.EXE
垢版 |
2013/11/17(日) 03:38:40.35ID:JBZjIjNw
>>552
試して動かんのもアレだし動く実装が正義だから完全に蛇足だろうけど
> その場でパイプ渡しは難しいためです
WSHではなくパイプ処理を書いたbatファイルを起動して、そっちからWSHを起動すればよい気がするんだけど駄目なんだろうか?
> コンソールが常に2枚以上開く
起動した後はWSH終了してそっちのコンソール閉じれば……
他にも、cscriptじゃなくてwscriptで起動するって手もあるような。
> WSHインタプリタがシェルになってしまう
コンソールが2枚って事はコンソールは分離してるし親プロセスがWSHなだけでシェルはcmd.exeでは?

とか気になった。
0554548
垢版 |
2013/11/17(日) 19:54:04.19ID:TU2KoTQO
>>553
レスthx
>WSHではなくパイプ処理を書いたbatファイルを起動して、そっちからWSHを起動すればよい気がするんだけど駄目なんだろうか?
その後、追加でcmd.exeが起動する前の初期化をさせたくなりまして
スクリプトを分けると管理が面倒になるので>>552の4みたいな仕様になりました

>起動した後はWSH終了してそっちのコンソール閉じれば……
>他にも、cscriptじゃなくてwscriptで起動するって手もあるような。
>コンソールが2枚って事はコンソールは分離してるし親プロセスがWSHなだけでシェルはcmd.exeでは?
WinPEの場合、シェルに指定されたプロセスが終了するとWinPEがシャットダウンしてしまいます
例えばWSHインタプリタ→cmd.exeと起動してWSHインタプリタを終了するとcmd.exeが残っていても
OSがシャットダウンします
0555名無し~3.EXE
垢版 |
2013/11/17(日) 20:21:12.91ID:JBZjIjNw
>>554
>cmd.exeが起動する前の初期化
cmdからcmdを起動するって手が使えない初期化(?)ならしゃあないね。
>シェル
あー、GUI的な意味のシェルなのか。
0557名無し~3.EXE
垢版 |
2013/12/04(水) 19:16:08.90ID:b1a/MCuJ
JScriptでWMI周りをコーディングするのに参考になりそうなWebサイトとかってないですかね?
ググっても出てくるのはVBSばっかり
さらにDB系の経験が全く無い自分にはSQLっぽいクエリ文とか書かれても何をしているのか
全く理解できない・・・orz(そう言うコーディング例が多い)

WMIのクラス?リファレンスもMSのWebサイトのどこにあるのか判らないし・・・
0558名無し~3.EXE
垢版 |
2013/12/04(水) 21:04:29.54ID:lXQmNau7
>>557
Scriptomatic Version 2.0 by The Microsoft Scripting Guys
あとWindowsSDKの中にもサンプル転がってるっぽい。
SDK入れた後のC:\Program Files\Microsoft SDKs\Windows\v6.1\Samples\SysMgmt\WMI\Scripting\WSH\JScriptとか
0560名無し~3.EXE
垢版 |
2013/12/04(水) 22:13:17.72ID:MF/sD1Fn
>>557
わかる。自分も苦労したなあ。仕方ないからVBSのソース頑張って読んだわ…
0561557
垢版 |
2013/12/06(金) 07:18:40.26ID:4tTY+9MF
レスありがとう
英語はダメだけどがんばってみますorz
0562名無し~3.EXE
垢版 |
2013/12/09(月) 06:09:14.33ID:aRM1YEm8
VBSでバイナリ操作したくて調べてみたけど、このページの読み取り時のバグが面倒くさすぎる。
ttp://www.isla-plata.org/wiki/pukiwiki.php?ADODB.Stream%A4%CB%A4%E8%A4%EB%A5%D5%A5%A1%A5%A4%A5%EB%A4%CE%A5%D0%A5%A4%A5%CA%A5%EA%A5%A2%A5%AF%A5%BB%A5%B9%A1%CA%C4%B4%BA%BA%CA%D4%A1%CB
JSとVBSでバグってる出力の結果が違うからJSでやるしかないみたいだし。
0563名無し~3.EXE
垢版 |
2013/12/09(月) 21:46:10.26ID:LhO4dWSS
news.mynavi.jp/articles/2012/11/20/FD/images/001.jpg
こういう感じのインターフェイスって標準機能だけで作れますか?
一覧を表示してキーボードの十字キーとかで項目を選択
みたいなことをしたいです
外部アプリケーションが必要になったりIEでhtmlベースになったりですか?
0564名無し~3.EXE
垢版 |
2013/12/11(水) 00:49:34.13ID:dRS2pO1C
>>32
ログの再構築をやってもうまくいくかも知れない
(が俺のLOgsでは最早検証できないので誰か試して)
0566名無し~3.EXE
垢版 |
2013/12/12(木) 18:52:13.22ID:26eub4dC
>>563
> news.mynavi.jp/articles/2012/11/20/FD/images/001.jpg
> こういう感じのインターフェイスって標準機能だけで作れますか?

標準はDialog程度で、Yes/Noやメッセージ表示ぐらいしかない

> 一覧を表示してキーボードの十字キーとかで項目を選択
> みたいなことをしたいです
> 外部アプリケーションが必要になったりIEでhtmlベースになったりですか?
Yes
0567名無し~3.EXE
垢版 |
2013/12/13(金) 18:00:06.73ID:jlFFfkcN
>>566
どうもありがとう
wsh以外を検討したいと思います
0568名無し~3.EXE
垢版 |
2013/12/13(金) 21:16:37.60ID:o2iTZFGZ
PowerShellならカーソル移動できるからイケルと思うぜ
0569名無し~3.EXE
垢版 |
2013/12/25(水) 00:25:46.96ID:hFjMLCId
職場のPCがwindows7に更新されたが、
sendkeyにはさむ sleepを長めにしないとキー入力をとりこぼすようで
まんどくさ。
0570名無し~3.EXE
垢版 |
2013/12/30(月) 17:01:10.98ID:EDy0BQaD
最初からappactivate判定で待ち合わせろ
0571名無し~3.EXE
垢版 |
2014/01/10(金) 23:41:02.13ID:1HPG3rM3
http://okwave.jp/qa/q6809341.html の辺りでしょうか? ありがとさん。


職場のPCは、節電のためか10分経つと、コントロールパネル以外のソフトの機能で
画面が消えて、再び使うには再認証が必要でめんどくさいので、

8分間マウスを動かしていなかったら(マウスの位置読み出しはwsh以外だが)
sendkeys でHOMEキーを送出するようにしたら、再認証不要になって快適になった。
(副作用が全く無いわけではないけど、分かった上で使う分にはおk)
0572名無し~3.EXE
垢版 |
2014/01/11(土) 12:45:12.41ID:RKjZjfgC
>>571
マウスを擬似的に動かすのが一番副作用が少ないとは思うけど、
キー使うにしてもOEMキーとかShiftとかで副作用減らせると思う。
0573名無し~3.EXE
垢版 |
2014/01/11(土) 22:38:29.99ID:tut8jvn+
>マウスを擬似的に動かすのが一番副作用が少ないとは思うけど、

言われてみれば、そんな気もします。
wshの出番がなくなりますが、最終的にはその方向ですね。

別のsendkeys を使うwshスクリプトが
想定したタイミングでのsendkeys に失敗した場合に
現状、タスクマネージャーで強制終了してますが
HOMEキー送出と合わせて2つのWscript.exe のタスクが出現することになり
どちらを強制終了すべきなのが分からなくなるので

想定したタイミングでのsendkeys に失敗した場合には
そのwshスクリプトの実行を打ち切るかなんとかする方法を考えなければいけない
ということもあるので

10分以上席を外しておいても再認証不要にするほうは
wsh無しでいくようにするかなあ。
0574名無し~3.EXE
垢版 |
2014/01/12(日) 01:49:25.19ID:HjXkxgYs
wscript.timeout=10
とかで打ち切る
0575名無し~3.EXE
垢版 |
2014/01/12(日) 11:58:23.86ID:a5kPJ/gt
>>571
上手いことやったつもりになってるのかも知れないけど、それを会社の許可取らずに勝手にやってるとしたら
それは社会人として、大人として、最低の行為だよ。話通してるなら、そんな回りくどいことせずに
10分を30分とか60分にする方向で対応するだろうから、おそらく勝手にやってるんだと思うけどね。

うちも昔、ExcelとかのVBAが使えなかったんだけど、こっそりセキュリティーレベルを下げて
勝手にVBA使っちゃうという>>571みたいなことも出来たけど、俺はちゃんと筋を通し
VBA活用した業務システムのサンプルを作ってプレゼンし、正式にVBAの使用を許可されて使ってる。
VBAのことを解っていて意図的に禁止にしているのではなく、解ってないからデフォのマクロ無効にままに
しているだけだろうと思っても、組織の中では筋を通すのが大人のやり方だ。

自宅PCなら、電気代払うのも、セキュリティーが下がったツケを払うのも自分だが
職場ではそれを払わされるのは会社だからね。それで増える電気代なんて些細なものだし
外部の人間が出入りしないから、そこまでのセキュリティーも必要ないってなら
それを主張して改善を求めれば良いだけのこと。それをした上で断られたなら
きちんと理由があって断られたにせよ、相手の理解力が乏しいから解って貰えなかっただけにしろ
会社の方針には従うのが雇われ従業員の義務で、それが嫌なら転職か独立するしかない。



なんて正論言っても、2chでは正論に対して斜に構えて反発する方がカッコイイ的な風潮があるから
逆にこっちがウザいだの長文だのと難癖付けて叩かれたりしそうだけどねw
0576名無し~3.EXE
垢版 |
2014/01/12(日) 13:27:57.74ID:2iUJbU11
ウチの職場ではWSHどころかVBAですら「他の人がメンテする際に面倒な事になる」って理由で推奨されてない。
確かにその通りだが、以前どうしても業務にWSHやVBAに頼らざるをえない部分があって、上司を説得するのに苦労したよ。

同じ会社の別の部署では事前に上司に一報入れとけば即OKだったが、そこは仕方ない。
0577名無し~3.EXE
垢版 |
2014/01/12(日) 14:06:50.55ID:ydyFH/eR
>>575,576
正論ではある。が、管理が適当な会社で下の方だと、そう言う
IT関係の部署の許可を得る事自体が難しかったりする
当然現場のリソースの管理も出来ていないから万年人不足
上は「効率化、効率化」と吠えるが、効率化をするためのリソースは
まともに出ない。そうなると現場はずるをしないと業務が回らない
今の職場だけどね・・・そんなのを長く続けているとそのうち火傷しそう
なので辞めるつもりだけど

これは極端にしても、本社が求めるセキュリティ管理と現場の環境が
完全に一致している職場は今のところ見たことがないな
程度の差はあれ適当にお茶を濁さないと(現場の都合のいいように
解釈して運用する)業務の遂行に支障をきたす場合が多かった
大企業でも孫請けや客先作業だと綱渡りをしていたりするし
0578名無し~3.EXE
垢版 |
2014/01/13(月) 02:47:07.44ID:bjDcfip/
そもそもその機能は絶対節電のためじゃないから
もし席を外してる隙に誰かにかってに弄られたりしたら責任取れるの?ってことだし
0579名無し~3.EXE
垢版 |
2014/01/13(月) 03:23:42.22ID:sakkiDmA
>>578
本来必要なのは本当に離席した時にロックする機能と、手間なく再認証する機能だな。
0580名無し~3.EXE
垢版 |
2014/01/21(火) 17:35:56.87ID:wTIIfMdS
IE11にしたらIE.Busyの挙動がおかしくなったわ・・・
自分用だからいいけど仕事で使ってる人はたまらんだろうな
0583名無し~3.EXE
垢版 |
2014/01/29(水) 01:02:50.93ID:6l4VCNbt
580の言う「仕事で(IE.Busyを)使ってる人(で、IE11にした人)」だろう
0584名無し~3.EXE
垢版 |
2014/01/29(水) 18:25:21.89ID:fNYlkM6M
8.1搭載PC導入すれば自動的にIE11
0585名無し~3.EXE
垢版 |
2014/02/27(木) 00:56:57.07ID:Eji7pyZ2
objIE.navigateでオートメーションしてる。
IE9/10の脆弱性、MSがIE11なら安心できるぞとか言ってるけど、
上げたらやっぱスクリプトが壊滅するんだろうな。
0586名無し~3.EXE
垢版 |
2014/03/06(木) 17:45:30.32ID:ik8ivR1r
powershellが出てるというのに、いまさらバッチ⇒wsh書き換えを始めました
バッチでいうところの"%*"=「起動時の全パラメータを表示」をvbscriptでは簡単にかけないでしょうか?
ggったのですが…やっぱり、For eachとかで表示しなきゃだめですか?
0587名無し~3.EXE
垢版 |
2014/03/07(金) 02:12:37.60ID:D4aPQwt3
はじめまして WSHを利用したオーディオプレーヤーの表示変更で躓いています

https://dl.dropboxusercontent.com/u/10447545/%E7%84%A1%E9%A1%8C.png

現在「曲タイトル ・タイトルアーティスト名」 とあるのを赤文字の様に
曲時間の前に右詰で表示したいのですが方法がわかりません

W = w - lengthWidth - playCountWidth - ratingW;
var gic = groupItemCounter++;
var itemNr = (((gic) < 10) ? ("0" + (gic)) : (gic));
var title = $("$if(%tracknumber%,%tracknumber%," + itemNr + ".) %title%", metadb);
var titleArtist = $("[ \u25AA $if($greater($len(%album artist%),1),$if($greater($len(%track artist%),1),%track artist%))]", metadb);

if (titleArtist) {
var titleLength = gr.MeasureString(title, titleFont, 0, 0, 0, 0, StringFormat(0, 1, 3, 0x00000800 | 0x1000)).Width;
//var titleArtistLength = gr.MeasureString(track artist, titleArtistFont, 0, 0, 0, 0, StringFormat(0, 1, 3, 0x00000800 | 0x1000)).Width;
var titleArtistFont = gdi.font("Meiryo UI", 11, 0);
gr.DrawString(titleArtist + queue, titleArtistFont, titleArtistColor, x + 10 + titleLength, y, W - 10 - titleLength, h, StringFormat(0, 1, 3, 0x1000));
}
gr.DrawString(title + (titleArtist ? "" : queue), titleFont, titleColor, x + 10, y, W - 10, h, StringFormat(0, 1, 3, 0x1000));

の x + 10 + titleLength を変えればタイトルアーティスト名が移動するのがわかりました
x + 10 + titleLength を W に変更するとちょうどタイトルアーティスト名と曲時間がかぶって表示されますのでそこから
タイトルアーティスト名Lengthを引けば 結果右詰のようになるのかと思うのですがタイトルアーティスト名Lengthの取得法も分からずで行き詰っています

詳しい方アドバイスいただけないでしょうか? よろしくお願いいたします
0589名無し~3.EXE
垢版 |
2014/03/07(金) 07:20:42.99ID:QXUzZnL1
WSH/JScriptで画像?と思ったけど、foobarにWSH Panel Modってのがあるのか…
>>587
grとかgidとかのオブジェクトはWSH自体の機能じゃなくて、
そのオーディオプレイヤー及びプラグインの提供する機能。
周辺の使われ方とJScriptの知識から推測は出来るけど、
素直に環境も提示してから質問した方がいいよ、これは。
例えば、foo_uie_wsh_panel_mod-*/docs/Interfaces.htmlとかあったでしょ?

まぁ取り敢えずはgr.DrawString(titleArtist〜);のところをこうする
var titleArtistLength=gr.MeasureString(titleArtist+queue,titleArtistFont,0,0,0,0,StringFormat(0,1,3,0x00000800|0x1000)).Width;
gr.DrawString(titleArtist+queue,titleArtistFont,titleArtistColor,x+W-titleArtistLength,y,titleArtistLength,h,StringFormat(0,1,3,0x1000));
ただこれだと横幅足りない時に多分文字が被る(未確認)のでこれの二行目をこうする
gr.DrawString(titleArtist+queue,titleArtistFont,titleArtistColor,
(W-titleArtistLength-10-titleLength<0)?(x+10+titleLength):(x+W-titleArtistLength),y,
(W-titleArtistLength-10-titleLength<0)?(W-10-titleLength):(titleArtistLength),h,StringFormat(0,1,3,0x1000));
タイトルの時点で横幅足りない時は元の通り(多分はみ出す)のはず…だけど未確認なんで動くかは知らん
0590名無し~3.EXE
垢版 |
2014/03/07(金) 10:12:05.60ID:D4aPQwt3
>>589
早速のレスありがとうございます 眠ってしまっていましたすみません
おっしゃる通りfoobarを弄っておりました

これから仕事に出ますので戻り次第、動作報告させていただきます
詳しい内容のれすありがとうございます 
取り急ぎのお礼となりますが多くのアドバイスに感謝いたします  m(_ _)m
0591名無し~3.EXE
垢版 |
2014/03/07(金) 18:57:18.18ID:D4aPQwt3
>>589

こんばんは、教えていただいた様に記述すると見事、希望の表示となりました。
感謝感激であります 素晴らしいです

http://uploda.cc/img/img531996d70acb8.png

この様にプログラミング言語を理解されている方を本当に尊敬いたします
私も少しで理解できるよう勉強していきたいと思います

大変勉強になりました お世話になりました ありがとうございます m(_ _)m
0592名無し~3.EXE
垢版 |
2014/03/07(金) 19:50:09.28ID:ACaqx7cc
オプションを指定したショートカットファイルへ適当なファイルをドラッグアンドドロップしたときに
named と unnamed プロパティが表示されません。

下のスクリプトを WSF にして、それのショートカットをつくって"リンク先"にオプションを追加しました。
ショートカットを実行すると named が表示されて期待通りなのですが、
ショーカットにファイルをドラッグアンドドロップすると unnamed しか表示されません。
コマンドプロンプトで「このショートカットファイル 適当なファイル」を実行すると
期待通りに named と unnamed が表示されます。
ショートカットファイルを「cscript //nologo file.wsf /aaa」にして、
それにファイルをドラッグアンドドロップすると期待通りに動きます。(wscriptも同様です)
スクリプトへのショートカットで動かしたいのですがどうにかならないでしょうか。
やはり cscript から指定するしかないのでしょうか。
<?XML version="1.0" standalone="yes" encoding="Shift_JIS" ?>
<job>
<script language="VBScript"><![CDATA[
Set Args=WScript.Arguments
if args.named.count>0 then
for each f in args.named
Wscript.Echo "named="&f
next
end if

if args.unnamed.count>0 then
for each f in args.unnamed
Wscript.Echo "unnamed="&f
next
end if
]]></script>
</job>
0593名無し~3.EXE
垢版 |
2014/03/07(金) 20:29:44.76ID:ACaqx7cc
>>592です。
よくよく考えたら、後処理で標準出力を使うのでコマンドプロンプトから起動させないといけないことに気付きました。
ですのでこの質問は無視してください。申し訳ございません。
0594名無し~3.EXE
垢版 |
2014/03/07(金) 20:43:11.69ID:R/i8eMRA
JScriptで実行しているコンソール画面の消去やカーソルの移動を行う方法が
あったら教えてください。ANSIエスケープシーケンスが使えないので代替手段を
探しています。tailもどきみたいなツールを作りたいです
0596586
垢版 |
2014/03/09(日) 20:57:07.19ID:fvfMSQ5P
>>595
低レベルな相談にアドバイスをありがとうございます
joinを以下のように使ってみたのですが、エラーになってしまいました

set objArgs = Wscript.Arguments
Wscript.Echo Join(objArgs, " ")

実行
>cscript test.vbs aaa bbb ccc ddd
test.vbs(2, 1) Microsoft VBScript 実行時エラー: 引数の数が
一致していません。または不正なプロパティを指定しています。

Join関数の中のobjArgsをobjArgs.Itemにしても同じエラーでした
オブジェクト型?だとダメなんですかね

しかしよく考えたら、どうせパラメータ解析を行うときにFor Eachするので
そこでついでにつなぎ合わせて表示すれば良いことが判りました。ハズカシイ///
失礼しました
0597名無し~3.EXE
垢版 |
2014/03/10(月) 01:34:08.42ID:odCUQACu
wsh はハードウェアを直接たたけないので高レベルだが、何か?
0598名無し~3.EXE
垢版 |
2014/03/18(火) 01:58:31.54ID:8JSsnlcw
Win7です

特定のフォルダ1つの中に、沢山のサブフォルダが100個単位であります
そことは違う場所に複数のファイルがあり、こいつらをさっきのサブフォルダにコピーや移動して整理したい

選択された個々のファイル名から、どのサブフォルダにコピー・移動すべきかはほぼ自動で決まります
ただ、沢山のサブフォルダ群から目的のサブフォルダを探し出すのが面倒なので、それを自動化したい
しかし、Win7のエクスプローラの操作感(上書き確認や別名でコピーなどの選択肢がサムネイルと日時付きで選べる)は
そのまま生かしたい

こういう場合にWSHは使えるでしょうか?
FileSystemObject の CopyFile を使うとデフォルトで上書きされてしまうようで、不都合です
他のオブジェクトのメソッドで、エクスプローラのあのダイアログを使えるようなものはないでしょうか?
0599名無し~3.EXE
垢版 |
2014/03/18(火) 07:01:19.59ID:7hnQmGRM
これででるんだっけ?
ttp://msdn.microsoft.com/en-us/library/windows/desktop/bb787866(v=vs.85).aspx
ttp://www.happy2-island.com/vbs/cafe02/capter00304.shtml
ttp://d.hatena.ne.jp/miya2000/20061211/1165806376
0600名無し~3.EXE
垢版 |
2014/03/18(火) 17:59:54.71ID:0kW9Tn2n
>>599
おお!ありがとうございます!
さっそく試してみます
0601名無し~3.EXE
垢版 |
2014/03/18(火) 20:34:54.00ID:0kW9Tn2n
>>599
フォルダまるごと、あるいは1個のファイルのコピーならば CopyHere が使えました
ありがとうございました

ただ、たとえばSendToにvbsファイルを登録して複数個のファイルのコピーをしようとすると
CopyHereの引数に複数ファイルを指定するやり方がググってみてもよく分からないため、
ループを回して1個ずつ個別にコピーしなければならず、
エクスプローラの「同じ処理を○個の競合に適用」が使えません

CopyHere に複数のファイルを渡すにはどうしたらよいのでしょうか?
0602名無し~3.EXE
垢版 |
2014/03/18(火) 21:49:20.42ID:0kW9Tn2n
エクスプローラの「同じ処理を○個の競合に適用」が使えなくても
とりあえず使えればいいかな、と(テスト環境でなく)実際の環境で実践してみた結果・・・

「実行できません。引数一覧が長すぎます。」

Oh・・・こんな仕様があったとは・・・orz
0603名無し~3.EXE
垢版 |
2014/03/19(水) 11:17:44.83ID:sxeZPubB
事後報告
「送る」で多くのファイルをWSHに受け取るのは仕様上無理?っぽいので
結局WSHは諦めて、C#を使って↓のを参考に
クリップボードでファイルの受け渡し、コピー・移動は SHFileOperation を呼び出すことにしました・・・

ttp://uchukamen.com/Programming1/ToRecycleBin/
ttp://dobon.net/vb/dotnet/file/copyfiletoclipboard.html
0604名無し~3.EXE
垢版 |
2014/03/19(水) 20:36:52.43ID:WSz9wMSM
プログラム初心者です。
しょうもない質問で申し訳ないのですが、ご教授願います。
定時にアラートを鳴らす下記のスクリプト、二回目のポップアップ以降
タスクバーに隠れてしまいます。
OKが押されるまでポップアップを出し続けるにはどうすればよいでしょうか?
OSはWindows7です。
よろしくお願いします。

strSoundFile="C:\Windows\Media\alert.wav"
Set objShell = CreateObject("Wscript.Shell")
Do While True
objShell.Run strSoundFile,0,True
If objShell.Popup("早く!", 3, "時間だよ", vbOKOnly) = 1 Then Exit Do
Loop
0605名無し~3.EXE
垢版 |
2014/03/19(水) 20:45:51.46ID:fmho9aI2
逆に考えるんだ
.popupって時間制限で消えるようにできるだろ?
戻り値が0にならない限り何度でも現れ直すようにすればいいだろ
0606名無し~3.EXE
垢版 |
2014/03/19(水) 20:47:03.25ID:fmho9aI2
ってすまん
そういう風にしてるのか
だとすればサウンドを鳴らすだけのスクリプトを別に作っていちいち起動するようにするとかか?
0607名無し~3.EXE
垢版 |
2014/03/19(水) 20:53:07.89ID:WSz9wMSM
>>606
ありがとうございます。
それしか方法はないのでしょうか・・・
XPでは全く同じスクリプトで繰り返しポップアップが出てたのに、7に移植すると
2回目以降が隠れてしまって困り果ててます。。
0608名無し~3.EXE
垢版 |
2014/03/22(土) 23:52:20.61ID:Z7dMfY4M
If objShell.Popup("早く!", 3, "時間だよ", vbOKOnly+4096) = 1 Then Exit Do
0609604
垢版 |
2014/03/23(日) 03:13:39.34ID:Vw+/thwy
>>608
ありがとうございます!
うまくいきました!
こちらに質問してよかったです。
お手数おかけしました。
0610名無し~3.EXE
垢版 |
2014/03/23(日) 18:28:06.03ID:IwD5u7Na
>>608
PopupってMB_SYSTEMMODAL(4096)とかのメッセージボックス用フラグも効くのか!
てことは
MB_DEFBUTTON1(0)、MB_DEFBUTTON2(256)、
MB_DEFBUTTON3(512)、MB_DEFBUTTON4(768)、
MB_SYSTEMMODAL(4096)、MB_SETFOREGROUND(65536)、MB_TOPMOST(262144)、
MB_RIGHT(524288)、MB_RTLREADING(1048576)
このへんも使えるんだな。知らんかった
0611名無し~3.EXE
垢版 |
2014/03/23(日) 20:31:45.36ID:maZS4sl1
>>610
MessageBox関数のパラメータは大体使えるよ
4 + 32 + 256とかでもちゃんと機能する
0612名無し~3.EXE
垢版 |
2014/03/23(日) 20:59:53.06ID:IwD5u7Na
>>611
64以下のはMSDNとかにも記載があるけど他は…と思ったら
> natType の意味は、Microsoft Win32R アプリケーション プログラミング インターフェイスの MessageBox 関数で指定するものと同じです。
ちゃんとscript56.chmにも記載があったのね…見落としてたわ
0613名無し~3.EXE
垢版 |
2014/03/27(木) 04:31:30.42ID:2jCw5Ktt
ScriptFormをダウンロードできるサイト知りませんか?
誰かアプロダにでも上げてもらえないでしょうか
0614名無し~3.EXE
垢版 |
2014/03/28(金) 01:33:53.75ID:61c3+d+I
ググってもなんとか見つかるぞ
使い方:ttp://homepage2.nifty.com/pasocon/tanken/form.html
同梱してる事の確認:ttp://park15.wakwak.com/~ironrose/personalize.html
同梱してる物の入手:ttp://park15.wakwak.com/~ironrose/details.html
0615名無し~3.EXE
垢版 |
2014/03/28(金) 02:15:59.95ID:omqPRtXY
>>614
助かったありがとう
同梱は盲点だった
0616名無し~3.EXE
垢版 |
2014/03/31(月) 23:24:43.55ID:cttL3XFr
IE11でbusyとReadyStateがサポートされなくなったらしいですけどうすればいいですか?
よく使われてる以下のようなWaitLoad関数が駄目になって困ってます
環境はWin8.1、IE11です
0617名無し~3.EXE
垢版 |
2014/03/31(月) 23:25:59.99ID:cttL3XFr
//グーグルとこのスレ繰り返し開くだけのJSスクリプトです。
//1回目のループは上手く行くのに2回目のグーグルを開いた時に止まってしまいます。
var IE = WScript.CreateObject("InternetExplorer.Application");
IE.Visible = true;
for(;;){//終了処理なしです
IE.Navigate("https://www.google.co.jp/";);
WaitLoad();//2回目のここで止まる
IE.Navigate("http://toro.2ch.net/test/read.cgi/win/1292764835/";);
WaitLoad();
}

function WaitLoad() {
var stat, dstart;
stat = 0;
while(true)
if(stat == 0) {
if(!IE.Busy)
if(IE.Document.readyState == "complete") {
dstart = (new Date()).getTime();
stat = 1;
}
}
else {
if(!IE.Busy &&
IE.Document.readyState == "complete") {
if((new Date()).getTime() >= dstart + 1000)//止まった時にブラウザを落とすとこの行でエラーになってる
break;
}
else
stat = 0;
}
}
0619名無し~3.EXE
垢版 |
2014/04/01(火) 15:22:55.15ID:KGWb56X2
下のはWin8.1、IE11の32/64bit両方で動いたよ
var IE = WScript.CreateObject('InternetExplorer.Application');
IE.Visible = true;
for (;;) {
IE.Navigate('https://www.google.co.jp/');
wait(IE);
IE.Navigate('http://toro.2ch.net/test/read.cgi/win/1292764835/');
wait(IE);
}

function wait(IE) {
WScript.Sleep(100);
while (IE.busy) WScript.Sleep(100);
while (IE.document.readyState !== 'complete') WScript.Sleep(100);
}
0620名無し~3.EXE
垢版 |
2014/04/01(火) 20:20:02.45ID:yNr0R4Jw
>>619
ありがとうございます。動きました。使わせてもらいます。
ただWScript.Sleep(100);の部分が短すぎるので
1000にしたところ上記と同じように止まってしまうのが不可解です
あと記載を忘れてましたがOSとIE11はインストールしたばかりで設定をいじってません

IE11でbusyとReadyStateがサポートされてない件は他の方も困ってるみたいです
http://www.moug.net/faq/viewtopic.php?t=67866
http://www.moug.net/faq/viewtopic.php?t=67282
http://d.hatena.ne.jp/O_Kohsuke/20131103/1383476948
0621名無し~3.EXE
垢版 |
2014/04/01(火) 21:10:26.71ID:yNr0R4Jw
もう一つ、上記サイトに言及のある拡張保護モードか、保護モードを無効にしても同じ所で止まります
0622名無し~3.EXE
垢版 |
2014/04/01(火) 21:35:14.14ID:2YVuc9Gt
>>620
>IE11でbusyとReadyStateがサポートされてない件は他の方も困ってるみたいです

だって誰得?だもん
0623名無し~3.EXE
垢版 |
2014/04/02(水) 03:59:22.30ID:PW6w/sWY
使ってる奴が居る以上誰得って言い方で切り捨ては出来ねぇと思うけどなぁ…
0624名無し~3.EXE
垢版 |
2014/04/08(火) 23:52:31.58ID:D4TzPxaZ
windows7に移行したら、XPで動いてたvbsがうまく動かない
具体的には
・msgboxが最前に出てこなくなった
・Appactivateの効きが悪い気がする

なんか対策ありませんでしょうか
0625名無し~3.EXE
垢版 |
2014/04/09(水) 02:06:18.35ID:IEtgoGKr
>>624
前者については>>604>>608>>610を参照すればいいと思う
後者は・・・泥臭すぎて微妙な対策だが、スリープ挟むとか、
スリープ挟んで複数回アクティブ化するとかで軽減できないか?
0626名無し~3.EXE
垢版 |
2014/04/09(水) 21:42:25.69ID:MDutfYCP
ありがとうございます。なんかいろいろできるんですね
もう少し研究してみます

win7もIE9もキライ
0628名無し~3.EXE
垢版 |
2014/04/11(金) 06:18:12.18ID:iUTXG8Bc
まぁwsh窓際だからね・・・
0629名無し~3.EXE
垢版 |
2014/04/19(土) 10:17:00.95ID:oDZvbVi3
wsh/jscript/win7SP1-64bit
で、普通の機動、または休止状態からの機動、またはスリープからの機動を判別するサンプルプログラムはありますか?

やりたいことは、PCの上記の機動時に、ブルーデーディスクの残りHDD容量の推定値を表示できればいいかなぁと。
各曜日のディスク使用推定量は自分で入力するとして。
0630名無し~3.EXE
垢版 |
2014/04/19(土) 16:12:52.50ID:qTxSEapj
ブルーデーでググってみてごらん
0631名無し~3.EXE
垢版 |
2014/04/19(土) 16:29:55.53ID:C0hSChOr
普通の機動、または休止状態からの機動、またはスリープからの機動
にクスっときた
0632名無し~3.EXE
垢版 |
2014/04/19(土) 17:12:47.57ID:D/gd45tC
WSH全然関係ないけどタスクスケジューラで
USBデバイスからの復帰をトリガーとして起動するタスクなんてものもあるけどな
0633名無し~3.EXE
垢版 |
2014/04/28(月) 10:40:52.56ID:DICVXVj1
DOSバッチまたはWSHでメインフレームのSYSINデータセットみたいなことできませんか?
SYSINにVBScriptのソースを書いて、cscriptでそれを実行するとか、
SYSINにFTPのコマンドを書いて、FTP.exeに読ませるとか、
SYSINに適当な入力データを書いて、SYSINをtextファイルとして読み込むようなことをしたい。
SYSIN部分を別ファイルにすれば可能ですが、1個のファイルにしたくて。

ファイルのイメージ
---------- test.bat or test.vbs -------------

//SYSIN DD *
適当な入力データ
//

DOS/VBScriptのコマンドを書いてSYSINをtextファイルとして読み込む
---------- test.bat or test.vbs -------------
0634名無し~3.EXE
垢版 |
2014/04/28(月) 13:00:04.87ID:ev/jr+Zm
>633
WSHなら WScript.StdIn を使えばいいと思う
0635名無し~3.EXE
垢版 |
2014/04/29(火) 03:39:47.60ID:8ypvRdMf
>>633
意識しないでデータを読みこむのは無理だと思うので、データ部分はコメント扱いされて実行されないようにしといて、
データを読み込むプロシージャを作成すれば良いんじゃないかな

【例】 batの場合はデータ部分を読み飛ばして、for文でデータを読み込む
@goto :proc
//SYSIN DD *
適当な入力データ
//
:proc
@echo off
for /f "skip=2 tokens=*" %%i in (%~f0) do (
set data=%%i
if "%%i" equ "//" goto :eof
call :output
)
goto :eof
:output
echo %data%
goto :eof

【例2】 jscriptの場合
if (0)
//SYSIN DD *
適当な入力データ
//
@end
処理スクリプト

【例3】 vbscriptの場合
jscriptの@if、@endの替わりにif false then、end ifを使う
0636名無し~3.EXE
垢版 |
2014/04/29(火) 13:38:55.32ID:rabqrtPg
>>633
何が欲しいのか今ひとつ分からんのだけど、
複数行に渡るような大きな文字列データを埋め込んどきたいってこと?
それならWSFでresource使う方法なんかもあるけど
0637名無し~3.EXE
垢版 |
2014/04/29(火) 21:41:23.74ID:+pl4bZp4
>>634-636
Thanksです。
バッチとかスクリプトのファイルの中に、入力データを書きたかったのです。
数文字程度なら、バッチの環境変数で渡すて出来そうですが、
複数行の文章だとどうしても出来なくて。
昔仕事でやってたM/FのJCL文はそういうことができててよかったなあと。

resourceが一番自分の思ってるに近そうです。
0638名無し~3.EXE
垢版 |
2014/04/29(火) 23:22:16.38ID:gKZrgnV9
JScriptだと(function(){/*〜〜〜〜*/}).toString();で楽にヒアドキュメントモドキができるんだけどね。
0641名無し~3.EXE
垢版 |
2014/05/24(土) 10:06:34.87ID:4leeigTu
WSHで画面のバックライトを消す方法ってありますか?

その手のツールやWin32APIを叩ける処理系使えば
できるのですがWin標準機能で出来る方法があれば・・・
0642名無し~3.EXE
垢版 |
2014/05/24(土) 10:23:35.39ID:uPytOxyo
>641
↓この1行でWindows標準のブランクスクリーンセーバーを起動できるけど、これじゃダメかな?
CreateObject("WScript.Shell").Run "C:\Windows\System32\scrnsave.scr"
0643名無し~3.EXE
垢版 |
2014/05/29(木) 07:27:28.06ID:8DqbD5RS
スクリーンセイバーでは、画面は暗く出来てもバックライトは消えないでしょ

つまり、消費電力低下もバックライト寿命延長も望めない
「画面を暗く」とかではなく、わざわざ「バックライトを」と言ってるって事は、そういうのが目的だと思われ
0644名無し~3.EXE
垢版 |
2014/05/29(木) 20:15:23.71ID:mpz900sV
ついでに細かいことを言うと、液晶モニタでは黒画面にすると
消費電力が増える場合がある。

ttp://www.itmedia.co.jp/pcuser/articles/1105/25/news001.html
ttp://www.excite.co.jp/News/bit/E1238429157129.html
0645名無し~3.EXE
垢版 |
2014/07/03(木) 14:13:08.65ID:puDVYchs
wsh cscript ってみんな使っているの?

どうもとっつきにくい
原因の一つは、予約語の長ったらしさと別ワールド感にあるような気がする。
バッチでだめならrubyでやってしまうもんな
0646名無し~3.EXE
垢版 |
2014/07/03(木) 15:15:13.58ID:jNTLinbp
WSHは事実上のWindows標準機能になって十数年経つし、
昔のWin95やWinNT4.0でも修正せず正常に実行できるものを手軽に作れる。
(それに対してバッチファイルはWin9x系とWinNT系での違いが特に大きいから、環境変数%OS%の値が
"NT"か空欄かで処理を分岐させなければならない場合が少なくない)

そういう点で他のスクリプト言語より随分とっつきやすいと思うが
0647名無し~3.EXE
垢版 |
2014/07/04(金) 21:25:06.89ID:noH+Nmwl
どのWinでも動くメリットは大きい。会社のPCでも気軽に使えるし
でもバイナリファイルの扱いに難があるのはしばしば困る

あとこれはWSHに限ったことではないけどRubyと比べるとコードが
冗長化しやすい
0648名無し~3.EXE
垢版 |
2014/07/04(金) 21:43:53.99ID:t8oKZxzN
バイナリファイルだって扱えないってわけじゃないし、それほど面倒lくさいってほどでもないと思う
0649名無し~3.EXE
垢版 |
2014/07/04(金) 22:00:52.84ID:noH+Nmwl
ADODB.Streamはアンチウィルスソフトが騒ぐから使いにくい
0650名無し~3.EXE
垢版 |
2014/07/05(土) 04:26:07.22ID:X4/wk4Kp
それは環境依存の問題だろw
環境依存の問題を、WSHの問題であるかのように言う奴はアフォ

全てのアンチウィルスソフトがADODB.Streamに反応するわけじゃないし
後から反応しないように設定できる場合も多いので
言ってしまえば「どのWinでも起きる問題じゃない」って話だ
0651名無し~3.EXE
垢版 |
2014/07/05(土) 11:16:49.33ID:WBZ3i3eR
AviraがADODB.Streamの実行を阻止するらしいが、他にもある?
0652名無し~3.EXE
垢版 |
2014/07/05(土) 16:43:05.03ID:DkwampXl
自分にはアンチウィルスソフトに駆除される可能性があると判っているものを
配布することは出来ない。バイナリファイルを扱うコードに限ればどのWinでも
動くというメリットは存在しない
0653名無し~3.EXE
垢版 |
2014/07/05(土) 19:00:31.79ID:gjWeDij8
WSH以外でインストール不要、テキスト配布可能、バイナリ操作可能、x86/x64環境対応、を満たすのは
.NET Frameworkに含まれるC#やJScript.NETコンパイラ使うバッチファイル位しか実用的な選択肢がない。

ADODB.Streamの利用だけでウィルス扱いするクソアンチウィルスなんて所詮その程度のゴミ。
ADODB.Streamを難読化してアンチウィルスの検出回避してるコードとか見たことあるけど、
適当に回避仕込んで後は「アンチウィルスに排除されたらそのゴミを恨め」とでも言っとけばいい。
バイナリ配布使用が何しようが、どーせ巻き込まれるときは巻き込まれて機能不全起こすんだし。

一々ソース生成してコンパイルしたりインタプリタのインストールを要求するよりはWSH使ったほうが楽。
//つか配布して使わせるって前提ではRubyはnode.jsにすら劣る気が…
0654名無し~3.EXE
垢版 |
2014/07/05(土) 19:08:48.87ID:WBZ3i3eR
ウィルス対策ソフトでは大抵除外指定できるもんなんだがAviraはそういう機能ないのか?
もしあるならreadmeで除外指定の説明しとけば十分なんだけどね
0655名無し~3.EXE
垢版 |
2014/07/06(日) 04:11:44.89ID:wAzKXrbd
Rubyコードを配布するならインタプリタを同梱すれば良いだけでは
インタプリタをインストールする必要はない。exerbみたいにPEに
パックするツールもあることだし。難点を挙げるとすればでかいこと
くらいか。PythonやJavaなんかでも似たような手法があるな

WSHは社内利用でアプリの持ち込みが難しいく、誤爆しないことが
確認できている場合なんかには使うな
0656名無し~3.EXE
垢版 |
2014/07/06(日) 05:38:19.38ID:EYy1DF2z
インタプリタの同梱はライセンス的に面倒くさいが、
Rubyとか単体インタプリタが公式から落とせないんだよなぁ…
node.jsでさえ公式が配布してるnode.exeがあれば最低限は動くってのに。
PE化ツールはスクリプト言語としての利点が大きく減るので論外かな。

主観も入ってるがWindowsでツール作って配布したりするのにRubyは向いてなさすぎ。
つかなんでRuby押しな人がWSHスレに来てんだよ…スレチだろそんなん。
0657名無し~3.EXE
垢版 |
2014/07/09(水) 16:44:30.12ID:3YYdz9Xv
AviraでADODB.Streamの実験をしてみた

結論として
var strm = new ActiveXObject("ADODB.Stream");
var adTypeBinary = 1;
var adSaveCreateOverWrite = 2;
この3行が全部存在したら弾かれる
実際に使うかどうかは関係なく、ADODB.Stream、adTypeBinary、adSaveCreateOverWriteの文字列が存在してたらアウト
(adTypeText、adSaveCreateNotExistは問題ない)
このうちどれか1つでも無くせば通る
strm.Type = 1;
と書けば通るなんて意味ない
こんなん何のプロテクトにもなってなくてちゃんと書こうとしている正常なスクリプトだけが被害を被るだけじゃん

あと、scanの除外の指定は簡単にできるのでそっちでファイルやフォルダを指定しとく手もある
0658名無し~3.EXE
垢版 |
2014/07/09(水) 17:01:01.40ID:5yPR9jH6
strm[unescape(〜〜)]()でも通るのだろうし(専ブラ用のGetLog.wsfとかがコレ)、evalに詰めても多分通るだろうからな…
誤検出上等で作られた既存マルウェアとマッチするパターン定義なのだとしてもゴミすぎる。

まぁアンチウィルスが一般人を害するのなんて珍しい話じゃないけどな。
ノートンがリファラ削ってCSRF攻撃がより発生しやすくなった件もそうだけど、
アンチウィルスに対するフールプルーフも考慮しないと駄目になってしまったと……
0661名無し~3.EXE
垢版 |
2014/10/28(火) 21:45:29.92ID:9qJ4E2Eu
ExcelVBAスレからこちらに誘導されました。

Sub test()
Dim WSH, cmd, path, output As String
Set WSH = CreateObject("WScript.Shell")
path = """C:\Program Files\7-Zip\7z.exe"""
output = """C:\Program Files\7-Zip\output.txt"""

cmd = path & " > " & output
WSH.Run "%ComSpec% /c " & cmd
End Sub

プログラムをshell.runで実行して、結果をプログラムと同じ場所にをテキスト出力したいんですが
上記のプログラムですと、テキストすら作成されずエラーも出ません。
試しにcmdの中をコマンドプロンプトで実行すると上手くテキスト出力できました。
環境変数の中も問題ない事確認しました。
一体何が原因でどうすれば意図通りに出力できるでしょうか?
0663名無し~3.EXE
垢版 |
2014/10/28(火) 23:40:34.81ID:9qJ4E2Eu
execは出力が長いと切れてしまうのと
チカチカするのでなるべくRunで動作させたいです・・・。
0664名無し~3.EXE
垢版 |
2014/10/29(水) 01:13:30.66ID:Ixj57Vcb
まさかとは思うけど、定義だけでtestをcallしてないってオチじゃないだろうな
0665名無し~3.EXE
垢版 |
2014/10/29(水) 21:40:17.17ID:ZMfncWTQ
Sub test()
Dim WSH, exec, cmd, path, output, Result, Errorcatch As String
Set WSH = CreateObject("WScript.Shell")
path = """C:\Program Files\7-Zip\7z.exe"""
output = """C:\Program Files\7-Zip\output.txt"""

cmd = path & " > " & output
Set exec = WSH.exec("%ComSpec% /c " & cmd)
Do While exec.Status = 0
DoEvents
Loop
Result = exec.StdOut.ReadAll
Errorcatch = exec.StdErr.ReadAll

End Sub

試しにexecに書き換えてこれでエラーメッセージを拾うと
"'C:\Program' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。"
ある筈の引用符が認識されなくなってるようだけど
wshって引用符を2つ以上受け入れられない仕様なんでしょうかね?
何にしろexecを使って出力しか無いようですね。
0666名無し~3.EXE
垢版 |
2014/10/30(木) 00:21:27.89ID:LmFdMFLe
runで””が展開されて、cmd.exeが””無し文字列渡されてるだけ
VBS以前の問題すな
----
path = """""C:\Program Files\7-Zip\7z.exe"""
output = """C:\Users\hoge\Desktop\output.txt"""""
0667名無し~3.EXE
垢版 |
2014/11/26(水) 01:10:25.43ID:Rp1N9SF8
WSH(JScript)からUACの権限の昇格無しにvhdファイルを任意のドライブレターでマウント、アンマウントする方法ってあります?
diskpartを使うと起動時にUACの権限昇格のプロンプトが出てしまうので出来ればそれを避けたいです
さらにdiskpartだと任意のドライブレターにするのもちょっとめんどくさい・・・

マイコンピュータの管理からマウントするときは権限昇格のプロンプトが出ないのでマウント操作自体は権限昇格無しにできるはず・・・
0668名無し~3.EXE
垢版 |
2014/11/26(水) 03:52:31.59ID:n9fh4HuN
>>667
WSH的な方法もあるとは思うけど、面倒くさいからWScript.ShellのSendKeysで。
0669名無し~3.EXE
垢版 |
2014/11/27(木) 00:44:59.90ID:jN417OkL
自身をrunasで実行するコードを書いてネットワークドライブにコピーして実行したら
WScript.exe「ファイルが見つかりません」
管理者で実行するとネットワークドライブにあるスクリプトを実行できないっぽい。なんつートラップ・・・orz
でもUNCパスなら実行できるっぽい。変換するのマンドクセ・・・
0670名無し~3.EXE
垢版 |
2014/11/27(木) 18:51:51.05ID:n1bzZURg
>>669
ユーザが違うからファイル共有のログイン状態が引き継がれないんだろう。
WSHの問題じゃなくて純粋にそのファイルが管理者権限側から見えてない。
ネットワークドライブの割り当ても引き継がれないってのは知らなかったが…考えて見れば当然だな。
runas notepadからファイルを開くでマイコンピュータ見に行けば確認できる。

ネットワークドライブ上から実行せず、UNCパスの方から実行すれば普通に動くんじゃないかな。
ただ、ログインの必要なファイル共有の場合はどっちみちダメ。
自身をテンポラリに複製するしか無いのかなぁ…管理者以外での実行も想定するならAll Users。
0671名無し~3.EXE
垢版 |
2014/12/01(月) 12:04:16.94ID:vl7TWbzO
おそらく今更な話だと思うけど調べてもよく分からないので教えて下さい
var document = new ActiveXObject("htmlfile")でquerySelectorが使えないのは何故なんでしょう
互換モードで動いてるのが悪いのかと思ってmetaタグでIE=edgeを食わせたりしましたがやっぱり動きません
実用的にはjQueryでいいんですが、動かない理由が気になって仕方ありません
0672名無し~3.EXE
垢版 |
2014/12/02(火) 02:41:56.87ID:uW4tGm5l
new ActiveXObject("htmlfile")で得られるTridentエンジンそれ自体がMSIE7系統のものなんじゃないの?
アプリケーションとしてインストールされているIEと、コンポーネントとして動くIEは別だったりもする。
document.parentWindow.navigator.userAgentを見ればIE7の互換モードらしいことが分かる。
IE7ないしその互換状態のIEコンポーネントではquerySelectorは実装されて無いはず。
metaタグでIE=edgeを食わせるのに成功しててもその場合取得したdocumentとwindowは別物になるんじゃないかと。
そのうえwindow.location.hrefを書き換えてもdocumentはそのまま参照できる状態が続いてしまう。

オブジェクト作る時点で互換モードじゃないオブジェクト作る方法があれば出来そうな気がするけどよく分からん。
0673名無し~3.EXE
垢版 |
2014/12/02(火) 20:10:44.38ID:7F177ivT
ありがとうございます何となく分かりました
htmlfileというオブジェクトの実体は25336920-03F9-11CF-8FD0-00AA00686F13ですが
その下位キーにMicrosoft.mshtml, Version=7.0.3300.0というのがありますね
IE9のmshtml.dllのversionは9.xのようですからIE7相当の物を叩いてるという認識で間違いないようです
原因がはっきりしてスカッとしました
0674669
垢版 |
2014/12/02(火) 20:38:48.68ID:zhlSz+62
>>670
遅くなってスマン。レスありがとう
ドライブレターをUNCパスに変換するコードを書いて・・・っとやっていたんだけど
ふと管理者でもネットワークドライブをマウントしてしまえばいいんじゃね?と気が付いた
やってみたらいけそうな感じ
ネットワークドライブマウント用のスクリプトを改変するのが一番楽かも
0675名無し~3.EXE
垢版 |
2014/12/07(日) 02:12:17.14ID:AWYCy4y8
ie9以降のJavascriptエンジン(chakra)を使う方法
tp://subtech.g.hatena.ne.jp/mayuki/20111216/1324015296
0676名無し~3.EXE
垢版 |
2014/12/07(日) 02:16:11.14ID:AWYCy4y8
スクリプトのダブルクリックで起動させたいなら>44の方法で
0677名無し~3.EXE
垢版 |
2014/12/07(日) 08:47:00.96ID:addxdQLq
>>675
wsh 5以降のバージョンアップ履歴がわからんので
だれもが興味ないと思われ。

便利な機能があったら使いたいが。
0678HDI ◆hbVYHgubO6hK
垢版 |
2015/02/01(日) 05:00:21.01ID:m75TbliY
MS IMEのプロパティ(ローマ字入力か仮名入力か、キーアサインはMS式か
ATOK式かVJE式か、オートコレクトの対象は…、etc.)をログオン直後に
スクリプトで変更したいのですが、何かいい方法はありますか?
ネットカフェとか公共図書館のPCコーナーとかに入ったときにいちいち
初期状態から変更するのが面倒なので、ワンクリックで処理したいのです。
WSHで無理ならExcel VBAとかC++とかでも構いません。

適用したい対象としては、Windows XP以降・Office 2007以降のすべての
バージョンのMS製IMEが操作できればベストです。
逆に、MS以外の他社のIME、たとえばATOKとかGoogleとかは無視して可です。
デフォルトでMS以外のIMEだけが入っているということはまずないので。

var ime=new ActiveXObject("xxxx.xxxx"); から書き始めるんだろうなあ…とは
思うものの、マシンの中にどういうActiveXが入っているのか調べる方法を
知らない有様ですので、その点についても教えていただければ幸いです。

データがHKEY_CURRENT_USERにあることは確認していますが、これを読み込むのは
起動時のみのようで(起動後にレジストリエディタで書き換えても反映されない)、
起動のたびに設定がまっさらになるマシンでは、レジストリの書き換えでは
無理なように思います。

よろしくお願いします。
0682 【豚】
垢版 |
2015/02/01(日) 06:43:40.20ID:8yntfalp
(´・ω・`)
0683名無し~3.EXE
垢版 |
2015/02/02(月) 18:39:34.28ID:491TsZx9
webとwshを覚え始めたころ、
両方とも、Jscript/Javascript が使えるので
スクリプトはそれだけ覚えればいいじゃん
ということにしたら、

wshのサンプルプログラムは、VBscriptが大半で、
もういいや、と思って、はや9年。
0684名無し~3.EXE
垢版 |
2015/02/02(月) 19:00:51.19ID:eK+w3KVO
WSHはオワコンそれは間違いない、じゃあ何を使えば良いのかPowerShellかつーとこれはちょっと方向性が違う
MSもいい加減何か考えろよ、それとも後継は.netということなのか
0685名無し~3.EXE
垢版 |
2015/02/04(水) 19:41:53.02ID:7fmrLBIM
>>684 気軽に書けるインタプリタ言語、という縛りをかけると、
WSHを機能拡張するしか道はないように思う。
UNIX屋さんがいまだに/bin/shとかMakefileとかで作業してるみたいに。
0686名無し~3.EXE
垢版 |
2015/02/06(金) 22:57:46.78ID:tKm5DJDG
ちとおたずねしたい事があるでレスします。
ファイル名のリネームのひな型を作ってるのですが

Option Explicit
dim objFL,objFLD,rename
Set objFL = CreateObject("Scripting.FileSystemObject")
Set objFL = objFL.GetFolder("C:\temp")
Set objFLD = objFL.Files
rename = "150202.jpg"
objFLD.Item(rename).Name = "001.jpg"

上記で実行すると
「プロシージャの呼び出し、または引数が不正です。」
というエラーが出てしまいます。

下の部分を
objFLD.Item("150202.jpg").Name = "001.jpg"
に書換え
rename = "150202.jpg"
を削除すると
ファイル名が変更されました。

Itemプロパティの引数に変数は使えないのでしょうか?
0687名無し~3.EXE
垢版 |
2015/02/07(土) 02:54:15.68ID:m7VnhhKE
>>686
VBSは使わないのでItemプロパティで変数が使えない理由は知らないが
なぜGetFileを使わないの?
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFILE = objFSO.GetFile("c:\temp" & "\" & rename)
objFILE.Name = "001.jpg"
でいいと思うけど
0688名無し~3.EXE
垢版 |
2015/02/07(土) 04:39:30.38ID:P9nBQ8IX
>>687
知らなかったから……(恥)
まあ複数のファイルを扱いたかったのでFilesコレクションが
使えればと、ここでできなければ他の方法を探す予定でした。

近い形ができたので

Option Explicit

dim objFL,objFLD,objItem,i,l,objFiles(),objFSO,objFILE
Set objFL = CreateObject("Scripting.FileSystemObject")
Set objFL = objFL.GetFolder("C:\temp")
Set objFLD = objFL.Files

ReDim objFiles(objFLD.Count)
i = 1

For Each objItem In objFLD
Set objFiles(i) = objItem
i = i + 1
Next

l = i
i = 1

For i = 1 To l
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFILE = objFSO.GetFile(objFiles(i))
objFILE.Name = InputBox(objFiles(i)&"の名前を変更してください")
Next

これもエラーが出てますが土日は来れないと思いますのでひとまず。
0689名無し~3.EXE
垢版 |
2015/02/07(土) 04:42:25.81ID:P9nBQ8IX
>>687
それとお礼を忘れてました(汗)
有難うございます。
0691名無し~3.EXE
垢版 |
2015/02/07(土) 05:40:09.49ID:wHuPUcI3
>>686
もう解決しているようだけど…ちょっとみてみた
CStr()するとか文字列演算するとかするとエラーにならないね
JScriptで似たようなコードだと、そんな変換必要ないし不思議だね
0693名無し~3.EXE
垢版 |
2015/02/07(土) 16:44:40.34ID:m7VnhhKE
>>688
回りくどいことしてるけど、単純に以下のようにしちゃダメなの?

Option Explicit

dim objFSO,objFLD,objFC,objFILE
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFLD= objFSO.GetFolder("c:\temp")
Set objFC = objFLD.Files

For Each objFILE In objFC
objFILE.Name = InputBox(objFILE.Path & "の名前を変更してください")
Next
0694名無し~3.EXE
垢版 |
2015/02/08(日) 14:53:46.71ID:3Sq3UJI6
基本的な部分はもっと単純に出来る

Dim objFSO,objFILE
Set objFSO = CreateObject("Scripting.FileSystemObject")
For Each objFILE In objFSO.GetFolder("c:\temp").Files
  objFILE.Name = InputBox(objFILE.Path & "の名前を変更してください")
Next

使い回さないなら、フォルダオブジェクトもファイルコレクションも変数に取る必要はない

でも逆に複雑にというか例外処理を入れた方が良い部分があり
InputBoxの戻り値は、直接ファイルオブジェクトのNameプロパティに代入しないで
一度変数に取り、空の場合、元のファイル名と同じ場合、重複がある場合などの対策を取った方が良い

とにかく、「フォルダ内の全ファイル」って対象のリネーム作業は
途中でエラー出して強制終了すると、リネーム終ってるものも含めて最初からやり直しで
しかもリネーム終ってるものはそのままのファイル名にしたくても
NameプロパティにInputBoxの戻り値を直接代入している状態では、未入力でOKやEnter押せばエラーになり
キャンセルボタンを押してもエラーになり、同じ名前を入力してもエラーになりで収集が付かなくなる

別の回避策としては、リネームが終ったファイルはc:\tempからc:\temp\#renameに
ファイル名変更と同時に移動を行い、処理の最後でc:\temp\#rename内の全ファイルを
c:\tempに移動してc:\temp\#renameを削除するって手もある
これなら途中のエラーで強制終了しても、次に実行した時にエラーになったファイルから始められるし
途中で強制終了せずに最後まで正常実行されれば、移動したファイルも元に戻るし
作った一時待避用フォルダも残らないので、結果は全く変わらない

説明が長くなったが、ファイル名変更って取っ掛かりは簡単だけど、まともなものを作るのはそれだけ難しいってこった
他には、使用不可文字とか、ファイルがロックされてるとかもあり得るしね
因みに知ってるかもしれないが、MsgBoxのボタン指定でvbYesNoCancelを使うと、三択の処理分けが出来るので
戻り値がEmptyだったら「はい→スキップ」「いいえ→再入力」「キャンセル→処理全体を終了」とか
重複がある場合は「はい→自動連番化」「いいえ→再入力」「キャンセル→スキップ」とかの対策が出来る
0695名無し~3.EXE
垢版 |
2015/02/09(月) 19:00:47.67ID:dzFyHPM6
ファイルの取り扱いで多摩にあるのがフルパス長すぎでエラーが返るとかもあるな
0696名無し~3.EXE
垢版 |
2015/02/11(水) 01:35:35.01ID:wKEalFGT
遅くなりまして済みませんようやく返事します。

>>691
CStr()はダメだった、文字列演算はやってない
JScriptは知識不足でできなかった申し訳ない。

>>693
思いつかなかっただけです(汗)

>>694
>NameプロパティにInputBoxの戻り値を直接代入している状態では、
>未入力でOKやEnter押せばエラーになり
>キャンセルボタンを押してもエラーになり、
>同じ名前を入力してもエラーになりで収集が付かなくなる
なんか例外処理を入れた方が良さそうだが、自分1人でファイル数も
2〜3個を毎週処理する形なので単純な方を選びます。

>MsgBoxのボタン指定でvbYesNoCancelを使うと、
>三択の処理分けが出来るので
知っておりません……(再汗)

リネームに追加部分をつけるので>>694がシンプルでいいが使い回しの点で
>>693のコードにするかもしれない、WSHを使おうと思ったのは省力化と
WHSの勉強を兼ねてなのだが省力化からはもう逸脱しているようだ(笑)

皆さんレスありがとうございました。
0697名無し~3.EXE
垢版 |
2015/02/11(水) 01:50:33.27ID:RhhN4UgP
個人で使うにしても
せめて、入力のスキップと途中での中断とリネーム後のエラーチェックとそのリトライかキャンセル
ぐらいは組み込んだらいいと思う
0698名無し~3.EXE
垢版 |
2015/02/11(水) 05:24:33.23ID:7mopOKOq
>>696
うちの環境では
objFLD.Item(rename).Name = "001.jpg"

objFLD.Item(CStr(rename)).Name = "001.jpg"
もしくは
objFLD.Item(rename & "").Name = "001.jpg"
でエラーが出なくなったよ
(そもそも最初のがなぜエラーになるかわかんないけど)
0699名無し~3.EXE
垢版 |
2015/02/11(水) 19:11:40.19ID:wKEalFGT
>>698
どもありがとうございました。
これで動作しました。

>>696で試した時は
rename = "150202.jpg"
objFLD.Item(rename).Name = "001.jpg"

の間に
rename = CStr(rename)
を入れてました。

これを含めて改めて自分のコードを
見るとくどいな。
0700名無し~3.EXE
垢版 |
2015/02/11(水) 19:37:51.15ID:RhhN4UgP
>>699
ちょっとエラーチェックを入れたのを作ったので参考にどうぞ

Option Explicit
Const cFolder = "c:\temp"
Dim MyName
Dim FSO, folder, file, r, name, tmpname
Call renameAll()
Set FSO = Nothing

Sub renameAll()
Set FSO = CreateObject("Scripting.FileSystemObject")
MyName = cFolder & "の全ファイルリネーム"
If FSO.FolderExists(cFolder) Then
Set folder = FSO.GetFolder(cFolder)
For Each file In folder.Files
tmpname = ""
Do
Do
name = InputBox(file.Path & "の名前を変更してください", MyName, tmpname)
If name="" Then
r = MsgBox("終了していいですか",vbYesNo+vbQuestion, MyName) '=6:vbYes =7:vbNo
If r = vbYes Then
Exit For
End If
End If
Loop While name=""
0701名無し~3.EXE
垢版 |
2015/02/11(水) 19:38:45.26ID:RhhN4UgP
r = rename(file, name)
If r = vbAbort Then
Exit For
End If
tmpname = name
Loop While r = vbRetry
Next
End If
End Sub

Function rename(file, name) '=0:finished =3:中止 =4:再試行 =5:無視
rename = 0
On Error Resume Next
Err.Clear
file.Name = name
If Err.Number <> 0 Then
rename = MsgBox("リネームできませんでした" & vbCrLf & Err.Description, _
vbAbortRetryIgnore+vbDefaultButton2+vbExclamation, _
file.Path & "のリネーム")
End If
End Function
0702名無し~3.EXE
垢版 |
2015/02/11(水) 20:45:53.97ID:H/yaaeQZ
お前らpastebin使えよcodeを直接貼るんじゃない
0703名無し~3.EXE
垢版 |
2015/02/12(木) 02:21:21.05ID:TiWIWQj1
>>700
どうもありがとうございます
参考にさせていただきます。
0704名無し~3.EXE
垢版 |
2015/02/12(木) 17:24:29.62ID:ouhd2nvy
>>703
ついでにソートもどうぞ(>>700でfolder.Files→sortFiles(folder.Files)に変更)
Function sortFiles(files)
Dim rs, files2, f, i, newfiles
ReDim filesArray(files.Count-1)

Set rs = CreateObject("ADODB.Recordset")
Call rs.Fields.Append("index", 3, 255) '=3:adInteger
Call rs.Fields.Append("name", 200, 255) '=200:adVarChar
Call rs.Fields.Append("dateLastModified", 7) '=7:adDate
Call rs.Open()
i = 0
For Each f In files
Call rs.AddNew()
rs.Fields("index").Value = i
rs.Fields("name").Value = f.Name
rs.Fields("dateLastModified").Value = f.DateLastModified
Set filesArray(i) = f
i = i + 1
Next
Call rs.Update()
rs.Sort = "dateLastModified DESC" 'ASC:昇順 DESC:降順
files2 = rs.GetRows()
Call rs.Close()
Set rs = Nothing
Set newfiles = CreateObject("Scripting.Dictionary")
For i = 0 To UBound(files2, 2)
newfiles.Add filesArray(files2(0,i)), filesArray(files2(0,i))
Next
Set sortFiles = newfiles
Set newfiles = Nothing
End Function
0705名無し~3.EXE
垢版 |
2015/02/12(木) 17:40:34.10ID:ouhd2nvy
ちょっと修正
>>700
Set FSO = CreateObject("Scripting.FileSystemObject")
をSubの外へ出す
Set FSO = CreateObject("Scripting.FileSystemObject")
Call renameAll()
Set FSO = Nothing

>>704
Call rs.Fields.Append("index", 3, 255) '=3:adInteger

Call rs.Fields.Append("index", 3) '=3:adInteger
0706名無し~3.EXE
垢版 |
2015/02/12(木) 17:56:35.98ID:ouhd2nvy
ちょっとVBSを勉強して扱ってみたけどなんかやっぱり俺には合わん気がした
0707名無し~3.EXE
垢版 |
2015/02/12(木) 19:29:20.87ID:JiJlTdL6
言語的にではなく、アルゴリズム的にこういう幼稚なコード書く奴は
どの言語使ったってどうせろくなものは作れないだろうから
VBSが合わないというより、プログラミングが合わないんだろうね

それなりに知識はありそうだけど、頭でっかちで柔軟性が無く
本質的に何が必要で何が無駄かを正しく判断できないタイプ
0708名無し~3.EXE
垢版 |
2015/02/13(金) 20:49:30.30ID:PV+7vqus
美しいスクリプトを書くコンテストじゃないんだから
幼稚な表現だろうが
何も書けない、デバックできないよりはよっぽどマシ。

書けることによって、人生やPC生活を楽しんだものの勝ち。
0709名無し~3.EXE
垢版 |
2015/02/13(金) 21:32:31.20ID:b+sto9Ml
向上心が欠片も感じられないレスですな
0710名無し~3.EXE
垢版 |
2015/02/14(土) 03:18:04.85ID:JkeFZdBX
コードが美しくないってのは別にどうでもいいけど
物事の考え方が美しくないってのは、
プログラムだけではなく日常生活にも滲み出てるだろうからな

彼の場合、パソコンを使って、プログラムを使って、何を成すかではなく
パソコンに詳しい俺、プログラミング出来る俺、を顕示するための道具が
パソコンやプログラムなだけなんだよね

シャコタンにしたり、スモーク貼りまくったり、ステッカー貼りまくったり
無駄にデカいホイール履いたり、無駄に音が大きいマフラー付けたりして
周りから見たら、アニメ絵とかを貼ってるイタ車とは違っても別な意味で痛いだけの車を、
自己顕示の道具として扱ってるDQNと大差ない
0711名無し~3.EXE
垢版 |
2015/02/14(土) 16:12:51.96ID:jMrdproP
それをマニアとかヲタクとか言う
0712名無し~3.EXE
垢版 |
2015/02/14(土) 16:24:51.46ID:jFlxCePM
美しいcodeってのは効率的なcodeだ
ブサイクだろうと動いてるcodeは良いcodeってのは現場の実用論に過ぎない
0713名無し~3.EXE
垢版 |
2015/02/15(日) 02:11:14.89ID:HqqCSMWe
ここはwindows板だ
コードを貼るなとか汚いコードとか無駄なコードは向上心のないDQNとか
そういうことで文句言うのはプログラマのいる板でやってくれ
過去そういうことで文句言ったやつはいないだろ
0714名無し~3.EXE
垢版 |
2015/02/15(日) 04:23:11.03ID:+8AYBQVI
> ここは稚拙な俺のコードにも、誰も文句を付けないスレであり続けて欲しい
まで読んだ
0715名無し~3.EXE
垢版 |
2015/02/15(日) 14:56:43.28ID:kGjK2wsT
うんまあ要するにだね、pastebin使えって言われたのに無視して貼り続けたから半分荒らし扱いされてんだよ
0716名無し~3.EXE
垢版 |
2015/02/21(土) 15:58:50.26ID:VnpKOASo
モニタを切るのにメッセージを投げようとSFC mini使ったんだけど上手くいかないorz

Option Explicit
Const HWND_BROADCAST = &HFFFF
Const WM_SYSCOMMAND = &H0112
Const SC_MONITORPOWER = &HF170
Const MONITOR_OFF = 2
Dim PostMessage
Set PostMessage = CreateObject("SfcMini.DynaCall")
PostMessage.Declare "user32", "PostMessage"
PostMessage HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_OFF
WScript.Quit 0

(つづく)
0717名無し~3.EXE
垢版 |
2015/02/21(土) 15:59:52.92ID:VnpKOASo
(つづき)

で、PowerShellでそれらしいの実行したら上手くいく・・・んだけど
PowerShellでヒアドキュメントや型追加なんかかったるいし読みづらい

$HWND_BROADCAST = 0xFFFF
$WM_SYSCOMMAND = 0x0112
$SC_MONITORPOWER = 0xF170
$MONITOR_OFF = 2
$signature = @'
[DllImport("user32.dll")]
public static extern bool PostMessage(
IntPtr hWnd,
UInt32 Msg,
Int32 wParam,
Int32 lParam);
'@
$monoff = Add-Type `
-MemberDefinition $signature -Name "Win32PostMessage" `
-Namespace "Win32Functions" -PassThru
$monoff::PostMessage($HWND_BROADCAST, $WM_SYSCOMMAND, $SC_MONITORPOWER, $MONITOR_OFF)
$null

なぜにWSHだとダメなんでしょ? SFC miniの使い方間違ってるんでしょうか?
環境はXP、Win7 Pro、Win7 HomePro(いづれもx86)です
0718717
垢版 |
2015/02/21(土) 16:07:02.66ID:VnpKOASo
> Win7 HomePro
Win7 Home Premiumの間違いorz
0719名無し~3.EXE
垢版 |
2015/02/22(日) 02:01:26.73ID:ue/FL006
PostMessage.Declare "user32", "PostMessageA"
にしてみれば?
0720名無し~3.EXE
垢版 |
2015/02/22(日) 11:22:25.41ID:bGQ+1wc4
>>719
やってみたんだけどダメでした

で、SC_MONITORPOWERだけじゃなく他の値も無反応だったので、ググってうちに
VB/VBA等で書かれてるページが幾つか見つかって眺めててたんだけど・・・
APIのI/FはwParam型(INT32)なんでSC_MONITORPOWERはlong型で渡さなきゃ
ダメだと気づきました(つまらない凡ミスorz
>>716

Const SC_MONITORPOWER = &HF170& 'long型を明示

で上手く動きました!(cscript.exeでダケだけど)
0721名無し~3.EXE
垢版 |
2015/02/25(水) 23:03:55.68ID:EVrBndbg
すごく初歩的な質問なのですが
False,0,Null,Empty,"False","0"以外は真になるとのことなので

'この二つが真になるのはわかるんですが
if 1 then
MsgBox "真"
End If

if 9 and 10 then
MsgBox "真"
End If

'↓これが真にならないのはなぜですか?
if 2 and 9 then
MsgBox "真にならない"
End If

'これだと問題ありません
if 2 then
if 9 then
MsgBox "真"
End If
End If

二つの関数からの戻り値が両方とも0以外なら真にしたかったのですが
それ自体はちゃんと指定すれば解決したのですがなんかすごい気になってしまって
0723名無し~3.EXE
垢版 |
2015/02/26(木) 00:46:02.74ID:oLPusGvh
ファイルサーバ上にあるフォルダを共有フォルダにしたくて次のスクリプトをメモ帳にコピべしてvbs拡張子にして保存して、ダブルクリックしたのですが、何も表示されず、共有フォルダも表示されません。なにがダメなのでしょうか?

Const FILE_SHARE = 0
Const MAXIMUM_CONNECTIONS = ""

strComputer = "atl-ws-01"
Set objWMIService = GetObject _
("winmgmts:\\" & strComputer & "\root\cimv2")

Set objNewShare = objWMIService.Get("Win32_Share")

errReturn = objNewShare.Create _
("C:\Public", "PublicShare", FILE_SHARE, _
MAXIMUM_CONNECTIONS, "Public share for Fabrikam employees.")

パラメータ 説明
"C:\Public"
ファイルサーバ内の共有するフォルダのローカル パス

"PublicShare"
共有フォルダの共有名

FILE_SHARE
作成する共有の種類

MAXIMUM_CONNECTIONS
共有に同時に接続できるユーザーの最大数

"Fabrikam 社員用のパブリック共有"
共有フォルダの説明
0724名無し~3.EXE
垢版 |
2015/02/26(木) 17:41:39.37ID:tqIwUSBl
>>721
VBのAndは「AND演算」を行う
そのまま渡すのはTrue,Falseだけにして、それ以外は比較演算子や判定関数に渡したほうが良いよ
0725名無し~3.EXE
垢版 |
2015/03/02(月) 21:57:26.73ID:4eCMeSu6
>>721 偽のときの戻り値がゼロと決めてあるのなら、
if function1()<>0 and function2()<>0 then
と書ける。
0の場合もあるけどFalseとか""とかの場合もある、ということになると
(VBというよりExcelのワークシート関数とかでよくある罠だが)、
一つ一つの関数の結果を変数にとるなりしなきゃいけない。

VBのAndにはもう一つ罠がある。単純な例だがこんなのはダメ。
if x<>0 and f(1.0/x)=2 then
0726名無し~3.EXE
垢版 |
2015/03/13(金) 08:50:37.46ID:k2U8xQow
右Windowsキーの右隣のMenu/Applicationのキーストロークを
送信しようとしているのですが、うまくいきません。

お助けください。

var x0 = WScript.CreateObject("WScript.Shell");
x0.SendKeys("{APPSKEY}");

---------------------------
Windows Script Host
---------------------------
スクリプト: C:***\***.js
行: 2
文字: 1
エラー: プロシージャの呼び出し、または引数が不正です。
コード: 800A0005
ソース: Microsoft JScript 実行時エラー

---------------------------
OK
---------------------------
0727名無し~3.EXE
垢版 |
2015/03/14(土) 19:04:00.24ID:xyKM/Ni4
//Shift+F10で出る右クリックメニューに'P'を送る
var x0 = WScript.CreateObject("WScript.Shell");
x0.SendKeys("+({F10}{PRTSC}{PRTSC}{PRTSC}{PRTSC}{PRTSC}{PRTSC}{PRTSC}{PRTSC}P)");
0728名無し~3.EXE
垢版 |
2015/03/15(日) 19:40:14.43ID:Ur/MCA52
>>727
ありがとうございます。
どこにも回答がなかったので・・・

・・・しかし、なんで{PRTSC}を。。
と思ったらwaitの代わりなんですねこれ。
0729名無し~3.EXE
垢版 |
2015/03/16(月) 22:17:56.08ID:3SLugBpb
一部の環境で
WScript.CreateObject("〜")
がWScriptは宣言されていませんとエラーになる原因って何なんですかね?
記述として正しいはずなのにWScriptを削れ(ググると出てくる対処療法)と言うのも変な話ですし
0730名無し~3.EXE
垢版 |
2015/03/24(火) 09:41:17.61ID:j6UY6oz/
>>729
WScriptオブジェクトがあるのはWSHの時だけ

WScriptを削るとWScriptオブジェクトのCreateObjectメソッドではなく
VBScript自体が持ってるCreateObject関数の呼び出しになる

CreateObject関数はVBSが実行できるなら、どの環境でも使える

WScriptオブジェクトのCreateObjectメソッド
https://msdn.microsoft.com/ja-jp/library/cc364399.aspx
VBScriptのCreateObject関数
https://msdn.microsoft.com/ja-jp/library/cc410215.aspx
0731名無し~3.EXE
垢版 |
2015/03/24(火) 16:04:39.58ID:qjgitYka
WSHエンジンを叩いた時点でWScriptがインスタント化される
だからWSHを叩かなきゃ当然WScriptオブジェクトは存在しない
0732名無し~3.EXE
垢版 |
2015/03/24(火) 16:05:44.79ID:qjgitYka
何でインスタントだよインスタンスだ俺の馬鹿
0733名無し~3.EXE
垢版 |
2015/03/26(木) 23:55:44.54ID:/eqpjRM9
wshでExcelの扱い方が分かるサイトご存知でしたら教えていただけませんか?
既存のワークブックのセルを外から操作とか
0734名無し~3.EXE
垢版 |
2015/03/27(金) 00:43:05.87ID:yPVC3FPi
オブジェクトの掴み方や制約事項が多い以外は基本的にVBAとやり方は同じだから、基礎はマクロの文献漁った方が早いよ。

そもそもWSHやVBAの基礎になってるActiveX/COMつーのは、Excelみたいなものを共通部品(コンポーネント)化して、VBAのようなアプリ付属のマクロやWSHのような独立した言語から同じように使えるようにする技術なので。
0735名無し~3.EXE
垢版 |
2015/03/27(金) 00:57:13.75ID:yPVC3FPi
ちなみにActiveXのCOM違いについて悩むかもしれんので補足すると、ActiveXがバージョンアップでCOMに変わったと考えて貰えばよろし。
更に付け加えると
クリップボード→DDE→OLE→ActiveX→COM→DCOM→COM+という流れがあって、古い技術で覚えたことが新しい技術でも何らかの形で役立つようになってる。
またMSはそれをWindows DNAと呼んでる。
0736名無し~3.EXE
垢版 |
2015/04/14(火) 06:33:55.51ID:va3U4Gqa
gVimでJSCriptを編集していますが、
JSHintが変なところに警告をだしてしまいます。

if(tagTitle != 'Internet Explorer ではこのページは表示できません')

↑だと「は」のところに "bad or unnecessary escaping." と警告を出します。
UTF8ではなく、CP932で編集していることが原因?
だと思うのですが、回避する方法はありますでしょうか?
0738名無し~3.EXE
垢版 |
2015/04/30(木) 21:41:56.40ID:/LRZyAtt
職場のPC(win7/32bit)で、自由にソフトウェアをインストロールできない環境で
wsh/jscriptである程度自動化するのに
マウスを移動する、マウスの位置を検出する、
マウスを(D)クリックする、マウスを右クリックする
だけは、vc#(.net flamewalk2)でexeファイルを作成し
.exec()で、引数をつけ今までは使えていたのに
今日から、有効なwin32アプリケーションではありませんエラーで使えなくなった。

.exec()を経由しないで
別の単独実行可能なvc#(.net flamewalk2)で作成したexeファイルは
ダブリュークリックで普通に動く。

職場のPC管理者は陰険な妨害をしやがって、プンプン。

マウス操作なら、excelでwin32API叩ける関数で代用できるらしいが
勉強してないからなぁ。
0740名無し~3.EXE
垢版 |
2015/04/30(木) 23:42:03.25ID:/LRZyAtt
>>739
ありがとうございます。

ネットで配布されているDLL があやしいか、あやしくないかですが
自己責任で使ってみるしかないかなぁ。


Visual C++ 2010 express 入れてみて
ライセンスキーも入れたけど
windows form によるUI表示がない場合で
マウスI/Oをどうすればいいか
調べるだけで敷居が高いわなぁー
このスレではすれ違いですがね。
0742名無し~3.EXE
垢版 |
2015/05/01(金) 00:22:06.61ID:n4sigpVl
ヽ( ・∀・)ノ● ウンコー
0743名無し~3.EXE
垢版 |
2015/05/04(月) 12:04:00.19ID:1NxYoByh
スクリプト内のコマンドを管理者権限で実行したい場合は、自身をShellExecuteにrunas付きで起動しなおすと
昇格ダイアログの出現を最初の1回のみに出来るけど以降実行されるすべてのコマンドが管理者権限で
実行されてしまう
最初の1回の昇格ダイアログで
コマンド1(管理者)
 ↓
コマンド2(ユーザー)
 ↓
コマンド3(管理者)
みたいなことって出来ないのかな・・・
0744名無し~3.EXE
垢版 |
2015/05/04(月) 16:53:59.41ID:FXdqzO1I
runasオプションで管理者かどうか変えるんだっけ?
コマンド2は別スクリプトファイルを生成して、そこだけexecで起動すればどうだろ
0745名無し~3.EXE
垢版 |
2015/05/08(金) 23:20:30.41ID:AIQ249EY
Win10だと今のところ
cscript //e:{1b7cd997-e5ff-4932-a7a6-2a9e636da385} hoge.js
または
wscript //e:{1b7cd997-e5ff-4932-a7a6-2a9e636da385} hoge.js
で、hoge.jsをIE11モードで実行できる

({1b7cd997-e5ff-4932-a7a6-2a9e636da385}はchakra.dllのCLSID)
0748名無し~3.EXE
垢版 |
2015/05/08(金) 23:54:37.61ID:p7W4x9kO
これすごくね
最新のjsライブラリよりどりみどりじゃん
wshはじまた
0753名無し~3.EXE
垢版 |
2015/05/14(木) 19:59:05.56ID:na1Ke3J0
Microsoft、Windows 10 IoT Core上でNode.jsを利用可能にする取り組みについてブログで解説
http://codezine.jp/article/detail/8722

Windows 10によるNode.jsのサポートは、現時点ではまだ開発の初期段階で、
Chakra JavaScriptエンジンと「Node.js v0.12」のコードを使用したV8 APIのホスティングによる
JSRT APIラッパーの開発を目指している。

GitHubで公開している最新のコードでは、Windows 10が動作するすべてのデバイスで、
Node.jsがクラシックWindowsアプリケーションとして動作するとともに、
ユニバーサルWindowsアプリケーションの内部でホストできる。
また、Node.jsアプリからUWP APIの全ての機能にアクセス可能で、
Windows 10上のVisual Studioにおける、Node.jsアプリのデバッグを実現している。

現段階では、Windows 10の動作するすべてのデバイスでNode.jsを利用した開発を実現するだけでなく、
クラシックWindowsアプリとして利用するか、ユニバーサルWindowsアプリとして利用するかを選択できる。
0755名無し~3.EXE
垢版 |
2015/05/19(火) 21:24:54.79ID:DJFQjSZE
WORDで2セクションから成るWORDのファイルを
別々のファイルとして自動的に保存するサンプルはVBscript版はy!知恵袋にあるが
jscript版はなかったので、灯火。

var oWord = WScript.CreateObject("Word.Application");
var oDoc = oWord.Documents.Open("C:\\Users\\Public\\Documents\\01bunkatuMAE.doc");
oWord.Visible = true;
var newDoc,sec;

for(i=1;i<=2;i++){

sec = oDoc.Sections(i);
newDoc = oWord.Documents.Add();

oDoc.Range(sec.Range.Start, sec.Range.End - 1).Copy();
newDoc.Range().Paste();
if(i==1) newDoc.SaveAs("C:\\Users\\Public\\Documents\\02_section1.doc");
if(i==2) newDoc.SaveAs("C:\\Users\\Public\\Documents\\03_section2.doc");
newDoc.close();
}

oDoc.close();
0756名無し~3.EXE
垢版 |
2015/05/21(木) 20:38:57.59ID:A6tn3+F6
>>755 は
win7sp1 64bit+word2000なら動くが、win7sp1 32bit+word2010だと動かないんで
ツルーしてくれ。
0759名無し~3.EXE
垢版 |
2015/05/23(土) 15:41:12.05ID:ISKmDePi
俺も投下。wshからexplorerを経由してhtaを利用するサンプル。ググってもIEを経由する方法しか無かったので

function createHta() {
var shellApp = new ActiveXObject("Shell.Application");
var existsExplr = !!shellApp.Windows().Count;
existsExplr || shellApp.ShellExecute("", "", "explorer.exe", "", 0);
for(; !shellApp.Windows().Count; WScript.Sleep(100));
var explr = shellApp.Windows().Item(0);
explr.PutProperty("hta", undefined);
var exec = new ActiveXObject("WScript.Shell").Exec("mshta.exe \"about:" +
"<head><meta http-equiv='X-UA-Compatible' content='IE=11' />" +
"<script>window.moveTo(window.screen.width, window.screen.length);" +
"new ActiveXObject('Shell.Application').Windows().Item(0)" +
".PutProperty('hta', window);</script></head><body></body>\"");
for(; explr.GetProperty("hta") === undefined; WScript.Sleep(100));
var window = explr.GetProperty("hta");
explr.PutProperty("hta", undefined);
existsExplr || explr.Quit();
return {window: window, exec: exec};
}

つづく
0760名無し~3.EXE
垢版 |
2015/05/23(土) 15:43:29.47ID:ISKmDePi
使用例

var hta = createHta();
function callback() {
WScript.Echo("this is wsh function");
}
hta.window.document.write("click here");
hta.window.document.body.addEventListener("click", callback);
hta.window.resizeTo(600, 400);
hta.window.moveTo(0, 0);
for(; !hta.exec.status; WScript.Sleep(1000));

metaタグで一応IE11モードで動くようにしてある
起動と同時に画面外に移動させ、初期化が完了したら呼び戻す
htaが終了するまでwshは待機する
wshからhtaのwindowオブジェクトにアクセスできる
逆にhtaからwshの関数をコールバックすることもできる
なおhtaにjqueryを読み込んでonメソッドでwshの関数をセットするのは無理だった
ブラウザ用のライブラリ使って高度なことやるなら普通にhtaでやったほうがよさそう

おわり
0761名無し~3.EXE
垢版 |
2015/05/23(土) 20:55:04.00ID:ISKmDePi
追伸

document.write()だとソース消えちゃうんだな

hta.window.document.write("click here");
↓こうで
hta.window.document.body.innerText = "click here";

今度こそおわり
0765名無し~3.EXE
垢版 |
2015/05/25(月) 23:47:20.51ID:E7cADiN2
>>759-761だけど「単独のjsファイルでウインドウ付きのguiアプリを動かす」というだけならこんな面倒なことせずに済むことに気づいた
起動するhtaの外部ソースに自分自身を指定するだけ

(function() {
if ("WScript" in this) {
new ActiveXObject("WScript.Shell").Run("mshta.exe \"about:" +
"<head><meta http-equiv='X-UA-Compatible' content='IE=edge' />" +
"<script src=" + WScript.ScriptFullName + "></script></head><body></body>\"");
WScript.Quit();
}
})();

onload = function(){
document.body.innerText = "click here";
document.body.addEventListener("click", function() {
alert("success");
});
resizeTo(600, 400);
};

これを拡張子.jsにしてダブルクリックするとウインドウが立ち上がる
上の無名関数はwshで実行するとhtaを起動し、htaで実行するとスルーしてその後の処理を続ける
webサイト用のjsも頭にこれを付けると(うまくいけば)ローカルアプリになる
既出のテクかもしれないけど一応報告
0766名無し~3.EXE
垢版 |
2015/05/26(火) 08:59:16.46ID:D2iz9cfE
すまんクォーテーションでくくるの忘れてた
"<script src=" + WScript.ScriptFullName + "></script></head><body></body>\"");
↓こうで
"<script src='" + WScript.ScriptFullName + "'></script></head><body></body>\"");
0767名無し~3.EXE
垢版 |
2015/05/27(水) 22:13:07.05ID:UVeFO6It
勉強がてらD3.jsを使ってCPU周波数を可視化するサンプル作った。.jsにしてダブルクリック
スクショ→http://i.imgur.com/IgY8wq5.png

if ("WScript" in this) {
new ActiveXObject("WScript.Shell").Run("mshta.exe \"about:" +
"<head><meta http-equiv='X-UA-Compatible' content='IE=edge' />" +
"<script src='http://d3js.org/d3.v3.min.js'>;</script>" +
"<script src='" + WScript.ScriptFullName + "'></script>" +
"<script>moveTo(screen.width, 0);</script>" +
"<title>" + WScript.ScriptName + "</title></head><body></body>\"");
WScript.Quit();
}

onload = function() {
var service = new ActiveXObject("WbemScripting.SWbemLocator").ConnectServer();
var svg = d3.select("body").style({margin: 0, overflow: "hidden"}).append("svg").attr({width: 300, height: 300});
var circle = svg.append("circle").attr({cx: 150, cy: 150, fill: "white", stroke: "black", "stroke-width": 6});
var text = svg.append("text").attr({x: 150, y: 160, "text-anchor": "middle", "font-size": 25, "font-family": "sans-serif"});
setInterval(function(){
var records = service.ExecQuery("SELECT MaxClockSpeed, CurrentClockSpeed FROM Win32_Processor");
var record = new Enumerator(records).item();
var rScale = d3.scale.linear().domain([0, record.MaxClockSpeed]).range([0, 145]);
circle.data([record.CurrentClockSpeed]).transition().attr({r: rScale});
text.text(record.CurrentClockSpeed + " Mhz");
}, 1000);
resizeTo(320, 340);
moveTo((screen.width - innerWidth) / 2, (screen.height - innerHeight) / 2);
};
0768名無し~3.EXE
垢版 |
2015/06/07(日) 18:01:55.94ID:ba00/D5p
ここの人たちはどうやってWSHを勉強しているんだろう
本屋行っても2種類くらいしか書籍ないし、ネットでもほとんど情報ないし
JavaScriptが分かるからこれで作業自動化なんて考えたけど難しい
0769名無し~3.EXE
垢版 |
2015/06/07(日) 19:33:18.23ID:LcHw3WPs
JavaScriptとMSDNにあるWSHのリファレンス
0770名無し~3.EXE
垢版 |
2015/06/07(日) 22:56:55.56ID:RSp5U117
>>768
何かやりたいことが先にあって、それを実現するにはとうしたらいいかを調べていけばいい
学校の授業のように教科書があって順に読んでいけば良いとか無い
またそんな曖昧な目的しかなければ何時まで経っても身に付かないと思う
0771名無し~3.EXE
垢版 |
2015/06/08(月) 23:29:47.27ID:45GIk1Zt
>>768
scd56jp.exe をダウンロードして
ムリヤリ解凍して得られる script56.chm をエディタの外部ヘルプにしている。
0773名無し~3.EXE
垢版 |
2015/06/09(火) 00:52:59.92ID:42hj0R96
>>768だけど情報ありがとう
そういえば今まで行き詰まったらずっと教科書的なもの探してたわ
通りでプログラミングに限界感じてたわけだ
無駄に買った本はプライスレス
0774名無し~3.EXE
垢版 |
2015/06/13(土) 21:50:01.10ID:lqFz5zpc
jscript を chakra で実行すると WScript.quit って使えないの?
0775名無し~3.EXE
垢版 |
2015/06/13(土) 23:01:38.40ID:aBVLZMxS
というか>>745って動く?
Win10 Build10130だけど「スクリプトエンジンが見つかりません」ってなる
0776名無し~3.EXE
垢版 |
2015/06/13(土) 23:28:44.26ID:lqFz5zpc
>>775
言われてみれば,自分の使っているのとは違ってる。 自分は,
cscript //E:{16d51579-a30b-4c8b-a276-0ff4dc41e755} hoge.js
だた。
0777775
垢版 |
2015/07/02(木) 17:01:18.39ID:44uIXt3S
Build 10158で>>745動いた
よかったよかった
でもclass構文はまだなのね
アロー関数が使えるだけでも十分だけど

>>776
なぜかBuild 10130だとそれも動かなかったんだよね
うちの環境がバグってただけかもしれないけど
0778名無し~3.EXE
垢版 |
2015/07/05(日) 09:47:49.01ID:HOP89DPP
Alt+tabのときに出てくる画面選択できるウィンドウを表示させたままにしたいのですが、これはwshで実現可能ですか?
ソフトのダウンロードではなくメモ帳でjseやvbsで作成したいです。
検索かけてもキーの自動入力くらいしか見つからなくって
0780779
垢版 |
2015/07/05(日) 20:53:22.81ID:bMwt9ybH
VBS → CreateObject("Shell.Application").WindowSwitcher
JS → new ActiveXObject("Shell.Application").WindowSwitcher();
0781名無し~3.EXE
垢版 |
2015/07/06(月) 00:33:30.17ID:1hJ4Jgm2
>>780
ありがとうございます!
switcherのような名前で検索するとマイクロソフトの公式で調べられたんですね。
あとはウィンドウを表示させたままにする方法を探してみようと思います。
使っているファイルが多いのと、最近目が疲れているせいかalt+tabで開いてもどれが目的のウィンドウか探すのに地味に時間がかかってしまって……
0783名無し~3.EXE
垢版 |
2015/07/11(土) 15:51:17.53ID:9Eg4whLJ
chakra(>>745)だとEnumeratorがないからFileSystemObjectのfilesコレクションとか列挙できないな
せっかく書きやすくなったと思ったのに残念
0785名無し~3.EXE
垢版 |
2015/07/12(日) 15:53:48.36ID:7v5ASif7
>>784
shell.exec(`cmd /c "dir ${path} /b"`)
で頑張ろうとしてたけど、そんな方法もあったのね
ありがとう
0786名無し~3.EXE
垢版 |
2015/07/12(日) 22:06:02.78ID:aQFxKc5K
WSHのバージョン5.812ってなんだよww
0787名無し~3.EXE
垢版 |
2015/07/29(水) 02:08:22.01ID:Wfnu2z0p
vbsやwsfやhtaって10でも使えるって考えていいの?
powershellに統一されることはないの?
0788名無し~3.EXE
垢版 |
2015/07/31(金) 01:28:37.30ID:YUritsbl
パワーシェルはバッチと組み合わせないと使えないのでめんどくさい。
0790名無し~3.EXE
垢版 |
2015/09/01(火) 23:45:19.08ID:+Mia2Mma
Windows7のタスクスケジューラで問題なく起動していたjsが
Windows10にアップグレードしたら「このファイルを開く方法を選んでください」ダイヤログが出て動かなくなった
半日悩んだがファイル名に半角スペースが含まれていたからだった
この糞仕様は常識なの?
0791名無し~3.EXE
垢版 |
2015/09/20(日) 15:54:26.33ID:S9LQQUec
アップグレードでダブルクォーテーション取れたとかじゃなくて?

半角スペース云々の話は常識っていうか…
それを糞と言っちゃう人の頭が糞仕様としか
0792名無し~3.EXE
垢版 |
2015/10/10(土) 03:33:34.62ID:ZxWiY8fL
>>765をSJISで保存して漢字を入れると盛大に文字化けするんだけど文字コードってどうやって指定するんでしょうか。
<meta http-equiv='Content-Type' content='text/html; charset=shift_jis' />を入れても解消しませんでした。
ファイルをUTF8で保存すると文字化けせず大丈夫なんですが任意の文字コードが使えないとちょっと。
0793名無し~3.EXE
垢版 |
2015/10/11(日) 16:33:07.95ID:jSwD0goV
ちょろっとやってみたらhtaのロード部分はなんの問題も無いみたいだね
問題はonload部分の文字コードがutf-8決め打ちで読み取られてる、と言う訳でscriptタグ部分にcharsetを指定してやればいい
"<script charset ='shift_jis' src='" + WScript.ScriptFullName + "'></script>
0794名無し~3.EXE
垢版 |
2015/10/30(金) 15:55:24.49ID:gAY/Xk4a
ホスト自作してchakraでスクリプティングとかの実例は無いんかのう。
0795名無し~3.EXE
垢版 |
2015/10/31(土) 23:17:18.36ID:PFgOQOh9
Set DW = CreateObject("DynamicWrapper")

とメモ帳に入力し、C\直下にDW.vbsで保存。コマンドプロンプトを管理者権限で起動し、
c:\windows\SysWOW64\cscript.exe DW.vbs
と実行すると、ActiveXコンポーネントはオブジェクトを作成できません。というエラーを吐く

何で?
Win7 64bit
0796名無し~3.EXE
垢版 |
2015/11/07(土) 07:57:35.87ID:coD8+8oH
会社に命じられてWindows7 64ビットに移行させられたんですけど、一部のvbsが動きません
32ビットのwscriptエンジンを使えばいいかなと思うのですが、
今まで通りダブルクリックやファイルをドロップする実行方法で32ビットのエンジンで実行する方法ありましたら教えてください

ファイルの関連付けを変える方法を試したのですがうまくいきませんでした
0797名無し~3.EXE
垢版 |
2015/11/07(土) 17:03:07.12ID:U4HN3Ay4
wshでADO.NET使えますか?
0798名無し~3.EXE
垢版 |
2015/11/08(日) 19:26:08.58ID:EuCvPNOS
>>796
レジストリいじっていいならregeditで
HKEY_CLASSESROOT\vbsfile\shell\open\commandに
C:\windows\SysWOW64\wscript.exe "%1" %*入れる

C:\Windows\System32\WScript.exe "%1" %*があったら上に変更
駄目だったら戻してね
0800796
垢版 |
2015/11/10(火) 22:41:08.95ID:HDYxoiSR
>>798
ありがとうございます。ひとまず動くようになったみたいです。本格稼働してみて何かあればまた相談させてください

>>799
なんか難しそうですね。動かないスクリプトの先頭行にこれを書けばいいのでしょうか
解読してみます
0801名無し~3.EXE
垢版 |
2015/11/14(土) 19:19:55.55ID:RNO50Lcc
横からだけど%*ってどういう意味だっけ
0802名無し~3.EXE
垢版 |
2015/11/15(日) 00:45:26.56ID:t8TVpiZ9
>>801
コマンドラインのパラメータ全部。

いつのまにかイテレータがうごくようになってるな。
0804名無し~3.EXE
垢版 |
2015/11/27(金) 07:18:59.11ID:dOr9jkTm
var a;
a = eval("[\"abc\",\"def\"]");
WScript.Echo(a[0]);
→abc
は実行出来るけど
var a;
a = eval("{\"abc\":\"def\"}");
WScript.Echo(a["abc"]);
はevalでエラーになります。これはどうにもならないのかな・・・
0806名無し~3.EXE
垢版 |
2015/11/27(金) 10:31:50.40ID:EYEBJY2Y
>>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で評価した時にハッシュとして正常に解釈される。

丸括弧によって「中身はオブジェクトです」という意思表示ができるのである。
0809804
垢版 |
2015/11/30(月) 07:37:01.15ID:cxJdiq6h
>>805-806
おぉ、出来ました。ありがとうございました
0810名無し~3.EXE
垢版 |
2015/12/05(土) 13:10:21.50ID:HCxkbB1B
ADODBのStreamで限定的ながらバイナリファイルを読み書き出来ますけど
裏技っぽい感じですしWSHが使えるすべてのWindowsで期待した動作をするのでしょうか?
この実装でバイナリファイルを正常に読めることを前提としたスクリプトの配布を
考えているのですがちょっと不安です
0811名無し~3.EXE
垢版 |
2015/12/05(土) 13:52:03.81ID:8/N/dh/l
>>810
多分大丈夫っぽいけど、書き方によってはセキュリティソフトの一部(Aviraとか)で誤検出されるので注意
0813名無し~3.EXE
垢版 |
2015/12/05(土) 21:39:57.73ID:TC+kSar6
むしろこれがないとバイナリ扱えないでしょ画像を扱えなくなる
裏技っぽいとか今更言われても困るわ
0814名無し~3.EXE
垢版 |
2015/12/05(土) 22:45:26.11ID:HCxkbB1B
ありがとう。大丈夫らしいとのことなのでとりあえず組んでみるかな・・・
あまりにも遅かったらRubyにしよう

>>812
読み込んだ値をテーブルで変換したりビット演算したりしないと
正しい値を得られない仕様を正攻法と呼ぶのは違和感があります
このために1byteずつしか読み込めませんし
0816名無し~3.EXE
垢版 |
2015/12/05(土) 23:23:02.80ID:8/N/dh/l
>>815
ADODBそのものじゃなくて、
iso-8859-1で1バイトずつテキストリードして変換する方法がイリーガルだと言ってるんだろう
0817名無し~3.EXE
垢版 |
2015/12/05(土) 23:31:52.89ID:8/N/dh/l
これは>>814のレス内容からの推測なので違ってるのかも知れない
jscriptだと勝手に思ったし、jscriptでも
wsfとかでvbscript連携して読むなり
Msxml2.DOMDocumentでhex文字列に変換するなり別の方法はあるとは思う
0818名無し~3.EXE
垢版 |
2015/12/06(日) 00:42:46.08ID:F68eazf1
VBScriptの記事だとこの辺か。
ttp://history-music.net/vbscript-base64-hex-binary/

ググると「iso-8859-1で...」みたいなページが多いから勘違いするのも仕方がないけど,
Microsoft.XMLDOMかMsxml2.DOMDocumentオブジェクト使って,
16進文字列とバイナリを相互変換する方がいいよ。
1byteずつなんて制限はないし,十分早いと思う。
0819名無し~3.EXE
垢版 |
2015/12/07(月) 17:51:14.07ID:vQfNZVDF
ごめん、変換とかいうはなしはどこから出てくるんだろう。
「バイナリファイルを正常に読めることを前提」とあるから
まあバイナリファイルを読んで何かするんだろうけど。
0820名無し~3.EXE
垢版 |
2015/12/07(月) 17:53:50.73ID:UNNqcniz
>>819
>>814に以下のようにあることからの推測さ

>読み込んだ値をテーブルで変換したりビット演算したりしないと
>正しい値を得られない仕様を正攻法と呼ぶのは違和感があります
>このために1byteずつしか読み込めませんし
0821名無し~3.EXE
垢版 |
2015/12/07(月) 17:57:55.04ID:vQfNZVDF
>>816
なるほど。、ADODB云々というより「JScriptでバイナリ操作をする」ということ自体のことを言ってるんだろうか。
たぶん。
0822名無し~3.EXE
垢版 |
2015/12/07(月) 18:05:05.11ID:vQfNZVDF
この辺の話か。なるほど。

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

前提条件/制約とのトレードオフだろうね。
「OSの素のままの状態でスクリプトだけで動く」必要があるならWSHでやるしかなかろう。
0823名無し~3.EXE
垢版 |
2015/12/07(月) 18:12:43.86ID:UNNqcniz
>>822
だから結論はそんな歪なことしないで>>818の言うようにしろってことさ
WSHだけって言っても、ADODB使うのならMsxml2.DOMDocumentも使っても同じことだろ
0825名無し~3.EXE
垢版 |
2015/12/10(木) 00:17:53.24ID:n+FmGR1Q
>>822
そのプログラムにはバグがあります。
ファイル終端付近に 0xBF があると,数バイトを読み落とします。
たとえば,半角カタカナで
クソミソ
とだけ書かれたファイルを dump.js に与えると,最初の1バイトしか出力されません。
0826810
垢版 |
2015/12/13(日) 20:21:45.77ID:E2f6+XvN
ありがとうございます。試していて大分かかりました

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

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



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

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



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

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



どちらもクロージャにした方が速いですね。
0828名無し~3.EXE
垢版 |
2015/12/21(月) 08:04:57.72ID:oIXUP+md
var fs = new ActiveXObject( "Scripting.FileSystemObject" );
fs.DeleteFile( "B:/VwCache/*.vch" );
fs = null;

これが該当ファイル無しのときエラー出なくしたい
こんなレベルの質問扱ってるスレ教えてください
0829名無し~3.EXE
垢版 |
2015/12/21(月) 08:58:20.76ID:9BHMYjvS
>>828
FileExistsでファイルがある場合に消す。
もしくは、on error resume nextでエラーを無視するとか。
0830名無し~3.EXE
垢版 |
2015/12/21(月) 15:26:06.84ID:tdjWLmvu
いやjscriptだろ
try 〜 catch(e)で囲むだろ
だけど、*.vchがファイル名を隠しているんじゃなく、
ワイルドカードで複数ファイル指定のつもりならダメだろ
0831名無し~3.EXE
垢版 |
2015/12/21(月) 15:30:35.86ID:tdjWLmvu
あ、ワイルカード使えるのか、知らんかった
0834名無し~3.EXE
垢版 |
2016/01/02(土) 02:41:57.72ID:8rznOPo8
JScriptで展開されていないコマンドライン文字列を取得することは出来ませんかね?
コマンドラインオプションを改変するラッパーを作りたいのですがWScript.Arguments
だと展開されて"が削除されていて再構成するのがかなり手間になってしまいます
0835名無し~3.EXE
垢版 |
2016/01/02(土) 18:34:26.41ID:J4AIyaR1
>>834
どうしても,というなら方法はないでもない。

WMIから自分自身のプロセスを見つけ出せば,
生のコマンドライン(Description)が得られるので,それを解析すればよい。
wsh WbemScripting.SWbemLocator Win32_Process
あたりをキーワードにググってください。
0836名無し~3.EXE
垢版 |
2016/01/05(火) 17:47:40.34ID:tW2wW1r9
>>835
面白そうなので試してみた
自プロセスを特定するのと引数から無効なものを除外しなくてはならないのがマイナス点

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

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

・引数からcscript.exeの引数を削除する
  例えば、 cscript xxx.js "a" 1 "b" //nologo "c"
  とかだと、//nologoは取り除かないといけない
0837834
垢版 |
2016/01/05(火) 21:10:05.30ID:MtYMuNGE
ありがとうございます。作っている途中で親となるプログラムが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);
0838名無し~3.EXE
垢版 |
2016/01/05(火) 21:41:47.92ID:tW2wW1r9
>>837
直接batを起動する場合はいいけど、コマンドプロンプトから起動するとダメですぜ
それにbatでいいなら、
@echo %*
の一行で終わる
0839834
垢版 |
2016/01/05(火) 22:43:02.46ID:MtYMuNGE
>>838
親となるプログラムは直接起動してくれるので問題ないです
コマンドプロンプトから起動する場合はcmd.exe /cを付ければ良いかと
実際には>>837の後ろで正規表現を使いコマンドラインオプションを
処理しているのでバッチファイルのみでは厳しいです
0840名無し~3.EXE
垢版 |
2016/01/11(月) 22:00:15.25ID:J7oSqT1d
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だけで回避する方法ありませんか?
0841名無し~3.EXE
垢版 |
2016/01/11(月) 23:36:21.38ID:kaus+mbm
>>840
上手くいくか判らないけどWMIで自プロセスのコマンドライン文字列を取得するのはどう?
WSHだとプロセスIDの取得が難しいので工夫する必要があるけど
0842840
垢版 |
2016/01/12(火) 00:23:54.95ID:zJG24SyX
>>841
>>834からのやり取りを読んだけど、自分にはまだ難しすぎる
0843名無し~3.EXE
垢版 |
2016/01/15(金) 14:05:01.93ID:1cRaToeH
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またはオブジェクトではありません」です。
よろしくお願いします。
0845名無し~3.EXE
垢版 |
2016/01/15(金) 20:07:12.70ID:2oeFgdaL
ちょっとは自分で調べようぜ、拾った物の使い回しで意味分かってないんだろうけど
原因はIE11からdocument.all等の独自APIが廃止されたから
そもそも今時allとかtagsとかつかわねーよ
0846名無し~3.EXE
垢版 |
2016/01/16(土) 20:44:38.70ID:4ar8fcff
>>842
主観だけどWindows上で動くスクリプト言語でUnicodeの引数は結構鬼門な印象がある
最近RubyでUnicodeな引数を受け取りたくなってRubyスレで聞きながら試したけど
WMIかWin32APIでコマンドライン文字列を取得するくらいしか手は見つからなかった
スクリプトエンジンだけではなくcmd.exeとの絡みもあるので使える選択肢は少ないと思う

>>837の方法が嫌ならWMIから取得するしかないんじゃないかなと個人的には思う
0847843
垢版 |
2016/01/20(水) 19:33:11.23ID:FcdOnjAY
>>844>>845
遅れましたがお答えありがとうございました
エラーが出ていた箇所をこれにして動くようになりました
IE.Document.forms(0).getElementsByTagName("input")[2].click();
0848名無し~3.EXE
垢版 |
2016/02/04(木) 19:41:28.05ID:WGr+Whcp
jsにデストラクタってないの?
ラップしたエクセルの終了処理をやらせたいんだが
0849名無し~3.EXE
垢版 |
2016/02/04(木) 23:22:04.84ID:pXBj/cEo
>>848
VBSでいう Set objExcel = Nothing 相当の処置のこと?
JSだと objExcel = null; でいいみたい。
0850名無し~3.EXE
垢版 |
2016/02/04(木) 23:34:03.33ID:z164XvtZ
>>849
Class ExcelWrapper
Private Sub Class_Terminate
' VBSでいうならこれ
End Sub
End Class

jsの言語仕様としては無いんだろうけどなんかトリック的に実現する方法はないんか
0851名無し~3.EXE
垢版 |
2016/02/05(金) 08:00:12.79ID:gYQ45IAX
>>848
OLEで起動したExcelがスクリプトが終了するまで終了してくれないという話?
0852名無し~3.EXE
垢版 |
2016/02/05(金) 18:33:52.63ID:YVp5K4JV
>>851
どこからも参照されなくなったら、メンバのExcel.ApplicationをQuitするようなオブジェクトを作れるかって話
やっぱり無理くさいな(´・ω・`)
0853名無し~3.EXE
垢版 |
2016/02/05(金) 18:52:01.85ID:ZPb/lDba
finallyでEXCELの終了処理でいいんじゃないの、それともフックの解放とかそういう意味なの
0854名無し~3.EXE
垢版 |
2016/02/05(金) 18:56:57.56ID:YVp5K4JV
>>853
finallyとか面倒くさい。オブジェクトにやらせたい
newしたらエクセルが立ち上がり、変数がスコープから外れたら自動的ににエクセルが終わるようにしたい
フックの解放っていうのはよくわからん(´・ω・`)
0855名無し~3.EXE
垢版 |
2016/02/05(金) 22:48:20.11ID:0wOAx0Cl
無いものねだっているようにしか見えないんだが
WSHに限らずGCを持つ言語でデストラクタが
あるのってほとんど無くね?
ファイナライザを持つ言語ならそれなりにあるみたいだけど
これは実行される保証がないしな
0856名無し~3.EXE
垢版 |
2016/02/05(金) 23:06:43.00ID:qE3E4htL
結論は、無いものは諦めて、newした者が責任を持って解放する
0857名無し~3.EXE
垢版 |
2016/02/06(土) 00:30:26.79ID:RaAe5E/b
ふぁっく(´・ω・`)
0858名無し~3.EXE
垢版 |
2016/02/09(火) 06:40:42.12ID:lLVVtK0e
(new ActiveXObject("Scripting.FileSystemObject")).DeleteFile(WScript.ScriptFullName,true);

みたいにやったら自分自身のファイルを削除できますが
実行開始された後はファイルがどうなろうが問題ないと考えていいでしょうか?
0859名無し~3.EXE
垢版 |
2016/02/09(火) 21:45:46.64ID:4bXYgicd
>>858
捨てスクリプトファイル作って試してみればいいじゃない
0860名無し~3.EXE
垢版 |
2016/02/10(水) 06:37:45.67ID:t7gHrzUx
やってみた限りは問題なさそうなのですが
絶対に問題がないと言えるのか?と思いまして
0861名無し~3.EXE
垢版 |
2016/02/10(水) 07:50:58.34ID:t7gHrzUx
アクティブなウインドウを判定して、
キーを送りたいアプリがアクティブならキーを送る、ということをしたいと思い
探していたのですが
http://stackoverflow.com/questions/26341753/how-to-find-the-window-title-of-activeforeground-window-using-window-script-ho
ここを見ると、WSHでは出来ないというようなことが書いてありました
出来て当たり前の簡単な処理だと思うのですが、本当に出来ないのでしょうか?
0862名無し~3.EXE
垢版 |
2016/02/10(水) 11:57:56.00ID:9GMi27N7
WSHで出来なければ出来る言語でやればいいだけ
こんな所でゴネてないで自分の不勉強を猛省しろ
0863名無し~3.EXE
垢版 |
2016/02/10(水) 13:12:04.28ID:t7gHrzUx
WSHのいいところは簡単に使えるところなので
わざわざたとえばCを使わないといけないとなると本末転倒なのですよ
どう考えても実装も難しくもない、あって当たり前の機能ですよね
本当にないのかどうかは知りませんが
0864名無し~3.EXE
垢版 |
2016/02/10(水) 14:06:37.17ID:HysS88Z6
>どう考えても実装も難しくもない、あって当たり前の機能

だったらそーゆー機能があるCOMを自分で実装して
それをWSHから呼び出せばいい
難しくないんでしょ?
0865名無し~3.EXE
垢版 |
2016/02/10(水) 14:50:28.68ID:t7gHrzUx
いや、逆に難しいと思うんですか?
考えたら分かりますがめちゃくちゃ簡単ですよね?
「面倒くさい」と「難しい」は違うのです
分かりますね?
0866名無し~3.EXE
垢版 |
2016/02/10(水) 16:18:49.46ID:9GMi27N7
いくら煽っても「ほら出来るやん」なんて誰も調べてくれないしやってくれないよ
0867名無し~3.EXE
垢版 |
2016/02/10(水) 18:27:12.59ID:CIhAnhaS
>>861
そんな事やろうと思ったことないし
「出来て当たり前」「あって当たり前」とか言われても違和感しかない
0868名無し~3.EXE
垢版 |
2016/02/11(木) 03:13:32.67ID:co5P5jGL
そもそもwshの組み込み機能とは違い、COMの作り方次第になってくるんだから
そういうCOMを作るか探すかすればいい
WIN APIを呼び出すCOMなんてのも世の中には幾つかあるぞ
0869名無し~3.EXE
垢版 |
2016/02/12(金) 09:42:04.77ID:w4vWZ7y9
windowキーは^{ESC}で送れると分かったのですが
windowキーを修飾キーとして使う場合はどう書けばいいですか?
0870名無し~3.EXE
垢版 |
2016/02/12(金) 11:40:40.49ID:w4vWZ7y9
var result = GetObject("winmgmts:\\\\.\\root\\cimv2").
ExecQuery("Select * from Win32_Process where Name='hoge.exe'")

みたいな方法で返ってきたオブジェクトから
一つ目のアイテムを取得するにはどうすればいいですか?
ネットで探すと、
var list = new Enumerator(result);
みたいな形でEnumeratorに変換してから回すのが普通のようですが
結果が一つと分かっている時にこのやり方をするのは気持ち悪いです
0871名無し~3.EXE
垢版 |
2016/02/12(金) 12:15:22.45ID:1hkdGDkD
>>869
Windowsキー自体は多分送信できない
^({ESC})は、CTRL+ESCの送信であって、「スタートメニューを開く」という機能になる
結果はWindowsキーと同じ「スタートメニューを開く」という動作をするだけだと思う

>>870
配列等へのアクセスと異なり、COMのコレクションへの唯一のアクセス方法が
Enumeratorなので他の方法は無いと思われる
(VBSを呼び出してfor eachを使うと言うのは無しの方向で)
0872名無し~3.EXE
垢版 |
2016/02/12(金) 14:47:51.21ID:w4vWZ7y9
>>871
むーん、そうですか
ありがとうございます
0873名無し~3.EXE
垢版 |
2016/02/12(金) 19:11:38.98ID:Ax0/YVze
関数でラップしなさいよ
0874名無し~3.EXE
垢版 |
2016/02/12(金) 21:58:43.39ID:CAT/93Hm
>>870
Vista以降ならItemIndexメソッドが使える
XPならEnumeratorで頑張れ

GetObject("winmgmts://").ExecQuery("Select * from Win32_Process where Name='hoge.exe'").ItemIndex(0)
0876名無し~3.EXE
垢版 |
2016/02/21(日) 12:12:25.97ID:14Rd5RPG
やや亀レスだが,全部まとめて AutoItX をインストールというかdllを登録すればできる。
http://blog.livedoor.jp/blackcode/archives/1795724.html


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

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

>>869 は AutoItX の Send('{LWIN}') か Send('{RWIN}') を使え。
0877名無し~3.EXE
垢版 |
2016/02/22(月) 21:04:18.77ID:jrwG3GCh
WSHのメリットってWindows標準である事だと思う
オートメーションサーバーを持ち込むくらいならRubyなりPythonなりを
持ち込んで利用した方がより効率的に開発・実装出来るのでは
0878名無し~3.EXE
垢版 |
2016/02/22(月) 22:34:35.27ID:QBaH99ha
>>877
Pythonだけではできないから Sikuli や WebDriver や AutoItX があるわけなのだが
0879名無し~3.EXE
垢版 |
2016/03/01(火) 09:01:36.69ID:iP3HRupc
エンジニアのモチベーションを下げる方法
ttp://d.hatena.ne.jp/jflute/touch/20160221/downmoti

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

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

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

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

実際に、難しい画面を頑張って速く作り上げたエンジニアに、
「あー簡単そうな画面だったもんね、じゃあすぐ次これ作って」
と、軽くあしらってあげると効果が相当高いです。
0880名無し~3.EXE
垢版 |
2016/03/20(日) 17:58:54.66ID:ftoiXc16
WScript.CreateObject("InternetExplorer.Application")
を利用してIEの自動操縦をしています
win10へのアップグレードを考えていたのですが
この手のスクリプトはwindows10で動くのでしょうか?
0882名無し~3.EXE
垢版 |
2016/04/26(火) 02:43:57.89ID:xrGaHN5D
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"));});

とりあえずアイディアを形にしただけなんでカスタムして使ってくれ(´・ω・`)
0883名無し~3.EXE
垢版 |
2016/05/20(金) 01:19:03.63ID:LoMnSF9C
エクセルのマクロをVBAやVB以外の言語で使いたいのですがWSHというのでJavaScriptを使うくらいしかないですか?
なんか難しそうなので扱えるかはわからないですが
0884名無し~3.EXE
垢版 |
2016/05/21(土) 07:18:01.83ID:KwoUOh5H
VBA使えるならVBScriptはほぼ同じ
0886名無し~3.EXE
垢版 |
2016/05/23(月) 19:28:44.88ID:OI4UmGVD
Win10 64-bit で、WSCの登録を、
64-bitで行えば、32-bitアプリから起動したスクリプトで使えず、
32-bitで行えば、64-bitアプリから起動したスクリプトで使えず。
後から登録したほうだけが有効になる。
どうしたものか。
0887名無し~3.EXE
垢版 |
2016/05/25(水) 13:06:05.60ID:p984sqbS
どっちかに統一してwscriptなりのパスを絶対パス指定すりゃいいんじゃないの
今後bit幅判定は避けて通れないだろうし
0888名無し~3.EXE
垢版 |
2016/05/25(水) 17:08:32.50ID:LNEVb08i
32bit(64bit)で起動されたかを判断し違ってたら起動し直すってのは検索すれば出てくるので、
WSCをどっちかでのみ処置するようにするか、両方で別々に32bit用、64bit用の両方登録するかとか
0889名無し~3.EXE
垢版 |
2016/05/26(木) 01:13:50.51ID:c8sEm+SQ
JScriptでreplaceによる正規表現の置換で、
置換後文字列にキャプチャ文字列参照の特殊変数とその直後に数字を書きたい場合
どのように書けばいいですか?
例えば、$1で参照した文字列の直後に0を書きたいとかで
"$10"とやると、10番目のキャプチャ文字列の参照になっちゃう
他環境だと、"${1}0"と書けるみたいだがWSHでは参照にならない
0891名無し~3.EXE
垢版 |
2016/05/26(木) 18:15:27.58ID:c8sEm+SQ
>>890
thx!

でも何でJScript(JavaScriptも同様だが)ってPerlとかと合わせなかったんだろう
鬼車やPerlだとこの記述じゃダメなんだよね、ややこしい
0893名無し~3.EXE
垢版 |
2016/05/28(土) 16:48:01.65ID:8bw60KMu
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
0894名無し~3.EXE
垢版 |
2016/06/20(月) 19:48:39.36ID:r7gHHjMI
おいぽまいら教えろ下さい、dotnetのライブラリを叩く際にだね

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

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

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

ちなみにSystem.Randomだとこうなるみたい
Next()→Next()
Next(Int32)→Next_3(Int32)
Next(Int32, Int32)→Next_2(Int32, Int32)
0897名無し~3.EXE
垢版 |
2016/07/18(月) 13:49:40.77ID:FluRcm0P
すみません、全くの素人です。

アプリのアプリケーションキーの「(T)」を出力するだけのファイルを作りたいです。
どう書いたらいいですか。
0898名無し~3.EXE
垢版 |
2016/07/18(月) 14:58:15.83ID:FluRcm0P
自己解決

Set objShell = WScript.CreateObject("WScript.Shell")
WScript.Sleep 50
objShell.SendKeys "%(T)"
0899名無し~3.EXE
垢版 |
2016/07/20(水) 11:55:20.08ID:XFWp37Gp
vbsを使って社内システムへの自動ログイン処理をしたいと思っています。

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

どうも信頼済みサイトに登録されていることが原因というようなwebの記載を見つけました。
この場合は回避策はないのでしょうか。
0900名無し~3.EXE
垢版 |
2016/08/15(月) 00:25:29.97ID:TKUFVv53
クリップボードを加工する処理を書いています
内部はユニコードなので
SJISの範囲を越えた文字がクリップボードに入っていることがあります
それをEchoで表示させてみたりしても普通に表示されますし
文字列の結合をしても特に問題ないようです
しかしソースコードがSJISなので、
その文字に関する処理をソースコードの中に書けません
こういう場合どうするのがいいでしょうか?
クリップボードへのアクセスをUTF-8に出来たら
コードもUTF-8に出来るのですが、この処理はSJIS決め打ちですよね?
0901名無し~3.EXE
垢版 |
2016/08/15(月) 01:25:58.62ID:ikN7gcf7
>>900
案1:スクリプトをunicodeで書く。
案2JScript:SJISに無い文字は String.fromCharCode(code1, code2, ...) を使う。
案3VBScript:SJISに無い文字は ChrW(code) を使う。
0902名無し~3.EXE
垢版 |
2016/08/15(月) 02:20:04.30ID:TKUFVv53
>>901
ありがとうございます
案2で行きました
0903名無し~3.EXE
垢版 |
2016/08/28(日) 13:24:08.21ID:F3dIMYRn
// 以下のような例で * が消えてしまうのはなぜでしょうか? バグ?
var FS = WScript.CreateObject('Scripting.FileSystemObject');
WScript.Echo(FS.GetAbsolutePathName('C:\\Windo*'));// → C:\Windo*
WScript.Echo(FS.GetAbsolutePathName('C:\\Window*'));// → C:\Windows …なぜ?
WScript.Echo(FS.GetAbsolutePathName('C:\\Windows*'));// → C:\Windows*
0905名無し~3.EXE
垢版 |
2016/08/28(日) 22:43:27.34ID:Kf2zaCfx
*が1文字のワイルドカードとして使えるということかね。
0906名無し~3.EXE
垢版 |
2016/09/20(火) 18:40:36.65ID:sx0yUGEz
2016/9/1 jscript.dll がwindows updateされたせいで
今までいけていた win7/32bit(@職場)/wsh(jscript)で
エラーが多発するのは俺だけ?
0908名無し~3.EXE
垢版 |
2016/09/20(火) 21:20:41.02ID:SISECv8l
まずそのエラーを書かない事には何とも
0909906
垢版 |
2016/09/22(木) 00:14:32.72ID:rDMTp48z
そうですよね。失礼しました。

こちらも、職場でのエラーメッセージまで覚えていないので
解決はあきらめて、情報をカキコだけしますが。

エクセルでInputBoxを使うやつで、
変数のvar 宣言が厳密?になったような印象で
動くやつとエラーで動かないやつとInputBoxが出ないパターンあるような。

var objXL = WScript.CreateObject("Excel.Application");
var fs = WScript.CreateObject("Scripting.FileSystemObject");
var f = fs.GetFolder("\\\\file01\\○○課\\....\\Afoldername");
var folderlist = "";
//すべてのサブフォルダ
var subfc = new Enumerator(f.SubFolders);
for(; !subfc.atEnd(); subfc.moveNext())
if ( ((subfc.item().Name+"").indexOf("e"))==-1 ) folderlist += subfc.item().Name + "\r\n" ;
var strRet = objXL.InputBox(folderlist, "選択", "otamesi");
objXL.Quit();
のたぐいのやつです。

こんなことがあったということで。
0910名無し~3.EXE
垢版 |
2016/09/28(水) 07:10:47.91ID:f6JqvkoF
Windows7にて、管理者権限(High)で起動しているプログラムから、
別のプログラムを標準ユーザー権限(Medium)で実行する方法はないでしょうか?
具体的には、
管理者権限で常駐しているAutoHotkeyから、
標準ユーザー権限でWSHスクリプトを起動したいと考えています。

管理者昇格で実行する方法は検索すれば出てくるのですか、
その逆は見つからなくて・・・

ログオンスクリプトから実行されたプログラムも
全部管理者権限になってしまいます。
これも解決したいと思っています。
0911名無し~3.EXE
垢版 |
2016/09/28(水) 09:32:39.60ID:s4DNr100
runas 使うとかじゃダメ?
0912名無し~3.EXE
垢版 |
2016/09/28(水) 15:53:59.78ID:nx81DFKK
「管理者として実行」されたコマンドラインから、「標準ユーザとして実行」する。
ttp://scripting.cocolog-nifty.com/blog/2010/01/post-5259.html
0913名無し~3.EXE
垢版 |
2016/09/28(水) 18:43:38.23ID:f6JqvkoF
>>912
ありがとうございます!まさにこれです。
しかしタスクから実行とは・・・
やっぱり降格実行って、すんなりには出来ないんですね

>>911
それは多分、ShellExecuteを使った昇格(Middle→High)のやり方だと。
WSHでは、Runでも、Execでも、ShellExecute でも
降格で実行する方法はありませんでした(探せませんでした)
0914名無し~3.EXE
垢版 |
2016/09/29(木) 00:25:50.89ID:bbWzxn0/
>>913
> >>911
> それは多分、ShellExecuteを使った昇格(Middle→High)のやり方だと。
コマンドラインのことじゃないの?
試したことないから実際できるかは知らないけど
0915名無し~3.EXE
垢版 |
2016/09/29(木) 21:34:09.19ID:QE0CrBwY
CreateObject("Shell.Application").ShellExecute("hoge.exe", "", "", "runasuser")

>>912と違ってユーザー名とパスワードを入力する必要があるのが面倒
0916名無し~3.EXE
垢版 |
2016/09/30(金) 07:05:04.86ID:DKhen0Tu
>>915
> CreateObject("Shell.Application").ShellExecute("hoge.exe", "", "", "runasuser")

おお、runasuser という引数で可能だったのですね。
今まで知りませんでした。ありがとうございます。
確かにユーザとパスの入力にはリスクがありますし、配布には不向きですが、
場合によって使えそうです。
0917名無し~3.EXE
垢版 |
2016/09/30(金) 11:04:40.80ID:MzJ4FbY1
>>913
解決しているようですが、>>911 は RunAs.exe を使うことを意味していたつもりでした。
0918名無し~3.EXE
垢版 |
2016/10/01(土) 21:18:50.03ID:z3fhfQ4h
>>917
ありがとうございます。
runas.exeという存在も知りませんでした・・・。
確かにこの方法でも、/userをAdmin以外に指定すれば、
High→Mediumの降格は可能みたいですね!
でもやはり、userとpassまで入力するのがネックですね。
むしろこっちが当たり前で、912の方法はかなり特殊な方法でしょうか。
0919名無し~3.EXE
垢版 |
2016/10/02(日) 14:05:33.18ID:ssU5pWdi
runasに/savecredオプションを付けるとパスワードが保存されるから
2回目以降はパスワードを入力しなくてよくなる

psexecってツールならユーザー名とパスワードをオプション引数で指定できるから毎回手打ちする必要は無くなる
https://technet.microsoft.com/ja-jp/sysinternals/bb897553.aspx

もちろんそれぞれデメリットもあるからご利用は計画的に
0920名無し~3.EXE
垢版 |
2016/10/20(木) 14:58:50.51ID:u2LLUbWG
えと、Windows7環境で質問です。

あるアプリが起動している間は、スリープに入らないって
設定ができるでしょうか?
ファイルメーカーなんですが、スリープしちゃうとネット
ワークが切れちゃって再起動しなくてはならないんで。
0921名無し~3.EXE
垢版 |
2016/11/10(木) 23:44:30.12ID:JhfwFP09
>>920

5分ごとにShiftを押す。じゃダメ?ctrl+Cで終了。

Set objShell = WScript.CreateObject("WScript.Shell")
Do
WScript.Sleep 1000*60*5
objShell.SendKeys "+"
Loop

メディアプレイヤーをずっと再生しておくっていう手もあるらしい。
0923名無し~3.EXE
垢版 |
2016/12/12(月) 21:47:31.56ID:r+Fb96AV
超亀レスだがShiftじゃキー入力の妨げになるでしょ
マウスの空MOVEを定期的に送るのが常套手段
もろちんwshだけでやる方法はない
0924名無し~3.EXE
垢版 |
2016/12/25(日) 00:05:54.11ID:HRoYEPWv
/*
cscript.exe //nologo 特定プロセス実行中のスリープを抑止.js

副作用無しの SendKeys(
0925名無し~3.EXE
垢版 |
2016/12/25(日) 00:23:26.11ID:HRoYEPWv
Shiftの代わりにPRTSC(キャプチャ効果無し)を送ってもスリープを抑止できるようだ
0926924
垢版 |
2016/12/29(木) 22:26:32.94ID:dAnL9MtL
先日何故か書き込みが途切れたので再書き込み

var exeName = "notepad.exe";
var interval = 60;
var oShell = WScript.CreateObject("WScript.Shell");
var objWMIService = GetObject("winmgmts://./root/cimv2");
while(true){
if(!new Enumerator(objWMIService.ExecQuery("select Name from Win32_Process where Name='" + exeName + "'")).atEnd())
oShell.SendKeys("{PRTSC}");
WScript.Sleep(1000 * interval);
}

WMIって面白い
0927名無し~3.EXE
垢版 |
2017/03/11(土) 22:14:40.13ID:+HikkRSv
JScriptで再帰的なマッチを高速に行う方法ってありませんかね?
A(B(C(3),"a"),"$")
みたいな文字列を
({<3>,"a"},"$")
みたいにしたいです。Rubyみたいに再帰処理に対応した正規表現を
持っていれば対応する括弧をマッチさせることが出来ますが・・・
0928名無し~3.EXE
垢版 |
2017/05/11(木) 19:46:31.75ID:MLlLpRGo
2017.5.15に今どき、wshの本の改訂版が今ごろ出版されるとか。
0929名無し~3.EXE
垢版 |
2017/06/29(木) 16:33:55.92ID:AAx8eHDl
>>886の件、
レジストリのCLSID(classid)を、登録した方から登録してない方へコピーするか、
wscファイルの中でCLSIDを指定しておけば、両方で使えた。

思うに、レジストリ上では、ProgID(COMコンポーネントID)は64/32bitで共通なのに対し、
CLSIDは64/32bitそれぞれで登録されているところ、
CLSIDはwsc登録時にランダムで生成されるため、
後から登録した方でProgIDのCLSID情報が異なる値で上書きされてしまい、
先に登録した方はProgIDから元々CLSIDにたどり着けなくなってしまった、
ということなのかなと。

なので、CLSIDが64/32bitで同じになるようにしてやればよいと。
0930名無し~3.EXE
垢版 |
2017/07/18(火) 13:58:28.60ID:W4IZXMNS
関数呼び出し、ネスト2,3回位が限界なのかな。
変なところで戻ってくる。

使えない野郎だ、くっそマイクロソフトw
0931名無し~3.EXE
垢版 |
2017/09/02(土) 18:09:03.77ID:/D3h/gh4
今更javascriptの学習兼ねてjscript勉強中
inputboxとmsgboxが64bit環境で呼び出せないのが割と辛いね
powershellだとC#埋め込んだりフォーム使い放題なんだよなー

↑スリープ抑止はC/C++/C#でさくっと空SendInput呼んだ方が楽だよ
0932名無し~3.EXE
垢版 |
2017/09/25(月) 23:32:59.00ID:6nblRiV8
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder("C:\Logs")
Wscript.Echo objFolder.Size
 →これでC:\Logsのフォルダサイズが取得できるのに

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder("C:\Program Files")
Wscript.Echo objFolder.Size
 →同じスクリプトでC:\Program Filesのサイズが取得できない

なぜなんだぜ? 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
0933名無し~3.EXE
垢版 |
2017/09/26(火) 02:12:19.86ID:RcmZZAIw
管理者権限で実行しても "C:\Program Files\Windows NT" に含まれるジャンクションにアクセス失敗してエラーになるみたい
0934名無し~3.EXE
垢版 |
2017/09/26(火) 21:58:19.45ID:W9uZsk3X
情報ありがとう
こちらでも昨夜というか今朝まで調べて
配下にリバースポイントが含まれるフォルダは
(普通の方法では)サイズの取得ができないとわかったよ

Program Files配下の全フォルダを抽出して
ひとつずつ再帰的にサイズ取得して合計するという案もあったけど
その中にはサイズが取得できないフォルダがあるから
合計したところで数値が合わないんだよね
0935名無し~3.EXE
垢版 |
2017/09/26(火) 22:00:02.58ID:W9uZsk3X
仕方ないのでバッチファイルで
dir "C:\Program Files" /s /a-d | find "個のファイル" > hoge.txt
ってやって、ファイル末尾の1行を取得する事にしたわ
これだと一応、フォルダのプロパティで見たのと同じ値が取得できる
もはやスクリプトじゃなくなっちまったけども
0936名無し~3.EXE
垢版 |
2017/09/26(火) 22:16:48.97ID:tsUdupnX
重箱の隅をつつくようであれだが、リパースポイントな。リバースじゃなく。
0937名無し~3.EXE
垢版 |
2017/12/12(火) 09:06:04.43ID:q0vNjYcg
wshで数万行クラスの巨大スクリプト書く人いるかな?

自分で使うちょっとした自動処理ならわずか数行〜数十行程度で済むが、他人にあげることを
想定したものならファイルパス等のハードコードは絶対に避けてコマンドライン引数やXML形式の
設定ファイルから指定させる等汎用性を高めたり、きちんとエラー対策をとったり等、れっきとした
「アプリ」として「開発」するため余裕で数千〜数万行に達してしまう。
0938名無し~3.EXE
垢版 |
2017/12/12(火) 11:04:42.32ID:/U3t7lMx
自分で使う自動処理が拡張に拡張重ねて数万行クラスになったのはあるよ
0939名無し~3.EXE
垢版 |
2017/12/12(火) 11:13:16.48ID:Wr10bU9d
数万行もあるスクリプトを貰っても持て余すなあ
もっと機能を絞って分割するなりして欲しいもんだ
0940名無し~3.EXE
垢版 |
2017/12/12(火) 20:43:33.07ID:jyIq4w4s
せいぜい数百から一千行程度に小分けしたスクリプト50本くらいを
ひとつのフォルダに入れて連携させてるよ
小分けしとくと色々使い回しがきいてラクだわ
0941名無し~3.EXE
垢版 |
2017/12/12(火) 21:53:43.20ID:qOP7vFik
>>937
> 余裕で数千〜数万行に達してしまう

ScriptControlで動的にWSHのソースを読み込んで実行するタイプなら普通
0942名無し~3.EXE
垢版 |
2017/12/13(水) 14:27:28.65ID:KehnvMoz
特に、Classの継承機能のないVBScriptで無理やりオブジェクト指向な
コードを書こうとして、似たような構造のClassを作るため親Classを
コピペしてちょっと改造するって手法を繰り返してたら、
あっという間に数千行に達してしまう
0943名無し~3.EXE
垢版 |
2017/12/14(木) 12:08:32.08ID:bq3yY9Fc
それはあるね。コピペ部分が結構多くて行数だけインフレしてる感じ
0944名無し~3.EXE
垢版 |
2017/12/19(火) 12:46:08.14ID:uzBHC9yI
友達がWindowsで稼げている情報など。ニュースというか参考までに。
⇒ http://kuchibeta.sblo.jp/article/181868190.html

興味がある方のために書きました。

M60W6DP7X5
レス数が900を超えています。1000を超えると表示できなくなるよ。

ニューススポーツなんでも実況