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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

900 :名無し~3.EXE:2016/08/15(月) 00:25:29.97 ID:TKUFVv53.net
クリップボードを加工する処理を書いています
内部はユニコードなので
SJISの範囲を越えた文字がクリップボードに入っていることがあります
それをEchoで表示させてみたりしても普通に表示されますし
文字列の結合をしても特に問題ないようです
しかしソースコードがSJISなので、
その文字に関する処理をソースコードの中に書けません
こういう場合どうするのがいいでしょうか?
クリップボードへのアクセスをUTF-8に出来たら
コードもUTF-8に出来るのですが、この処理はSJIS決め打ちですよね?

901 :名無し~3.EXE:2016/08/15(月) 01:25:58.62 ID:ikN7gcf7.net
>>900
案1:スクリプトをunicodeで書く。
案2JScript:SJISに無い文字は String.fromCharCode(code1, code2, ...) を使う。
案3VBScript:SJISに無い文字は ChrW(code) を使う。

902 :名無し~3.EXE:2016/08/15(月) 02:20:04.30 ID:TKUFVv53.net
>>901
ありがとうございます
案2で行きました

903 :名無し~3.EXE:2016/08/28(日) 13:24:08.21 ID:F3dIMYRn.net
// 以下のような例で * が消えてしまうのはなぜでしょうか? バグ?
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*

904 :名無し~3.EXE:2016/08/28(日) 14:14:26.23 ID:RFOn9Wqp.net


905 :名無し~3.EXE:2016/08/28(日) 22:43:27.34 ID:Kf2zaCfx.net
*が1文字のワイルドカードとして使えるということかね。

906 :名無し~3.EXE:2016/09/20(火) 18:40:36.65 ID:sx0yUGEz.net
2016/9/1 jscript.dll がwindows updateされたせいで
今までいけていた win7/32bit(@職場)/wsh(jscript)で
エラーが多発するのは俺だけ?

907 :名無し~3.EXE:2016/09/20(火) 19:13:25.75 ID:oUfFAkCw.net
うん

908 :名無し~3.EXE:2016/09/20(火) 21:20:41.02 ID:SISECv8l.net
まずそのエラーを書かない事には何とも

909 :906:2016/09/22(木) 00:14:32.72 ID:rDMTp48z.net
そうですよね。失礼しました。

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

エクセルで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();
のたぐいのやつです。

こんなことがあったということで。

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

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

ログオンスクリプトから実行されたプログラムも
全部管理者権限になってしまいます。
これも解決したいと思っています。

911 :名無し~3.EXE:2016/09/28(水) 09:32:39.60 ID:s4DNr100.net
runas 使うとかじゃダメ?

912 :名無し~3.EXE:2016/09/28(水) 15:53:59.78 ID:nx81DFKK.net
「管理者として実行」されたコマンドラインから、「標準ユーザとして実行」する。
ttp://scripting.cocolog-nifty.com/blog/2010/01/post-5259.html

913 :名無し~3.EXE:2016/09/28(水) 18:43:38.23 ID:f6JqvkoF.net
>>912
ありがとうございます!まさにこれです。
しかしタスクから実行とは・・・
やっぱり降格実行って、すんなりには出来ないんですね

>>911
それは多分、ShellExecuteを使った昇格(Middle→High)のやり方だと。
WSHでは、Runでも、Execでも、ShellExecute でも
降格で実行する方法はありませんでした(探せませんでした)

914 :名無し~3.EXE:2016/09/29(木) 00:25:50.89 ID:bbWzxn0/.net
>>913
> >>911
> それは多分、ShellExecuteを使った昇格(Middle→High)のやり方だと。
コマンドラインのことじゃないの?
試したことないから実際できるかは知らないけど

915 :名無し~3.EXE:2016/09/29(木) 21:34:09.19 ID:QE0CrBwY.net
CreateObject("Shell.Application").ShellExecute("hoge.exe", "", "", "runasuser")

>>912と違ってユーザー名とパスワードを入力する必要があるのが面倒

916 :名無し~3.EXE:2016/09/30(金) 07:05:04.86 ID:DKhen0Tu.net
>>915
> CreateObject("Shell.Application").ShellExecute("hoge.exe", "", "", "runasuser")

おお、runasuser という引数で可能だったのですね。
今まで知りませんでした。ありがとうございます。
確かにユーザとパスの入力にはリスクがありますし、配布には不向きですが、
場合によって使えそうです。

917 :名無し~3.EXE:2016/09/30(金) 11:04:40.80 ID:MzJ4FbY1.net
>>913
解決しているようですが、>>911 は RunAs.exe を使うことを意味していたつもりでした。

918 :名無し~3.EXE:2016/10/01(土) 21:18:50.03 ID:z3fhfQ4h.net
>>917
ありがとうございます。
runas.exeという存在も知りませんでした・・・。
確かにこの方法でも、/userをAdmin以外に指定すれば、
High→Mediumの降格は可能みたいですね!
でもやはり、userとpassまで入力するのがネックですね。
むしろこっちが当たり前で、912の方法はかなり特殊な方法でしょうか。

919 :名無し~3.EXE:2016/10/02(日) 14:05:33.18 ID:ssU5pWdi.net
runasに/savecredオプションを付けるとパスワードが保存されるから
2回目以降はパスワードを入力しなくてよくなる

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

もちろんそれぞれデメリットもあるからご利用は計画的に

920 :名無し~3.EXE:2016/10/20(木) 14:58:50.51 ID:u2LLUbWG.net
えと、Windows7環境で質問です。

あるアプリが起動している間は、スリープに入らないって
設定ができるでしょうか?
ファイルメーカーなんですが、スリープしちゃうとネット
ワークが切れちゃって再起動しなくてはならないんで。

921 :名無し~3.EXE:2016/11/10(木) 23:44:30.12 ID:JhfwFP09.net
>>920

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

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

メディアプレイヤーをずっと再生しておくっていう手もあるらしい。

922 :名無し~3.EXE:2016/11/11(金) 00:16:12.92 ID:6spaSBwY.net
thx

923 :名無し~3.EXE:2016/11/30(水) 05:52:14.36 ID:Slt35OHFj
選択したファイルをD&Dで処理するバッチを作っているのですが、コマンドラインが長すぎるとエラーが出てしまいます。
今は処理するものをコピーしてエディタに貼り付け、テキストでフルパスのリストを作って処理させているのですが、
直接DropFileListをクリップボードから得て処理させられないでしょうか?

924 :名無し~3.EXE:2016/12/12(月) 21:47:31.56 ID:r+Fb96AV.net
超亀レスだがShiftじゃキー入力の妨げになるでしょ
マウスの空MOVEを定期的に送るのが常套手段
もろちんwshだけでやる方法はない

925 :名無し~3.EXE:2016/12/25(日) 00:05:54.11 ID:HRoYEPWv.net
/*
cscript.exe //nologo 特定プロセス実行中のスリープを抑止.js

副作用無しの SendKeys(

926 :名無し~3.EXE:2016/12/25(日) 00:23:26.11 ID:HRoYEPWv.net
Shiftの代わりにPRTSC(キャプチャ効果無し)を送ってもスリープを抑止できるようだ

927 :924:2016/12/29(木) 22:26:32.94 ID:dAnL9MtL.net
先日何故か書き込みが途切れたので再書き込み

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って面白い

928 :名無し~3.EXE:2017/03/11(土) 22:14:40.13 ID:+HikkRSv.net
JScriptで再帰的なマッチを高速に行う方法ってありませんかね?
A(B(C(3),"a"),"$")
みたいな文字列を
({<3>,"a"},"$")
みたいにしたいです。Rubyみたいに再帰処理に対応した正規表現を
持っていれば対応する括弧をマッチさせることが出来ますが・・・

929 :名無し~3.EXE:2017/05/11(木) 19:46:31.75 ID:MLlLpRGo.net
2017.5.15に今どき、wshの本の改訂版が今ごろ出版されるとか。

930 :名無し~3.EXE:2017/06/29(木) 16:33:55.92 ID:AAx8eHDl.net
>>886の件、
レジストリのCLSID(classid)を、登録した方から登録してない方へコピーするか、
wscファイルの中でCLSIDを指定しておけば、両方で使えた。

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

なので、CLSIDが64/32bitで同じになるようにしてやればよいと。

931 :名無し~3.EXE:2017/07/18(火) 13:58:28.60 ID:W4IZXMNS.net
関数呼び出し、ネスト2,3回位が限界なのかな。
変なところで戻ってくる。

使えない野郎だ、くっそマイクロソフトw

932 :名無し~3.EXE:2017/09/02(土) 18:09:03.77 ID:/D3h/gh4.net
今更javascriptの学習兼ねてjscript勉強中
inputboxとmsgboxが64bit環境で呼び出せないのが割と辛いね
powershellだとC#埋め込んだりフォーム使い放題なんだよなー

↑スリープ抑止はC/C++/C#でさくっと空SendInput呼んだ方が楽だよ

933 :名無し~3.EXE:2017/09/25(月) 23:32:59.00 ID:6nblRiV8.net
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)


934 :名無し~3.EXE:2017/09/26(火) 02:12:19.86 ID:RcmZZAIw.net
管理者権限で実行しても "C:\Program Files\Windows NT" に含まれるジャンクションにアクセス失敗してエラーになるみたい

935 :名無し~3.EXE:2017/09/26(火) 21:58:19.45 ID:W9uZsk3X.net
情報ありがとう
こちらでも昨夜というか今朝まで調べて
配下にリバースポイントが含まれるフォルダは
(普通の方法では)サイズの取得ができないとわかったよ

Program Files配下の全フォルダを抽出して
ひとつずつ再帰的にサイズ取得して合計するという案もあったけど
その中にはサイズが取得できないフォルダがあるから
合計したところで数値が合わないんだよね

936 :名無し~3.EXE:2017/09/26(火) 22:00:02.58 ID:W9uZsk3X.net
仕方ないのでバッチファイルで
dir "C:\Program Files" /s /a-d | find "個のファイル" > hoge.txt
ってやって、ファイル末尾の1行を取得する事にしたわ
これだと一応、フォルダのプロパティで見たのと同じ値が取得できる
もはやスクリプトじゃなくなっちまったけども

937 :名無し~3.EXE:2017/09/26(火) 22:16:48.97 ID:tsUdupnX.net
重箱の隅をつつくようであれだが、リパースポイントな。リバースじゃなく。

938 :名無し~3.EXE:2017/12/12(火) 09:06:04.43 ID:q0vNjYcg.net
wshで数万行クラスの巨大スクリプト書く人いるかな?

自分で使うちょっとした自動処理ならわずか数行〜数十行程度で済むが、他人にあげることを
想定したものならファイルパス等のハードコードは絶対に避けてコマンドライン引数やXML形式の
設定ファイルから指定させる等汎用性を高めたり、きちんとエラー対策をとったり等、れっきとした
「アプリ」として「開発」するため余裕で数千〜数万行に達してしまう。

939 :名無し~3.EXE:2017/12/12(火) 11:04:42.32 ID:/U3t7lMx.net
自分で使う自動処理が拡張に拡張重ねて数万行クラスになったのはあるよ

940 :名無し~3.EXE:2017/12/12(火) 11:13:16.48 ID:Wr10bU9d.net
数万行もあるスクリプトを貰っても持て余すなあ
もっと機能を絞って分割するなりして欲しいもんだ

941 :名無し~3.EXE:2017/12/12(火) 20:43:33.07 ID:jyIq4w4s.net
せいぜい数百から一千行程度に小分けしたスクリプト50本くらいを
ひとつのフォルダに入れて連携させてるよ
小分けしとくと色々使い回しがきいてラクだわ

942 :名無し~3.EXE:2017/12/12(火) 21:53:43.20 ID:qOP7vFik.net
>>938
> 余裕で数千〜数万行に達してしまう

ScriptControlで動的にWSHのソースを読み込んで実行するタイプなら普通

943 :名無し~3.EXE:2017/12/13(水) 14:27:28.65 ID:KehnvMoz.net
特に、Classの継承機能のないVBScriptで無理やりオブジェクト指向な
コードを書こうとして、似たような構造のClassを作るため親Classを
コピペしてちょっと改造するって手法を繰り返してたら、
あっという間に数千行に達してしまう

944 :名無し~3.EXE:2017/12/14(木) 12:08:32.08 ID:bq3yY9Fc.net
それはあるね。コピペ部分が結構多くて行数だけインフレしてる感じ

945 :名無し~3.EXE:2017/12/19(火) 12:46:08.14 ID:uzBHC9yI.net
友達がWindowsで稼げている情報など。ニュースというか参考までに。
⇒ http://kuchibeta.sblo.jp/article/181868190.html

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

M60W6DP7X5

946 :名無し~3.EXE:2018/02/09(金) 15:35:14.91 ID:/eUPgJtQb
test

947 :名無し~3.EXE:2018/02/09(金) 15:41:22.90 ID:/eUPgJtQb
巨大バイナリファイルにxmlhttpとかで取得したバイナリデータを追記するには
どうすればいいんです?
OpenTextFileのForAppendingのバイナリ版は?

総レス数 947
299 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver.24052200