WSH(・∀・)スレッド! Part 2 at TECH
[2ch|▼Menu]
[前50を表示]
250:デフォルトの名無しさん
07/10/30 15:51:10
わからんやっちゃ

251:デフォルトの名無しさん
07/10/31 20:27:52
WMIでthreadの数は分かりますが、どれがなんのthreadか調べるにはどうするのでしょうか?

252:デフォルトの名無しさん
07/10/31 22:00:10
意味が分からん
スレッドってもんを正しく認識できてる?

253:デフォルトの名無しさん
07/11/01 09:13:48
理解してないだろうね
こういう子には

>>251
1年勉強して出直しなさい

ということで

254:デフォルトの名無しさん
07/11/02 14:43:43
Win32_Thread.Name

255:デフォルトの名無しさん
07/11/11 00:27:43
WSHで、キーボードのボタンのどれを押したかを取得する方法はないでしょうか?
たとえば、tabボタンやカーソルキーを押した場合を考えています。

256:255
07/11/11 00:36:14
追加です。
想定しているのは、while(true){...}のなかに処理が入ったときに、
コンソール上からタブボタンを押すと、while(true)からぬけるようなものです。

257:デフォルトの名無しさん
07/11/11 02:30:40
WSHではスレッドが一つなので入力を受け付ける場合は処理を止めなければならない。
WSH(wscript.exe,cscript.exe)を2つ実行して、一方をフラグ的に使えば擬似的に出来ないことも無いが
君が想定してる通りのことはWSHだけでは無理。
COMを自作するって手もあるけど、だったら普通のアプリ作った方がいいだろ。

あとは君が想定してる通りのことを出来るスクリプト言語に乗り換えるとかね。
スレ違いだから具体的な紹介や説明は伏せるけど。

258:デフォルトの名無しさん
07/11/11 04:33:32
>>255
スレリンク(tech板:370-376番)

259:デフォルトの名無しさん
07/11/11 10:24:32
>>258
それ、HTAの場合だよね?

260:デフォルトの名無しさん
07/11/11 20:53:36
WSHに翻訳できない?

261:デフォルトの名無しさん
07/11/14 16:29:16
IEの場合、JScriptで ie.document.getEtementsByName('foo')[0] は使えても、
ie.document.getElementByID('foo')[0] はエラーになるんだね。


262:デフォルトの名無しさん
07/11/14 17:29:55
JScriptからだと、windowオブジェクトのopenerやparentってもしかして使えない?


263:デフォルトの名無しさん
07/11/14 19:16:23
Etements 複数形だし

264:デフォルトの名無しさん
07/11/16 20:00:56
XPsp2の環境に

>URLリンク(www.imagemagick.org) から
>ImageMagick-6.3.6-10-Q16-windows-dll.exe (32bit版XP等の場合)を
>ダウンロードしてインストール。インストールの過程で
>□ Install ImageMagickObject OLE Control for VBscript, Visual Basic, and WSH
>のチェックを入れてください。

↑のインストールをしました。

その状態で、
var fs = WScript.CreateObject("Scripting.FileSystemObject");
var stream = fs.CreateTextFile("chintama.txt");
with(stream) {
Write("...");
Close();
}
を、a.jsファイルに書いてダブルクリックするとうまく動作しました。

これは↑をインストールしたから動作したのでしょうか?
あるいは、XPsp2の環境のみでも動作するのでしょうか?

265:デフォルトの名無しさん
07/11/16 20:54:37
FileSystemObjectはOS標準だな

266:デフォルトの名無しさん
07/11/16 22:49:07
>>265
レスありがとうございます。
では、JScript、Windows Script 5.6で記述したWSHも、OS標準ですか?

267:デフォルトの名無しさん
07/11/16 22:55:00
そうだな
まあWSH標準のオブジェクト群でできることはそんなにないけど

268:デフォルトの名無しさん
07/11/16 23:05:08
>>267
どうもです。

では、
var fs = WScript.CreateObject("Scripting.FileSystemObject");
var stream = fs.CreateTextFile("chintama.txt");
with(stream) {
Write("...");
Close();
}

これの、1行目、2行目の変数を使わず、全部、with() のカッコの中に押し込めるとすると、どう書けばいいですか?

269:デフォルトの名無しさん
07/11/16 23:10:16
with(WScript.CreateObject("Scripting.FileSystemObject").CreateTextFile("chintama.txt")) {

270:デフォルトの名無しさん
07/11/16 23:15:39
>>264
ImageMagickのImageMagickObject OLE Controlをインストールすると
new ActiveXObject("ImageMagickObject.MagickImage.1");
が使えるようになってWSHからImageMagickの機能が使えるようになるわけだわさ

271:デフォルトの名無しさん
07/11/16 23:50:42
var f=new ActiveXObject("Scripting.FileSystemObject").GetFile(WScript.ScriptFullName);
WScript.Echo(f.DateLastModified==f.DateLastModified);
なぜ、false(0)?


272:デフォルトの名無しさん
07/11/17 00:04:51
>>271
f.DateLastModifiedをDateオブジェクトにしてやればいいのです

var f=new ActiveXObject("Scripting.FileSystemObject").GetFile(WScript.ScriptFullName);
var d = new Date(f.DateLastModified);
WScript.Echo(d == d);

273:271
07/11/17 00:09:49
>>272
ども、でも

var f=new ActiveXObject("Scripting.FileSystemObject").GetFile(WScript.ScriptFullName);
var d1 = new Date(f.DateLastModified);
var d2 = new Date(f.DateLastModified);
WScript.Echo(d1 == d2);

がやっぱ変

274:272
07/11/17 00:18:08
>>273
あ、>>272の比較だとポインタが等しいかどうか比較しているようなものか。

これでokかな

var f=new ActiveXObject("Scripting.FileSystemObject").GetFile(WScript.ScriptFullName);
var d1 = new Date(f.DateLastModified);
var d2 = new Date(f.DateLastModified);
WScript.Echo(d1.valueOf() == d2.valueOf());

275:271
07/11/17 00:33:50
おkです。
>>271の比較も、ポインタが等しいかどうか比較しているようなもの?
でしょうか?

276:272
07/11/17 00:48:49
>>275
というよりJScriptがDateLastModifiedの型をサポートしてないってことのような

277:271
07/11/17 17:41:07
WScript.Echo(f.DateLastModified-f.DateLastModified);

WScript.Echo((f.DateLastModified>=f.DateLastModified)&&(f.DateLastModified<=f.DateLastModified));
もおk。算術比較はいいみたい。==は算術比較じゃないようで。

278:デフォルトの名無しさん
07/11/17 19:22:14
f.DateLastModifiedプロパティが、
毎回日付をラップした新規オブジェクトを返してくるみたいだな。
比較の処理はWin32のVarCmpあたりを使ってるのかも。

FileSystemObjectとか、返すオブジェクトの詳細が書かれていないので結構困る。

279:デフォルトの名無しさん
07/11/17 19:34:11
f.DateLastModifiedを整数に変換してやるのもよさげ
var f=new ActiveXObject("Scripting.FileSystemObject").GetFile(WScript.ScriptFullName);
var d = f.DateLastModified | 0;
WScript.Echo(d);

280:271
07/11/18 00:01:07
それなら
WScript.Echo(Number(f.DateLastModified));
ところが、
WScript.Echo(Date(f.DateLastModified));
が変。ずれる。なんでだろ?

281:デフォルトの名無しさん
07/11/18 01:27:31
new Date(...) じゃないの?
new無しのは、単に現在日時返ってきてるっぽいな。
JScriptのDateとは違う表記方法だし、メソッドもエラーが出るところを見ると、
VBScript用のDate関数を呼び出してしまっている気がする。

282:264、268
07/11/19 04:28:00
>>269
>>270
レスありがとうございます。感謝します。

283:デフォルトの名無しさん
07/11/20 20:04:29
>>280
Numberは型だけどDateはオブジェクトだから

284:デフォルトの名無しさん
07/11/21 04:53:30
Win2KやWinXP SP2とかだと、
URLリンク(www.microsoft.com)

に書かれている事がどうも嘘っぽいんだけど…
ここに書かれている方法で、Temporary Internet Files を削除出来たって人居る?

Cookieの削除は、Temporary Internet Files に在る、Cookie:username@... を削除しないと駄目みたい。


285:デフォルトの名無しさん
07/11/21 15:58:49
もしかして
Temporary Internet Files\Content.IE5\ 以下の話してる?


286:デフォルトの名無しさん
07/11/21 16:33:08
>>284
ブラウザ終了してないと駄目だよ


287:デフォルトの名無しさん
07/11/21 19:11:21
Hey, Scripting Guy!氏はわざとひねった答えを書くのよ。
コピペのままでは動かない、バグ探しのクイズだと思えばいいのよ。

288:デフォルトの名無しさん
07/11/21 19:48:38
Hey, Scripting GuyのやつはVBSなので
JSに書き換えて使ってる

289:デフォルトの名無しさん
07/11/21 19:53:24
クイズに答えると
Const TEMPORARY_INTERNET_FILES = &H20&
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(TEMPORARY_INTERNET_FILES)
Set objFSO = CreateObject("Scripting.FileSystemObject")
For Each objFolderItem In objFolder.Items
objFSO.DeleteFile objFolderItem.Path
Next
試してないけど

290:デフォルトの名無しさん
07/11/21 20:02:12
>>284
objFSO.DeleteFolder
の間違いじゃないの

291:デフォルトの名無しさん
07/11/21 20:46:42
>>286
ブラウザを終了させてやってみました。

>>285
Content.IE5 というフォルダが出来ていて、IEを起動すると
まるでゾンビの如く復活しています。


292:デフォルトの名無しさん
07/11/21 21:12:05
>>291
さてはdesktop.ini消しちゃったねww
[.ShellClassInfo]
UICLSID={7BD29E00-76C1-11CF-9DD0-00A0C9034933}


2000は知らないけどMe以降ならこんなのは?
Const TEMPORARY_INTERNET_FILES = &H20&
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(TEMPORARY_INTERNET_FILES)
objFolder.Items().InvokeVerbEx "delete"


293:デフォルトの名無しさん
07/11/21 22:02:13
>>292
有難う御座います。
綺麗サッパリと消えてくれました。


294:デフォルトの名無しさん
07/11/22 03:25:17
ところで、InvokeVerbEx "delete" を使用した場合、警告ダイアログがポップアップするのですが、
この警告を出さずに実行させる方法は無いでしょうか?


295:デフォルトの名無しさん
07/11/22 15:33:50
出ないけど?

296:デフォルトの名無しさん
07/11/24 15:23:03
directory\backgroundのverbsを調べてinvokeverbする方法はありませんか?


297:デフォルトの名無しさん
07/11/24 17:33:51
有りますが?

298:デフォルトの名無しさん
07/11/26 18:28:52
AppActivate タイトル
アクティベートしないで、ウィンドウの有無だけ調べるにはどうすればよいでしょう?

299:デフォルトの名無しさん
07/11/26 20:16:40
>>298
そういう機能のCOM作ればOKだよ

ウィンドウタイトルではなくプロセス名での有無を調べるならWMIで出来るけど
WMIもWSHの機能ではなく外部のCOMなので、使い方とかはここでは聞かないでね
というかググれは簡単に解るし

300:デフォルトの名無しさん
07/11/26 23:46:57

氏ね、ググれ厨!クソレス増やすな!

301:デフォルトの名無しさん
07/11/26 23:52:56
プログラム板って299のようにちょっとおかしい人多いんだよね

302:デフォルトの名無しさん
07/11/26 23:56:30
299も300もどっちもどっち、そしてこのレスも。

303:デフォルトの名無しさん
07/11/27 01:07:53
自分の無知を曝け出してるだけだから、温かく無視してあげようよ

304:デフォルトの名無しさん
07/11/27 09:09:22
そうでもないか

305:デフォルトの名無しさん
07/11/27 10:16:24
うんこが長すぎて切れない
どうすればいい?

306:デフォルトの名無しさん
07/11/27 11:16:54
そのために神は
はさみを作り給うた

307:デフォルトの名無しさん
07/11/27 14:33:36
>>298
wordを使う

308:デフォルトの名無しさん
07/11/27 16:55:28
つExcel

309:デフォルトの名無しさん
07/11/27 16:59:49
>>298
スレリンク(tech板:752-754番)

310:デフォルトの名無しさん
07/11/27 19:52:09
>>307-309
こういうのはスレ違いだろ? >>299

311:デフォルトの名無しさん
07/11/28 00:21:12
CIM_DataFileのInUseCountは実装されてないのかなぁ?
nullが返って来る。

312:デフォルトの名無しさん
07/11/28 23:40:19
cscript.exeでの使用が前提のスクリプトで、
C言語のsystem()みたいな同期型のプログラム実行関数を書きたいんだけど、
WshExecオブジェクトのStdErr, StdOutを少しずつ読みながら、
Statusプロパティが0以外になるまで待つ、
よりもストレートで標準的なやり方ってありますか?
できればプログラムの終了コードも取得したいです。

あと、本当はjsファイルダブルクリックでwscript.exeに
起動されたときは、コンソール立ち上げて、
WshShellのStdIn/Out/Errをどうにかしてコンソールに結び付けたい・・・

Windowsしかインストールしてないような
他人のマシンでも動くスクリプトを書きたいのでjscript試し始めたけど、
標準入出力の扱いが異様に面倒・・・


313:デフォルトの名無しさん
07/11/28 23:54:22
素直にCで書いたほうがいいよ

314:デフォルトの名無しさん
07/11/29 00:01:36
わざわざwshでやらなくても適当なスクリプトで書いたりすればいいんじゃね?perlとかなんでもいいけど

315:デフォルトの名無しさん
07/11/29 00:21:42
>>312の2
自分をcscriptで再起動

316:デフォルトの名無しさん
07/11/29 00:28:05
>>312の1
system()ならRun()でしょ
>>312の2
jscriptだろうがvbscriptだろうが、
標準入出力はwshやfsoなのだから変わらんけど?

317:デフォルトの名無しさん
07/11/29 00:36:45
Workgroupとドメインが混じった環境がありまして
Workgroupのコンピュータでドメインユーザを使って
ADの認証を取りたいのですが、なにか良い方法ありますか?
認証はKerberosでもNTLMでもいいです。
WorkGroupのコンピュータは、ADのDCに名前解決できています。
(DNS,lmhosts両方とも)
OSは2000とXPProです。


318:デフォルトの名無しさん
07/11/29 01:30:17
>>315
同じようなこと考えてた。
スクリプト終了後にコンソールがすぐ消えて、経過が見えんなあ・・・と思ったけど、
cmd /k cscript ...
で解決した。

>>316
連続してプログラムをRunする度に別のコンソールが立ち上がるのがイヤ。
1つのプログラムが終ると、その分のコンソールが消えて、
stdout/errの経過が見れないの困る・・・
なので、WshExecのStdOut/Errを読んで、Echoに横流ししてる。
けど、stdout/errが入り乱れてるときにちゃんとリアルタイムに出力できるか疑問。
あと、プログラムの終了コードが取れない。


319:デフォルトの名無しさん
07/11/29 01:57:30
exec("cmd /c hoge 2>&1")

320:デフォルトの名無しさん
07/11/29 02:08:50
>>319
基本でしたw
tnx

321:デフォルトの名無しさん
07/11/29 02:22:16
>>317
runas /user:ドメイン名\ユーザー名 hogehoge.exe


322:デフォルトの名無しさん
07/11/29 23:37:30
>321
明日試してみます。
もちろん、321さんは実験済みなんですよね?

323:デフォルトの名無しさん
07/11/29 23:44:24
イラつくよお前

324:デフォルトの名無しさん
07/11/29 23:53:11
お前火病るの早すぎwwwwww

325:デフォルトの名無しさん
07/11/30 19:01:46
>あと、プログラムの終了コードが取れない。
取れるよ。
>Statusプロパティが0以外になるまで待つ、
してる?

326:デフォルトの名無しさん
07/11/30 20:40:19
>321
試してみました。
書いていただいた「コマンドライン」では動きませんでした。
でも他の方法で解決できました。
本当にありがとうございました。

327:デフォルトの名無しさん
07/12/01 02:35:35
>>326
もう二度と来んな!

328:デフォルトの名無しさん
07/12/01 02:37:04
>>326
その「他の方法」とやらを書く気は全く無い訳だな

329:デフォルトの名無しさん
07/12/01 05:44:51

書きに戻ってくる必要もないよ

興味ないから



330:デフォルトの名無しさん
07/12/01 12:31:11
>>325
ExitCodeプロパティの存在に気付かなかった。
最初読んでた本と適当にググったサイトでスルーされてたので・・・

とりあえずこのスレで得た成果をまとめてみた。

var shell = new ActiveXObject("WScript.Shell");

function system(cmd) {
var e = shell.Exec("cmd /c " + cmd + " 2>&1");
while (!e.StdOut.AtEndOfStream) {
WScript.Echo(e.StdOut.ReadLine());
}
while (e.Status == 0) {
WScript.Sleep(50);
}
return e.ExitCode;
}


331:デフォルトの名無しさん
07/12/01 15:20:48
>WScript.Echo(e.StdOut.ReadLine());

WScript.StdOut.Write(e.StdOut.Read(1));
のほうがいいよ


332:デフォルトの名無しさん
07/12/01 16:45:06
男は黙ってecho

333:デフォルトの名無しさん
07/12/01 17:09:39
>>331
たしかに、
checking...(長い処理) done<改行>
みたいな出力するプログラム起動したときカッコ悪かった。

1バイトずつってのが引っかかったけど、別に体感速度変わらんな。


334:デフォルトの名無しさん
07/12/02 01:13:43
男は黙ってcscript

335:デフォルトの名無しさん
07/12/02 21:19:06
Q >>294
A >>292
なぜかQAの順序が逆ですな。>>292はエスパーかな?

336:デフォルトの名無しさん
07/12/02 21:31:52
>>335
>>292を実行したら警告ダイアログが出た奴が質問してるだけ。

環境依存か知らんが。

337:デフォルトの名無しさん
07/12/02 22:31:07
VBScriptで引数省略は,,だけど、JScriptは?
JScriptで,,にすると怒られる

338:デフォルトの名無しさん
07/12/03 03:11:23
低脳言語と一緒にすんなよ。

339:デフォルトの名無しさん
07/12/03 09:12:27
あの突然すいませんが
WSH(VBS)のコンパイラってないですかね?
URLリンク(www.vector.co.jp)
これしか見当たりませんが、これにしてもなぜだか動作しないんです。
ほかに知っている方が見えましたらお願いいたします

340:デフォルトの名無しさん
07/12/03 10:23:32
本来コンパイル出来ない物なんだから、無理矢理やっても不都合あるのは当然かと
コンパイルしたいなら実行ファイル生成用のプログラム言語か
スクリプト言語の中でも元からコンパイルを想定して作られたもの使いましょう

つまりお門違いってもんです

341:デフォルトの名無しさん
07/12/03 10:36:12
>>339
msscript.ocx を忘れてるだけだと思われ

342:デフォルトの名無しさん
07/12/03 12:25:15
EXE 化して改ざんされにくくしたいって事だろ。それくらい理解してやれよ。

343:デフォルトの名無しさん
07/12/03 12:44:31
↓こっちの方が有名だと思ってたけど、違うのか
"MakeExe"
URLリンク(www.vector.co.jp)
WMIのイベント系メソッドには弱いらしいけど
URLリンク(maglog.jp)

因みにどこかで暗号化も出来るとか言ってる人もいるらしいけど、
(作者のブログにも説明あったけど)暗号化はされない。

344:デフォルトの名無しさん
07/12/03 14:45:09
改ざん防止は署名だろ

345:デフォルトの名無しさん
07/12/03 16:19:24
難読化はスクリプトエンコードだろ

346:デフォルトの名無しさん
07/12/03 17:43:46
jscriptにすればコンパイルできるよ

347:デフォルトの名無しさん
07/12/03 18:14:11
VBにすればコンパイルできるよw

348:デフォルトの名無しさん
07/12/03 20:53:14
COMクライアントのプログラムをCで書いてみるといいよ


349:デフォルトの名無しさん
07/12/03 23:07:15
JScript .NETに書き換えればコンパイルできるよ

350:デフォルトの名無しさん
07/12/03 23:22:19
コンパイルしたら、せっかくのスクリプトの意味が無いやん

351:デフォルトの名無しさん
07/12/03 23:44:59
>>337
,null,

352:デフォルトの名無しさん
07/12/03 23:49:25
set sc=createobject("scriptcontrol")
sc.language="vbscript.encode"
sc.addcode unescape("%23@%7E%5ENQAAAA%3D%3Dhko8K6%2CEx%7F/1Cw%7F%60E%5D%21%26T*y%5DE2TcW%5DE2T*vuE2%21*%25Y%3B2%21*brb@%23@%26ug0AAA%3D%3D%5E%23%7E@")
解読できる?

353:デフォルトの名無しさん
07/12/04 00:22:34
おちんちん

354:339
07/12/04 05:40:22
>340
まあインタプリタの方が管理しやすいですが、
EXEだとタスクマネージャーで強制停止できたり、
知り合いに渡すのに環境を選ばなくなりますからね

>341
インストール中にはねられてしまいました
フリーのコンパイラは複数あって損はないですので調べてみます。

>342
環境に左右されにくくなるかな?と思ったわけです

>343
ダウソしました、ありがとうございました。


その他みなさんありがとうございました




355:デフォルトの名無しさん
07/12/04 09:49:29
> EXEだとタスクマネージャーで強制停止できたり、
スクリプトだって出来る、WSHのスクリプトエンジンはexeなんだから
ついでに言うと、うちの環境では、vbs,js,wsfなどを右クリックすると「このスクリプトを強制終了する」って項目がある
この項目を選択した際に実行されるものもwshで作った
あと、多重実行すると既に実行されてるものを強制終了するって仕組みのスクリプトも作ったことがある
やり方次第で停止、終了:に関しては全然困らなくなる
タスクマネージャーだと複数のWScript.exeが実行されてるときにどれがどれだか解らないとか言うかも知れないが
それだってどうにでもなる問題だし

> 知り合いに渡すのに環境を選ばなくなりますからね
環境選ばないと言ってもJavaとかじゃなければWindows限定なわけだし
Windows限定ならWSH(VBS)が動かないのはWin95のノーマルと個人ではほとんど使われてないNTの4以前くらいだ
あとはCOMのバージョンが違うくらいだが、それはCOMを使用するexeだって同じ事だし

356:デフォルトの名無しさん
07/12/04 18:05:19
自慢うざい

357:デフォルトの名無しさん
07/12/04 19:13:51
的確な突っ込みを理解できないヤシがマヂギレw

358:デフォルトの名無しさん
07/12/04 19:17:48
ここは自慢スレじゃ無いぞ。

359:デフォルトの名無しさん
07/12/04 20:19:12
>>358
どうしたの?

360:デフォルトの名無しさん
07/12/04 20:38:30
自慢すんな

361:デフォルトの名無しさん
07/12/04 20:55:32
あんな程度のが自慢に見えちゃうなんて可哀相な子ですね

362:デフォルトの名無しさん
07/12/04 21:12:34
>>355
いや cscript.exe がいっぱいタスクにならんで
どれが殺したい相手なのかわからなくなるんだよ


363:デフォルトの名無しさん
07/12/04 21:25:45
> いや cscript.exe がいっぱいタスクにならんで
> どれが殺したい相手なのかわからなくなるんだよ
そんなの実行時引数が見られるタスク管理ソフト(タスクマネージャ代替ソフト)を使えば一発解決
WSHのオプションスイッチやスクリプトへの引数が無ければ「プロセス名:cscript.exe  実行時引数:スクリプトパス」になってる
実行時引数はWMIでも取得出来るから、俺のはスクリプトのパスを渡す(右クリックから強制終了選択)と
実行時引数にそのパス含むWSHプロセスを殺すようにしてるだけ
多重起動で自殺スクリプトも仕組みは同じ

cscript.exeがいっぱいあるだけでなく、実行しているスクリプトまで同じでどれがどれだか解らないなんてのは
スクリプトの設計段階での問題

364:339
07/12/04 21:33:46
>355
環境と言うのはBASP21やセンドキーで日本語を送る為のライブラリ環境の事です。
VBSやらない人に複数のライブラリのインストールを強制するのは酷ですからね。

あと、プログラミング自体はしょぼいPCの時代にやっていただけですので、
(懐かしのMSXやX68000でアセンブラとベーシックをかじった程度ですが)
バックグラウンドでプログラムを動かしつづけるのは何だかもったいないような気がするんですよ
これは個人的な感覚ですので,気にしないで下さい

365:デフォルトの名無しさん
07/12/04 21:35:30
cscript hoge.vbs fuga hage
cscript hoge.vbs fuga hige

みたいなのも区別できますか?

366:デフォルトの名無しさん
07/12/04 21:36:52
>>365
もしよろしければそのツールが公開されているURLを教えて頂けませんか?

367:デフォルトの名無しさん
07/12/04 21:37:38
>>365 じゃなくて >>363 だったorz

368:デフォルトの名無しさん
07/12/04 22:08:35
> VBSやらない人に複数のライブラリのインストールを強制するのは酷ですからね。
特定のスクリプトからしか使わないなら、インストール(レジストリへの登録)無しに使う方法もあるけどな


> みたいなのも区別できますか?
当然 禿げ と 髭 だって実行時引数なんだから区別できるよ
>363では"WSHのオプションスイッチやスクリプトへの引数が無ければ"の例を書いたが、細かく書けば
「プロセス名:cscript.exe  実行時引数:WSHのオプションスイッチ スクリプトパス スクリプトへの引数」だよ
プロセス名:cscript 実行時引数://nologo hoge.vbs fuga hage


> ツールが公開されているURLを教えて頂けませんか?
スレ違い、自分で探すかソフト紹介スレでも行け

WMI使って特定のスクリプトを実行しているWSHプロセス殺す方法ならスレ違いじゃないから
要望が有れば教えてもいいが、今から用事があるんで早くても明日になる
この板に来る奴ならそれまで待つよりググった方が早いと思うがな

369:デフォルトの名無しさん
07/12/04 22:15:10
>>368
与えられた
オプションスイッチ スクリプトパス スクリプトへの引数
の順序が違ってても区別できますか?


370:デフォルトの名無しさん
07/12/04 23:27:36
>>366
ProcessExplorerとか?

371:デフォルトの名無しさん
07/12/05 09:10:14
>>369
区別できるよ
コマンドライン文字列 を丸々見ることは可能だし

372:デフォルトの名無しさん
07/12/05 21:59:30
>>364
コンパイルすればライブラリいらなくなるの?マジかよ

373:デフォルトの名無しさん
07/12/05 22:10:24
355も言ってるが、COMをライブラリとして使用する場合はスクリプトも実行ファイルも同じだよね
ソースに取り込めばライブラリファイル(dll=ダイナミックリンクライブラリ)は不要になるけど
それはCなどのまともな言語を使うかスクリプト言語を使うかって場合の話で
スクリプトそのものとスクリプトをコンパイルしたものの差にはならないよな

374:デフォルトの名無しさん
07/12/06 00:02:22
>>372
バカ。元発言嫁よ。
”そういうコンパイラはありませんか?”って質問だよ。

375:デフォルトの名無しさん
07/12/06 06:37:39
そんなコンパイラがあれば
CreateObject("Excel.Application")とかやってるスクリプトも
ExcelをインストールしてないPCで利用可能に

やべーすげー俺にも教えて

376:デフォルトの名無しさん
07/12/11 19:44:45
cmdからだとcscript.exe
explorerからだとwscript.exe
で起動されるようにはどうすればできますでしょうか?

377:デフォルトの名無しさん
07/12/11 20:10:14
ヌケ作マイクロソフトに無理言うなよ。

378:デフォルトの名無しさん
07/12/11 20:56:05
>376
そんな事を考えるよりは素直にコマンドラインから cscript //nologo ***.vbs で
起動する習慣をつけておくほうが良いと思う。
またはvbsファイルをcscript.exeに関連付け、wscript.exeへのショートカットをSendToフォルダに入れておき、
エクスプローラでファイルを右クリック→送る→wscript.exeを起動させるとか。

あと、そこまで考えてるなら、ついでにvbsファイル内で以下のような条件文をつける手法も
覚えておくほうが良いかも。

If Right(UCase(WScript.Fullname),12) = "\CSCRIPT.EXE" Then
 WScript.Echo("このファイルはCSCRIPT.EXEから起動されました")
Else
 WScript.Echo("このファイルはWSCRIPT.EXEから起動されました")
End If

379:デフォルトの名無しさん
07/12/11 21:13:14
>>376
コマンドプロンプトでファイル名叩くとエクスプローラーの関連付けで
起動するのは仕様で無理なんジャマイカ?

難しそうだから、ScriptingGuyに聞いてみたら?

>>378
彼が何を考えて、そうしたいのかわからないんだから、素直にやり方は
ないと答えるか、スルーするのが吉。

380:デフォルトの名無しさん
07/12/11 22:07:03
Wrapper噛ませればいいじゃん

381:デフォルトの名無しさん
07/12/11 22:18:05
>>380
kwsk

382:デフォルトの名無しさん
07/12/12 00:20:36
cmd.exeから起動されたかどうかは区別できるので
同じコンソールにcscript.exeで起動し直すのが問題だな

383:デフォルトの名無しさん
07/12/12 00:28:43
逆ならおk?

384:デフォルトの名無しさん
07/12/12 08:55:28
>>382
>cmd.exeから起動されたかどうかは区別できるので

kwsk

385:デフォルトの名無しさん
07/12/12 08:58:59
>>381
>>384
kwskはGoogleで

386:デフォルトの名無しさん
07/12/12 09:16:57
KaWaSaKi

387:デフォルトの名無しさん
07/12/12 17:04:44
>>385
Googleの検索キーワードをkwsk

388:デフォルトの名無しさん
07/12/12 20:54:28
>>387
>>380>>382>>385は性格が悪いので教えてくれるわけがない。



389:デフォルトの名無しさん
07/12/12 21:46:40
だったら性格のよい388が変わりに教えてやればいいのに・・・
それとも388も性格悪い仲間なの?

390:384=388
07/12/12 22:04:43
>>389
性格はとてもいいんだけど、387と同じで検索キーすらわからないんだが。
わかれば、すぐ教えるが、残念ながらこれ以上調べてもわからなさそう。



391:デフォルトの名無しさん
07/12/12 22:49:07
よくわからんけど
Win32_Process とかじゃねーの?

392:390
07/12/12 23:10:04
WSHでは無理、という結論。

.NET系ならGetCurrentProcessを使って自分自身のプロセスを調べ、
さらに親プロセスがcmd.exeである事を判別する、って方法でいけそうだけど。

>>391
自分自身の実行パスをWMIで調べて、そこから親プロセスを割り出す、
って出来そうだけど、同じスクリプトが複数走ってるとアウトのような希ガス。

393:デフォルトの名無しさん
07/12/12 23:11:58
scriptname = "foo.vbs"

set swl = wscript.createobject("wbemscripting.swbemlocator")
set s = swl.connectserver
set rs = s.execquery("select * from win32_process where caption='cscript.exe' or caption='wscript.exe'")
p = -1
for each r in rs
 if instr(1, r.commandline, scriptname) then
  wscript.echo r.caption
  p = r.parentprocessid
 end if
next

set rs = s.execquery("select * from win32_process where processid=" & p)
for each r in rs
 wscript.echo r.caption
next

'URLリンク(d.hatena.ne.jp)


394:デフォルトの名無しさん
07/12/12 23:14:32
>>393
同じスクリプトが複数走ってるとアウトのような希ガス

395:デフォルトの名無しさん
07/12/12 23:18:35
ごめん
リンク貼り間違えてた
URLリンク(www.geocities.jp)


396:392
07/12/12 23:22:19
>>393
貼り付け乙

穴があるのは承知で、同じような物を作ろうと思ってた。

397:デフォルトの名無しさん
07/12/12 23:26:24
自分でうにーくなプロセス起こしてそこからたどればおk

398:デフォルトの名無しさん
07/12/12 23:29:20
自分のプロセスidはどうやったらわかるの?

399:デフォルトの名無しさん
07/12/12 23:30:15
MSは健忘症だから自分のことも平気で忘れる

400:デフォルトの名無しさん
07/12/12 23:32:17
自分の子の親は普通、自分だけど、例外もあるかも

401:デフォルトの名無しさん
07/12/12 23:36:14
子供のidは分かるけど自分のidは分からんらしい

402:デフォルトの名無しさん
07/12/12 23:39:07
URLリンク(scripting.cocolog-nifty.com)

403:デフォルトの名無しさん
07/12/13 00:04:35
自分探しって大変なんだな

404:デフォルトの名無しさん
07/12/13 00:04:48
>>402
子プロセスを起動してその親プロセスIDを取るのか
スゲー力技

405:デフォルトの名無しさん
07/12/13 00:08:44
>>400
'子の親(=自分)を調べる方法でgetpid()を作ってるサイトがあったので
'そちらを参考(丸写しともいう)にして >>302 を改良
'URLリンク(www.vector.co.jp)
'URLリンク(www.vector.co.jp)
set swl = wscript.createobject("wbemscripting.swbemlocator")
set s = swl.connectserver
set rs = s.execquery("select * from win32_process where processid=" & getpid())
for each r in rs
 wscript.echo r.caption
 p = r.parentprocessid
 set prs = s.execquery("select * from win32_process where processid=" & p)
 for each g in prs
  wscript.echo g.caption
 next
next
function getpid()
 set ws = createobject("wscript.shell")
 set e = ws.exec("mshta.exe -")
 p = e.processid
 set o = getobject("winmgmts:root\cimv2")
 set ps = o.execquery("select * from win32_process where processid=" & p)
 if ps.count <> 1 then
  e.terminate
  err.raise 9
 end if
 for each p in ps
  getpid=p.parentprocessid
 next
 e.terminate
end function

406:デフォルトの名無しさん
07/12/13 00:13:16
なんでメインとサブでわざわざ違うやり方してんの?


407:デフォルトの名無しさん
07/12/13 00:13:35
そこまでしてわかったところでどうする?
cscriptで起動しなおしたって別ウィンドウが開くだけだ

408:デフォルトの名無しさん
07/12/13 00:29:41
もう充分だよ

409:デフォルトの名無しさん
07/12/13 00:31:33
>>407=382だろ?
だから、まずできるところまでやってんだろ。

よくいるんだよな。自分では何もしないで人のしてる事にケチをつける奴。


410:デフォルトの名無しさん
07/12/13 00:33:07
>>405
すげーな。そんな方法思いもよらなかった。


411:デフォルトの名無しさん
07/12/13 01:46:48
超手抜きだけど、環境変数で判別するって方法もあるよ。
Cドライブのカレントディレクトリが =C: という変数に入ってるなら cmd
無ければ explorer から起動したとみなす。
かなり乱暴なやりかただけど。Win XP 以外でうまくいくかどうかわワカラン。

Dim WshShell,Environment
Set WshShell = WScript.CreateObject("WScript.Shell")
Set Environment = WshShell.Environment("PROCESS")

If Environment("=C:") = "" Then
  MsgBox "エクスプローラから起動されました"
Else
  MsgBox "コマンドプロンプトから起動されました"
End if


412:デフォルトの名無しさん
07/12/13 06:07:15
PROMPT=$P$G
も使えそうだね
消されてたらだめかな

413:デフォルトの名無しさん
07/12/13 06:09:08
>>411
DドライブにOS入れててCドライブが無い変態さんもいるかも知れない

414:デフォルトの名無しさん
07/12/13 19:02:27
If Environment("=" & left(wscript.fullname,2)) = "" Then

415:デフォルトの名無しさん
07/12/14 06:45:12
凄腕プログラマーな皆様!!!!!
おいらの悩みを聞いてください
replaceで " の入っている文章を置換したんですがどうすれば良いんでしょうか
具ぐってもサンプルコードばかりで解決策が見つかりません


416:デフォルトの名無しさん
07/12/14 07:01:34
エスケープでググロ

417:デフォルトの名無しさん
07/12/14 17:43:49
replace('"', 'hoge')

418:デフォルトの名無しさん
07/12/14 17:47:37
〜.replace(/"/g, "&quot;");

419:デフォルトの名無しさん
07/12/14 20:45:55
vbs だと " の1個手前に " を置いてエスケープする。
"" の中に " を書きたいときは "" と書く。(C言語の \" のようなもの)
つまり、
s = "今日は""楽しい""遠足"
s = Replace(s, """", "うんこ")
となる。

420:デフォルトの名無しさん
07/12/14 23:00:32
ソースキボンヌ

その仕様自体は知っているのだけれど、
スクリプトのヘルプには何故かその記述が見当たらなかったような……

421:デフォルトの名無しさん
07/12/15 02:30:04
SQL と似てるね。たとえば What's the vbScript という文字列をインサートするには、' を2回重ねて
INSERT INTO MYBOOKS SET ID=1, TITLE='What''s the vbScript';
としなきゃならない。


422:デフォルトの名無しさん
07/12/15 10:28:15
>>415
"""それは言えないな"""

"""こ、この不自然な二重引用符は何でもないんだからね"""

423:デフォルトの名無しさん
07/12/15 16:09:35
>>420
なんでそんなもんがいるんだ?

424:デフォルトの名無しさん
07/12/15 18:46:31
>>423
'に挟まれた'を挟み込む'ではなくて文字列の'にするため

425:デフォルトの名無しさん
07/12/15 22:02:40
いや、>>423のいう「そんなもん」は「ソース」のことではないかと。

ついでに野暮なツッコミをしておくと、>>424の書き方だと
シングルクォーテーション("'")を単なる文字として読ませる工夫をしていないので

 「に挟まれた」を挟み込む「ではなくて文字列の」にするため

と読めてしまうな。

426:デフォルトの名無しさん
07/12/15 22:06:50
ちなみに、ややこしいようなら
JavaScript では "\x22"、VBScript では Chr(34) と書く方法もある。
(ダブルクォーテーションの場合ね)

427:デフォルトの名無しさん
07/12/15 22:52:18
JavaScriptだったら '"' とか "\"" とかの方が良くね?

428:デフォルトの名無しさん
07/12/16 13:48:01
ダブルクォートを定数で作っておくのが親切ってもんです

429:デフォルトの名無しさん
07/12/16 13:54:46
>>428
ヤメレ キショクワルイ

430:デフォルトの名無しさん
07/12/17 06:03:14
こんなおいらにいろいろ教えて頂いてありがとうございました。
''か""""かChr(34) でOKって事ですね
陳宮ベリーマッチでした

431:デフォルトの名無しさん
07/12/17 16:31:39
Const vbQuote = """"

432:デフォルトの名無しさん
07/12/17 19:32:56
ふつうに書けば
a = "おまいは""アホ""か!"

でもこんな書き方する人もいるの?
Const vbQuote = """"
b = "おまいは" & vbQuote & "アホ" & vbQuote & "か!"

ダサ・・・

433:デフォルトの名無しさん
07/12/19 01:27:40
ダサいのは可読性を考慮しないオナニー専門のお前

434:デフォルトの名無しさん
07/12/19 03:35:02
CLSIDはあってもPROGIDがないものはどうやってCreateObjectする?

435:デフォルトの名無しさん
07/12/19 08:57:54
アルファがベータをカッパらったらイプシロンした。なぜだろう?

436:デフォルトの名無しさん
07/12/19 16:23:23
>>434
一覧で全部体当たりする

437:デフォルトの名無しさん
07/12/19 16:47:09
wsf or wsc or htaで<object>使うしかないだろ
vbsやjsでは無理だろ

438:デフォルトの名無しさん
07/12/19 20:45:57
無理と言うか、出来る方が問題やん

439:デフォルトの名無しさん
07/12/19 21:20:53
ほなwsf wsc htaも問題やな

440:デフォルトの名無しさん
07/12/19 21:58:41
>>438
問題のあることやっててゴメンナサイ

441:デフォルトの名無しさん
07/12/19 23:23:27
そもそもそんな必要性がないだろ

442:デフォルトの名無しさん
07/12/20 00:08:25
>>433
可読性??wara
「"」の読み方も知らんの?ダサ〜〜w
おしえてあげよっか〜〜〜〜?

やだよ〜〜ん。おまいの熊度が気に入らないから教えてあげんよ〜〜だ。


443:デフォルトの名無しさん
07/12/20 01:10:50
煽りの返しレスはすぐにつけないと、ただのキモい粘着野郎としか扱われませんよ

要約:KY

444:デフォルトの名無しさん
07/12/20 01:11:32
さんご礁は黙ってろ

445:デフォルトの名無しさん
07/12/20 01:47:30
>>434
自分専用スクリプトなら、適当にレジストリエディタでProgIDをでっち上げればいいw。

446:デフォルトの名無しさん
07/12/20 02:04:59
getobject("new:{ clasid... }")

447:デフォルトの名無しさん
07/12/20 11:52:43
new:なにこれ?

448:デフォルトの名無しさん
07/12/20 19:35:47
>>443
で。「"」 の読み方はわかんのかい?

449:デフォルトの名無しさん
07/12/20 19:51:05
queue moniker
queue:/new:classid or progid

450:デフォルトの名無しさん
07/12/21 18:49:10
vbsかwsfでftpの処理をして処理内容をリダイレクトしようとしています。
ftpのコマンドを書いたファイルを読み込ませているのですが、うまく処理できません。

コメントを切り替えて下記10通りのパターンで試してみたのですが、
一つ目のRun以外動作していないようです。
ftpもできないしログも吐かないし、エラーも出ません。
その後のEchoは表示されます。
------------------
Dim objShl
Set objShl=Wscript.CreateObject("WScript.Shell")
objShl.Run "ftp -s:crp.ftp", 0, true

'objShl.Run "ftp -s:crp.ftp > ftp.log", 0, true '×
'objShl.Run "ftp -s:crp.ftp >> ftp.log", 0, true '×
'objShl.Run "ftp -s:crp.ftp > ftp.log", 1, true '×
'objShl.Run "ftp -s:crp.ftp > C:\db\wsh\ftp.log", 0, true '×
'objShl.Run "ftp -s:crp.ftp >> C:\db\wsh\ftp.log", 0, true '×
'objShl.Run "ftp -s:C:\db\wsh\crp.ftp >> C:\db\wsh\ftp.log", 0, true '×
'objShl.Run "ftp -s:C:\db\wsh\crp.ftp > C:\db\wsh\ftp.log", 0, true '×
'objShl.Run "ftp -s:/db/wsh/crp.ftp >> /db/wsh/ftp.log", 0, true '×
'objShl.Run "ftp -s:/db/wsh/crp.ftp > /db/wsh/ftp.log", 0, true '×
WScript.Echo "完了"
------------------
OSはWindows2003 Serverです。
上記をコマンドプロンプトで実行すると、ftpもログも正しく処理できています。

違っているところや、別の対処方法等教えてください。
よろしくおねがいします。

451:デフォルトの名無しさん
07/12/21 18:54:12
cmd.exe /c ftp....

452:450
07/12/21 19:04:49
>>451 ありがとーーーーー!!ヽ(・∀・ )ノ  できました!

453:デフォルトの名無しさん
07/12/21 23:29:39
objShl.Exec

454:デフォルトの名無しさん
07/12/28 13:37:03
WSHでドライバインストールって出来ませんか?

著名確認画面で止まるのを自動で進みたいんですが。

455:デフォルトの名無しさん
07/12/28 16:24:02
>>454
マウスクリックするだけじゃん。
どんだけズボラなんだよ。
スクリプト書く方がはるかに手間がかかるよw



なんて冗談はさておき、たぶん、自分のPCなら自分で
マウスをクリックすればいいだけな話だが
キミやりたいのは、不特定多数の他人のPCにインストールしたい
ということなんだろ?

たぶん sendkeys って命令を使えばいいんだと思う。
(誰か詳しいひとがフォローしてくれるはず)

それはそれとして、いったい何のための署名なのか。よく考えて欲しい。
システムに深刻な障害を与える可能性のあるソフトを
何の確認もせずに自動インストールできてしまう機能がOSに
備わっていたら?それはセキュリティーホールだよね。
ウイルス作成ハッカーの格好の餌食じゃん。

456:デフォルトの名無しさん
07/12/28 18:41:26
>>455
>それはそれとして、いったい何のための署名なのか。よく考えて欲しい。

親切で言ってるとは思うが、余計なお世話だろ。

>>454
出す情報少な杉。ダイアログを自動で操作したいだけなら455の言うとおり
ウインドウハンドルを取得してsendkeys使えばいい。


457:デフォルトの名無しさん
07/12/28 20:18:55
>>455
SendKeysは知っていますが・・・

それから、著名確認を無効にする事がWindowsでは出来ますよ。
貴方の言うように著名確認が無いならそれはセキュリティホールだというなら、どうして
そのような機能がWindowsについているのでしょうか?

>>456
すみません。携帯電話からだったのでつい・・・・。
今度はPCから書いています。 確かにSendKeysを使えば良いのでしょうが、確認ダイアログ
が出るかどうかが分からないとか、 AutoHotKeyの IfWinExist みたいな 指定したタイトルの
ウィンドウが存在するかどうかチェックとか、そういった事はWSHでは出来ないのかなぁと。

要するに、SendKeysだとAppActivateと組み合わせても、タイミングによってはユーザの介入
によって上手くいかない可能性もあるので、そういった不安要素を取り除いて確実なスクリプト
にしたいなぁと思ったのですが、無理っぽいですねぇ・・・・
マニュアルを "存在するか" とか "ドライバ" とか 色々検索してみたのですが、どうも
なさそうでした・・・・。

458:デフォルトの名無しさん
07/12/28 20:36:01
>>457
本筋とは関係ないが、「著名」じゃなくて「署名」だよ。

459:デフォルトの名無しさん
07/12/28 21:23:03
「しょめい」じゃどう変換しても「著名」にはならんから
ずっと「ちょめい」と読んでいたんだろうね。

460:456
07/12/28 21:27:53
>>457
突っ込みどころが多杉。

>>455がsendkeys出したのは、情報小出しのおまえが悪いんだろ。
それに対して礼も言わずにバカにしたようなレスはどーなのよ。

携帯電話なんてそっちの事情はしらねーんだよ。

>AutoHotKeyの IfWinExist みたいな 指定したタイトルの

できるが、「確認ダイアログが出るかどうかが分からない」って事じゃ
使いようがないだろ。

ある程度知ってる人ならスマートな解決方法がわからないまでも、この流れで
2種類の解決方法が思い浮かぶだろうな。

ブチむかついたので、以上。


461:デフォルトの名無しさん
07/12/28 21:27:59
>>458
うっはw 指摘ありがとうございます。
超恥ずかしいOTL オレバカす・・・・・


それはそうと、スクリプトはどんなコンピュータで実行されるか分からないじゃないですか?
ハードウェアのインストールウィザードで一旦止まりますが、要はユーザがそれを見て
よく分からずに「インストール停止」を選べないように、出てきた瞬間にインストールを選択
させてインストールしたいのです。

最悪かなり重いマシンで実行する事を想定すると Wscript.Sleep 10000で10秒ぐらいは待って
それから objWshShell.SendKeys "{Left}" Wscript.Sleep 100 objWshShell.SendKeys "{Enter}"
ってやらないと、まだハードウェアのインストールウィザードが出てきてないのに
SendKeysしてしまうと失敗しますよね。
ではそのように作ったスクリプトを高速なマシンで実行した場合はどうなるか・・・
ハードウェアのインストールウィザードは出ているのにしばらく停止したまま。その間にユーザが
インストール停止を選択してしまうかもしれない。そうでなくても無駄に待ち時間が長いのは問題。
だから、出てきたらすぐインストールを選択させたいんです。無駄な待ち時間をなくしたい。
そうするにはどうすればいいのでしょうか?
AutoHotKeyだと IfWinExist タイトル で そのタイトルが存在するかどうかチェックとか
そういった事が出来たのですが、WSHではどうするのかなぁと。
存在しないタイトルを objWshShell.AppActivate タイトル ってやってアクティブにしようとして
存在しないのだから多分 Falseが帰ってくるから、それがTrueになるまで1秒ずつ実行するような
無限ループでも作ればいいのでしょうか?こんな感じ

Do While objWshShell.AppActivate("ハードウェアのインストール") <> True
Wscript.Sleep 1000
Loop

しかしこうするとなんらかの原因で永遠にAppActivateするプログラムが立ち上がってこなかったら
無限ループに陥ってしまうし・・・どうしたらいいんでしょう?


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4278日前に更新/234 KB
担当:undef