WSH(・∀・)スレッド! Pa ..
[2ch|▼Menu]
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するプログラムが立ち上がってこなかったら
無限ループに陥ってしまうし・・・どうしたらいいんでしょう?

462:461
07/12/28 21:35:15
>>460
すみませんでした。 ただ、署名を無効にするオプションが存在するのに署名無視でインストール
なんて出来るとセキュリティホールでしょ?って言っていたので、それはおかしいなと思って
レスしたまでです。で、携帯電話からってのは確かに、貴方には知る由もありません。申し訳ございませんでした。

>できるが、「確認ダイアログが出るかどうかが分からない」って事じゃ
方法をぜひご教示願えませんか?

>ある程度知ってる人ならスマートな解決方法がわからないまでも、この流れで
>2種類の解決方法が思い浮かぶだろうな。
向学のために2種類の解決方法とスマートな解決方法をご教示願えませんか?

>ブチむかついた
"ブチ"って、山口県辺りの人ですか?

463:デフォルトの名無しさん
07/12/28 22:14:01
>>461
>無限ループに陥ってしまうし・・・どうしたらいいんでしょう?
有限ループにする

464:461
07/12/28 23:48:48
>>463
なるほど・・・

i = 0
Do While objWshShell.AppActivate("ハードウェアのインストール") <> True
       WScript.Sleep 1000
       i = i + 1
       If i >= 10 Then
              WScript.Popup "エラー!ドライバのインストールに失敗しました", 5
              WScript.Quit
       End If
Loop
こんな感じですかね。。。

それともう1つ聞きたいのですが、指定した名前のドライバがきちんとインストールされているか
どうかIfで分岐する事はできませんか?

もう具体的に出した方が分かりやすいと思いますので言いますが UltraVNC のVNC Hook Driver
のインストールをしたいのです。 もしインストールされてなければインストールを実行(全自動)
インストールされていればインストールはせずにスクリプトを終了させる
といった分岐です。

465:デフォルトの名無しさん
07/12/29 11:38:43
もう全部手作業でやった方がいいと思うよ。

466:デフォルトの名無しさん
07/12/29 15:19:42
>>462
「署名を無効にするオプションが存在する」 なら、無効にしとけばいいじゃん!頭悪っ

467:デフォルトの名無しさん
07/12/29 15:29:01
あーあ、言っちゃったよ


468:461
07/12/29 18:09:53
>>466
そういう設定に変えちゃらめぇ〜〜〜!

469:デフォルトの名無しさん
07/12/30 01:12:43
方法があるのに「らめぇ〜」ってどういう事だよ。もう付き合いきれん。

470:デフォルトの名無しさん
07/12/30 08:43:10
らめぇ〜って何?
日本語の乱れ?

471:デフォルトの名無しさん
07/12/30 08:53:40
>>470
お前は萌えを知らんのか?

472:デフォルトの名無しさん
07/12/30 10:27:00
萌えは知っているがみさくらなぞ知らん!


473:デフォルトの名無しさん
07/12/30 12:37:18
MSはWSHというものが
Windowsの自動操作を行えると主張するが
AppActivate+SendKeysはWindowの基本設計とは完全に矛盾しており
システムのクラッシャーになりかねない

OLE対応アプリ/機能以外は操作できないというのは
実質WSHには自動操作はできないという事を示している

474:デフォルトの名無しさん
07/12/30 13:34:25
「Windowsの」ここ重要
決して「Windowsアプリケーションの」とは言っていない。

475:デフォルトの名無しさん
07/12/30 13:37:55
もちろん、ドライバのインストールはWindowsに関わることだけど、
上にもあるようにセキュリティに関わることだから、
自動化に制約がかかるのは勘弁してやれ。

476:デフォルトの名無しさん
07/12/30 15:00:30
でもさ、市販ソフトのインストーラでも、うらでダイアログポチポチしてるよね。
Windowsってなんなの?って感じ。

477:デフォルトの名無しさん
07/12/30 17:56:40
VBSと組めばバッチなんていらんくね?

478:デフォルトの名無しさん
07/12/30 20:31:53
WScript.ShellのPopUpの秒指定、ExcelやIEやHTAで効かないんだけど
使えているひともいるみたいで、環境依存なの?
URLリンク(www.vbalab.net)

479:デフォルトの名無しさん
07/12/30 20:33:11
そう思うなら、
COPY *.TXT A:\
と同等の機能をVBSで書いてみろよ。
適材適所で使い分けの出来ないヤツは役に立たん。

480:デフォルトの名無しさん
07/12/30 22:51:01
>>478
既知の問題で、(おそらく)環境依存で、原因不明で、解決法無し(不明)です
スレ違いなので詳しくは書きませんが代用法もあるわけですし
問題が起きるようならキッパリ諦めてください

481:デフォルトの名無しさん
07/12/31 04:06:48
>>479

Option Explicit
Dim objFSO
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
objFSO.CopyFile "*.txt" "A:\"
Set objFSO = Nothing

こんな感じでしょうか?

482:デフォルトの名無しさん
07/12/31 04:49:23
前から思ってたんだがWScript.つけてるコードって
どこソースなんかね

タイピング増やしたくない俺は滅多に使わないんだが

483:デフォルトの名無しさん
07/12/31 05:15:55
Scripting Guyですよ

484:デフォルトの名無しさん
07/12/31 05:16:47
どこソースって、MSDN(WSHヘルプファイル)には

object.CreateObject(strProgID[,strPrefix])

object
 WScript オブジェクトです。

って書かれてるわけだが

485:デフォルトの名無しさん
07/12/31 05:19:20
ちゅーか別物だよね

486:デフォルトの名無しさん
07/12/31 05:26:43
Scripting.FileSystemObjectのインスタンス作る場合に置いては別物じゃないよ
大元は一緒でラップの仕方が違うだけだし

487:デフォルトの名無しさん
07/12/31 05:42:27
クライアントサイドはCreateObject()
サーバサイドはServer.CreateObject()
って記述してる

488:デフォルトの名無しさん
07/12/31 09:02:11
>>487
それはまた全然別の話だよw

489:デフォルトの名無しさん
07/12/31 16:43:29
>>481
ブッブーーッ!はいダメ。

無理すんな。素直にバッチファイル書けよ。

490:デフォルトの名無しさん
07/12/31 18:28:02
ダメな理由くらい書け

491:デフォルトの名無しさん
07/12/31 18:49:49

なぜダメか一人でずっと悩んでろ!

492:デフォルトの名無しさん
07/12/31 18:56:41
じゃあ俺は駄目だと思わないから481を使うね。

493:デフォルトの名無しさん
07/12/31 20:43:42
>>489
"*.txt" と "A:\" の間にカンマがないのがダメってこと?

494:デフォルトの名無しさん
07/12/31 20:54:13
CreateObject("Scripting.FileSystemObject").CopyFile "*.txt", "A:\"

495:デフォルトの名無しさん
07/12/31 21:11:40
>>479がダントツで役立たずだな

496:デフォルトの名無しさん
07/12/31 22:14:00
対話的じゃないとかいうオチか?

497:デフォルトの名無しさん
08/01/01 00:29:29
>>478
WScript.Shellという名前からしてWSH専用だろ

498:デフォルトの名無しさん
08/01/01 00:32:29
>>479はCopyFileで*.txt使えること知らずに複数行になるはずと
勘違いしてたに1票

499:481
08/01/01 01:18:11
あっちゃーやっちゃった。すみません。
objFSO.CopyFile "*.txt", "A:\"

↑こうですね・・・・。。。

500:デフォルトの名無しさん
08/01/01 02:35:00
500ゲット!あけおめ

501:デフォルトの名無しさん
08/01/01 13:01:20
>>499
はいそのとおり。
バッチなら COPY *.TXT A:\ で済む、バイトの女の子さえミスしようがない超超超簡単なことさえ
WSHで書くとミスっちゃうだろ?
ミスの確立が増える。そういうこと。
だから、WSHがあればBATはいらない、などとイキガッテないでさ、適材適所で使い分けれ。

それにしても、超〜〜思うツボだな。わざとミスってくれたのかと思ったよ。
天然だったんだねw

502:デフォルトの名無しさん
08/01/01 13:08:20
(ノ∀`) アチャー

503:デフォルトの名無しさん
08/01/01 13:10:06
>ミスの確立が増える。
狙って書いてるのか?w

504:デフォルトの名無しさん
08/01/01 13:20:23
天然だろ

505:デフォルトの名無しさん
08/01/01 14:11:33
>>501
かんじで かくと みすっちゃう だろ?
いきがって ないで ひらがなで かけ。

506:481
08/01/01 14:35:00
>>501
はい、今回WSHで書いて、確かにBatで書いた方が良い場面もある事を痛感しました。
WSHとBatを混合させると言うのはどうなんでしょうか?
Dim objWshShell
Set objWshShell = WScript.CreateObject("WScript.Shell")
objWshShell.Exec "copyFile.bat"

みたいな。でもこうすると処理が複雑になったときにbatとWSHと行き来するような事になると
なんかバグが出てきそう・・・。その時修正が大変じゃないですかねぇ・・・。
それに出来れば1つのスクリプトファイルで済ませたいし・・・

>>505
ワラタw

507:デフォルトの名無しさん
08/01/01 15:02:00
>>503-505
ネット初心者?

508:デフォルトの名無しさん
08/01/01 16:08:59
氏ね

それはこういうやつだろ。「確立」は単なる間違い。

>>506
バッチファイル内のCALLで他のバッチファイルを呼んだ方が解り易いかと。
基本バッチファイルで、足りない機能をWSHでフォローって感じで
書いていけばいいんじゃないかな。
無論、内部・外部コマンドが殆ど不必要なら、直接WSHで書いてしまえばいいし。

509:デフォルトの名無しさん
08/01/01 17:08:23
>>478
リンク先の代替法はSendKeys使っててもひとつやね
VBSファイル作って呼び出すのが確実

510:デフォルトの名無しさん
08/01/01 20:18:13
>>506
おもしろい発想だけど、たとえばC言語でこんな・・・
main()
{
 system("MKDIR \"C:\\Program Files\\MyApp\"")
 system("COPY *.* \"C:\\Program Files\\MyApp\"");
 system("ECHO インストールが完了しました。||PAUSE");
}
こんなの書いて、「オレ、C言語でプログラムかいたおw。スゴイでそ!」
なんて言ったら笑われるだけ。他の言語でも同じこと。

511:デフォルトの名無しさん
08/01/01 21:54:49
C言語が使いこなせてるわけではないが
C言語でプログラム書いたというのは事実なわけだが

512:デフォルトの名無しさん
08/01/01 22:43:12
笑われるのもまた事実というわけだ

513:デフォルトの名無しさん
08/01/02 01:32:04
JScriptのマクロ変数の値を出すことできる?
WScript.Echo(@if (@_Win32) 'Y' @else 'N' @end);
はできても、
WScript.Echo(@_Win32);
はできない

514:デフォルトの名無しさん
08/01/02 01:37:34
スレ違い

515:デフォルトの名無しさん
08/01/02 02:13:13
>>513
@変数は、JScript コードでは使えませんよ。
@setや@ifの中でしか使えない仕様です。

>>514
プログラム板で有名な基地害さんじゃありませんかw

516:デフォルトの名無しさん
08/01/02 02:53:29
>>513
@_win32じゃね?
>>514
それ見ていつも思うけど
誘導先が書いてないんじゃ無意味なレスじゃね?

517:デフォルトの名無しさん
08/01/02 05:05:50
そうでもないか

518:デフォルトの名無しさん
08/01/02 12:01:50
>>510
ちょwwwwそれはないですwwwww さすがにそれはひどい・・・・。

519:デフォルトの名無しさん
08/01/02 15:06:44
で、ドライバがインストールされているかどうかで処理を分岐させることはWSHではどうすれば良いのでしょうか?

520:デフォルトの名無しさん
08/01/02 15:10:57
If Then Else End If

521:デフォルトの名無しさん
08/01/02 19:17:49
>>520
いや、その構文を使うのはわかるけど、 If の後に書く内容ですよ。
どういう風に書いて真偽を返させればいいのかが全く検討がつきません。

If ドライバがインストールされている Then
  MsgBox ドライバインストールされてるよ〜
Else
  MsgBox ドライバインストールされてないよ〜
End If

の"ドライバがインストールされている" と言う判定をどう書けばいいのかをお聞きしています。

522:デフォルトの名無しさん
08/01/02 19:27:25
インストールされた状態とされていない状態の差分を調べろ。
レジストリでも覗いとけ。それ以上はこのスレの範囲外。

523:デフォルトの名無しさん
08/01/02 20:45:49
・複数のバイナリファイルの文字列を置換したい。
・置換リストを作って置換したい。
・CUIでもいい。

これらを実行したい場合は、WSHで出来ますか?

524:デフォルトの名無しさん
08/01/02 21:27:49
>>523
WSHとCOM(標準のものだけで事足りる)で出来ますよ

525:デフォルトの名無しさん
08/01/02 22:11:30
バイナリはpowershellのほうが楽

526:デフォルトの名無しさん
08/01/02 22:30:03
>>524
COMとはCOMMAND.COMのことですか?

>>525
win2kは未対応のようで、うちでは使えません。

527:デフォルトの名無しさん
08/01/03 05:08:06
よくActiveXコントロールの事
ActiveXって言う人いるよね。
もちろんActiveXが何かは殆どわかってない人が多い

528:デフォルトの名無しさん
08/01/03 12:46:44
特撮ヒーローの名前だ間違いない

529:デフォルトの名無しさん
08/01/03 16:09:38
>>526
win2kではCMD.EXEだな

530:デフォルトの名無しさん
08/01/03 16:22:51
WSHでバイナリは読めても書くのが大変だから、PowerShell使え
win2kでも誤魔化せば使えるらしい

531:デフォルトの名無しさん
08/01/03 16:38:06
つVBA

532:デフォルトの名無しさん
08/01/03 16:57:36
>>529
そういうボケはいらん
COMコンポーネントだろ

533:デフォルトの名無しさん
08/01/03 17:05:17
そういうボカシタ話はいらん
具体的なProgIDを書け
しらんなら書くな

534:デフォルトの名無しさん
08/01/03 17:32:01
CreateObjectすんのにProgIDとか使わんがな

535:デフォルトの名無しさん
08/01/03 17:40:10
ProgID使わないでどうやってCreateObjectするんだよ。
っていうかググればADODB.Stream使うってすぐ出て来るよね。

536:デフォルトの名無しさん
08/01/03 17:42:03
ADODB.Streamにバイナリ書き込むのが面倒だって

537:デフォルトの名無しさん
08/01/03 18:18:04
WSHでも理論上はできそうだな。

俺は面倒臭がりだからC#で書くけど。

538:デフォルトの名無しさん
08/01/03 20:22:49
>>522
レジストリを覗く・・・それぐらいしか手が無いとは・・・・OTL

539:デフォルトの名無しさん
08/01/03 20:55:40
>>538
WSHはそういうもの
痒いところに手を伸ばすにはダルシムレベルの修行が必要

540:デフォルトの名無しさん
08/01/03 22:37:30
wmi

541:デフォルトの名無しさん
08/01/04 00:19:04
残念ながらそれはハズレだ

542:デフォルトの名無しさん
08/01/04 03:12:15
>>539
別にWSHがそうだから、
とかいう問題じゃなくね?

543:デフォルトの名無しさん
08/01/04 10:01:01
きっとWSH以外ならもっと簡単な方法があるんだろう
僕にもその方法を教えてください

544:デフォルトの名無しさん
08/01/04 11:46:40
そういえばWindowsXPの「プログラムの追加と削除」ってHTAじゃなかったっけ

545:デフォルトの名無しさん
08/01/04 14:37:11
WSHでアイドル時の検出とか出来ませんか?
Windowsのタスクスケジューラでアイドル時検出試してみたのですが
とりあえず1分アイドル時間が続いたら hoge と表示してpauseしてそれから終わらせるスクリプト
をスケジュール登録してみたのですが、 負荷が小さい処理、例えばメモ帳に文字列を
打ち込んでいたり、こうやって2chを見たりしていると、操作しているからアイドルではないのですが
CPUから見るとアイドル状態なので、スケジュールが実行されてしまいます。
やりたい事は パソコンを切るのをしょっちゅう忘れる愚息のパソコンに仕込む事による
省エネ対策です。 1時間以上パソコンを全く触ってないならshutdownさせると。
しかし先ほど述べたように1時間以上2chを見てたりネットサーフィンしている状態だと
操作しているにも関わらずアイドル検出されてしまってシャットダウンされてしまうのでダメです。
MSNメッセンジャの「退席中」表示みたいな、指定時間全くマウスもキーボードも操作しなかったとき
(Inputが全く無い時)にスクリプトを発動させたいのですが、WSHでアイドル時間を取得できませんか?

546:デフォルトの名無しさん
08/01/04 14:40:42
コントロールパネルの電源オプションでよくね?

547:デフォルトの名無しさん
08/01/04 14:41:16
電源管理使えよ

548:デフォルトの名無しさん
08/01/04 15:08:21
レスありがとうございます。
電源オプションのプロパティ ウィンドウを見てみましたが、シャットダウンがありません。
まぁ休止状態で代用してもいいかな?とは思いますが
システム休止状態 の所の 1時間後 にすると、アイドル時間(CPUがアイドルではなく
ユーザによるマウスやキー入力が一切無いアイドル)が1時間経ったら勝手に休止になる
のでしょうか?スレチ?

549:デフォルトの名無しさん
08/01/04 15:13:03
システム休止状態1分で 何もせずに2chブラウザだけ立ち上げた状態で
放置してみましたが、休止状態になりませんでした。
これじゃダメなようです・・・・

550:デフォルトの名無しさん
08/01/05 00:38:59
コントロールパネルの電源
休止状態でOK

551:デフォルトの名無しさん
08/01/05 02:46:07
CPU使用率がとれるとかとれないとか

552:デフォルトの名無しさん
08/01/05 02:49:11
あとDATが定期更新されてるんじゃね

553:デフォルトの名無しさん
08/01/05 20:52:09
HTMLファイル内にWSH(拡張子.vbs)を埋め込んで、ブラウザから機能を実行する事は出来ませんか?
WSH HTML 等で検索してみたのですが、イマイチそういうことを紹介しているページが
見つかりません。

もしくは.vbsファイルの内容をテキストコピーして、 HTMLファイル内に貼り付けて
そのコードを実行させるとかそういうことは出来ませんか?

554:デフォルトの名無しさん
08/01/05 21:02:44
???良く分からないんだけど、HTAみたいなのを望んでるのかな。

とエスパーしてみる。

555:デフォルトの名無しさん
08/01/05 21:09:43
ちなみに、WSH関係なく単にVBScriptを書きたいだけなら、
JScript同様、script要素の中に書けるぞ。現状ではIE限定になるが。

556:デフォルトの名無しさん
08/01/05 22:39:11
できません。そんなことできたらずぼずぼの脆弱性だ

557:デフォルトの名無しさん
08/01/05 22:48:54
>>555
<script language="VBScript">
<!--
MsgBox "ハロー"
<--!
</script>

↑みたいな感じでHTMLで実行させる事についての詳細が知りたいのですが、
>>556が言っているように出来ないのでしょうか?
ブラウザでそういうことしたいならJava Scriptとか書くしかないのでしょうか?
でも >>555はできるって言っているし、どういうことなのん???

558:デフォルトの名無しさん
08/01/05 22:57:03
それはWSHではなく、VBScriptだろ

559:デフォルトの名無しさん
08/01/05 23:03:41
>>553
>WSH(拡張子.vbs)
このあたりに勘違いを感じる

560:デフォルトの名無しさん
08/01/05 23:47:11
>>557
それくらいは555に書いてあるとおり可能。languageよりtype使えな。

>>556
ネットワーク上に置いてあれば、
FileSystemObjectなどはセキュリティゾーンに従って制限を受ける。
JScriptで自由に使えたXMLHTTPなどはVBScriptでも同様に使える。

いずれにせよWSHは関係なくスレ違い。よそ行け。

561:デフォルトの名無しさん
08/01/06 03:55:36
WSHとIEは一応は別物

が、実際にHTMLでVBScriptが使用される事はまず無い。

VBとVBSも当然違うので
VBSの話がまともに扱われるのは
ここかお前らスレかHTAスレぐらいのものだろう

WSHもIEもHTAもスクリプトが実装されているモジュールは
完全に同一の物。
WSHのマニュアル、と言われているものも実際には
必ずしもWSHのマニュアルではなくWindowsスクリプト、
についてのマニュアル

562:デフォルトの名無しさん
08/01/06 05:30:06
残念、ハズレ

563:デフォルトの名無しさん
08/01/06 09:31:30
>>553 >>557
VBScript HTML で検索したらいいと思うよ。
既に言われてるようにWSHは関係ないので
WSH HTML では見つからないでしょ。

564:デフォルトの名無しさん
08/01/06 12:34:40
unko deta
kimochi ii

565:デフォルトの名無しさん
08/01/06 19:45:03
レジストリエディタを起動すると右側に"名前", "種類", "データ" と標示されますよね。
指定したレジストリキー以下の"名前"を全てフルパスで返して欲しいのですが
どのように記述すれば良いのでしょうか?

Set objShell = WScript.CreateObject("WScript.Shell")
ret = objShell.RegRead("HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\VIDEO\*")
のようにしても、VIDEO\ 以下の名前の部分のパスは帰ってきませんでした。(何も帰ってこない)
かといって 最後の * を削除しても結果は同じで何も帰ってきませんでした。
On Error Resume Nextを上のほうに書いてあるからエラーにはなりませんが・・・。

やりたい事は、それによってフルパスが得られるなら、For Each文で全てのデータを覗いて
指定した文字列が含まれているかどうかをInStr関数等で検索すると言う事です。
よろしくお願いします。

566:デフォルトの名無しさん
08/01/06 19:53:22
>>565
ワイルドカード使えるなんて何処に書いてある?
ワイルドカードは使えないのが基本で、使えるメソッドにはその旨書いてある物だ
勝手に都合の良い仕様を妄想するな

君のやりたいことを実現するにはWMIを使えば良い
但し、ここはWSHのスレであって汎用コンポーネントのスレではないので後は自分で調べること
と言っても情報は腐るほどあるからググれば簡単に解決するけど

567:デフォルトの名無しさん
08/01/06 19:59:33
>>566
WSH厨ってなんでそんなに偉そうなんだ?
そのくせ関係ないスレに聞かれても無いスクリプト張りまくったりして気持ち悪いな。

568:デフォルトの名無しさん
08/01/06 20:04:29
汎用コンポーネントもこのスレでいいだろ
どうせ使うんだから

569:デフォルトの名無しさん
08/01/06 20:08:50
文句言うだけでサンプルコードのひとつも貼らない君等も同類だと気付いてる?

570:567
08/01/06 20:14:40

回答なら566で十分だろ?

俺はただ566が気持ち悪いって書きたかっただけだ。

同類にされたかないね!

571:デフォルトの名無しさん
08/01/06 20:26:49
ゴメン、それ以下だったようだねw

572:デフォルトの名無しさん
08/01/06 20:34:23
教える側はさぞ自分のほうが頭がいいと思い気持ちよくなる。

教えられる側はその代償に回答をもらう。

いいんじゃね?

モレだったら表面上では偉そうな態度取らんが、それは人それぞれ。

573:デフォルトの名無しさん
08/01/06 20:39:56
>>572
恥ずかしくならない?

574:デフォルトの名無しさん
08/01/06 22:12:33
>>573
モレは恥だと思うから、

>モレだったら表面上では偉そうな態度取らんが、それは人それぞれ。

って事ね。

575:デフォルトの名無しさん
08/01/06 22:13:47
>>566 は氏ねばいいと思いま〜〜す。

576:デフォルトの名無しさん
08/01/06 22:25:42
>>574
そういうの偉そうに書いちゃうのは恥ずかしくないの?

577:565
08/01/06 23:12:00
私が初歩的な質問をしてしまったばかりにスレが荒れてしまっているみたいで
申し訳ありません。

一応自己解決したので参考までに私がとった手段を書いておきますね。
WMIと言うのは一応調べてみたのですが、イマイチよく分からなかったので
WScript.CreateObject("WScript.Shell").Exec を使って
reg.exe を呼び出す事で処理しました。
reg query キー
とやると、指定したキー内の"名前", "種類", "データ"が全て列挙されるので
1行1行InStr関数にかけて目的のレジストリデータが存在するかどうかを調べる手段を
取りました。一瞬コマンドプロンプトの画面が立ち上がってくるのがちょっと気になりますが
これなら私にもかけました。
アドバイス下さった方、ありがとうございました。

578:デフォルトの名無しさん
08/01/06 23:24:39
>>576
楽しそうだね。

579:デフォルトの名無しさん
08/01/07 00:07:34
>>577
URLリンク(msdn2.microsoft.com)(VS.85).aspx
URLリンク(www.microsoft.com)


580:デフォルトの名無しさん
08/01/07 12:33:33
>一瞬コマンドプロンプトの画面が立ち上がってくるのがちょっと気になりますが

出てこなくする方法もあるけど
それが出ないのが気に入らないっていうひともいるだろうね

581:デフォルトの名無しさん
08/01/07 13:08:42
>>580
おお、そうなんですか?参考までに出てこないようにする方法を教えて頂けませんか?
IEの場合は
objIE.Visible = False
すれば見えなくなりますが、コマンドプロンプトの場合どうするんだろう・・・


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

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