お前ら、wsh使ってますか? Part7at WIN
お前ら、wsh使ってますか? Part7 - 暇つぶし2ch265:名無し~3.EXE
08/09/04 19:27:26 l2+9WVFc
WSH(JavaScript)でIEを操作するスクリプトを書いています。

IE = new ActiveXObject("InternetExplorer.Application");
IE.Visible = false;
IE.Navigate("URLリンク(www.google.com)");

てなことをやっていると、全く操作ができなくなることがある。
IE.Visible = true;
にして確認してみると、
「セキュリティの警告」
「セキュリティで保護されたページを表示しようとしています」
というポップアップが出ていて、OKをクリックしてやらない限りWSHからは
操作できないようだ。

こういうダイアログが出ているかどうかを確認して、出ていたらOKを押す、
というのはどうすればいいですかね。

266:名無し~3.EXE
08/09/04 19:51:14 2bJj6jy/
>>265
IE.Visible = true;

で、いいんじゃね?

267:名無し~3.EXE
08/09/04 19:53:27 l2+9WVFc
trueにすれば
ポップアップが開いたことをスクリプトから調べる方法
そのポップアップのOKを押す方法
はあるということ?どうすればいい?

268:名無し~3.EXE
08/09/04 19:58:57 2bJj6jy/
「スクリプトから」はしらない。

269:名無し~3.EXE
08/09/04 20:13:30 l2+9WVFc
あぁ、人が見てOKすればいいってことですか?
うーん、自動化したいということと、人がOK押してる間に
IE.ReadyState == 4で先に進んじゃうのよね。操作できないのに。

IE.Navigate("どっか");
while(IE.ReadyState != 4) {
  WScript.Sleep(250);
}
ほげほげ;

IE.Navigate("べつのどっか");
while(IE.ReadyState != 4) {
  WScript.Sleep(250);
}
ふがふが;

ってなことをしていて、"どっか"の時点で警告が出ると、さくっとほげほげの
処理を通り過ぎて"べつのどっか"へのNavigateを実行するけど失敗して、
かつReadyStateは4のままだから、人がOKを押す前にふがふがまで行ってしまう。

というわけで、(ほんとはやだけど)最悪OKは人が押すとしても、警告のせいで
IEの処理が止まってる事をスクリプトから把握できないと困るのよ。

できないとなると、こういうのを回避する別のいい方法はないかなあ。

270:名無し~3.EXE
08/09/04 23:43:29 xy3FNoG2
If .AppActivate(ダイアログのタイトル) Then .SendKeys "OKのショートカットキー"


271:名無し~3.EXE
08/09/05 00:11:56 ymZX69/d
トンクス、明日やってみる

if WScript.Shell.AppActivate("ダイアログのタイトル") {
    WScript.Shell.Sendkey("ショートカット");
}

JavaScriptだからこうかな。
VBScriptはオブジェクト名を省略できるの?

272:名無し~3.EXE
08/09/05 00:14:55 +9TG1vLi
VBScriptでもJScriptでもwith

273:名無し~3.EXE
08/09/05 14:11:28 8iLTXUTa
>>265
たぶんみなさん確実に私より詳しそうだから、全然はずしていたら読み飛ばしてください。

IEを操作するときは、どこかで、objIE.Navigate("about:blank") でブランクページを
作ってから目的のページに飛ぶほうがいい、って書いてあって(ように思う)
私は何も考えずにそうしてます。そういう問題ではないですか?

(っていうか、一旦ブランクにする理由はすっかり忘れてしまって、ググッたけど、
見つけられなかった。どういう意味なのか知っている人がいたら解説してほしいです....)

274:名無し~3.EXE
08/09/05 14:48:19 +9TG1vLi
しないほうがよい

275:265
08/09/05 17:03:26 VTJ1fL7j
>>273
IE.Navigateの問題ではなくて、モーダルダイアログに阻まれて元アプリの
コントロールができなくなる話なので、本質的にはIEに関係ないと思う。
たぶんIE.Visible = false;なのにGUIからしかコントロールができない
API設計のへぼさが問題だと思うけどしょーがないみたいね。
とりあえず>>270-271でうまくいったのでそれでいい事にする。

ところで、ActiveXObject()でオブジェクトを作るとエラーの判定ができる
けど、 wsfで<object />を使って作ると判定できないのかな。

ScriptPW.Passwordを使ってスクリプトを書いていたらscriptpw.dllが無い
環境でエラーになる事がわかったから判定したいけど、<object />で
作っていたので返り値で判断ができない。
<object />を使う場合は絶対失敗しない事を確信できる状況でしか使うな
ってことなのかな。

使えば使うほどかゆいところに手が届かない感じがしてくるなー。
ちょっとしたことに使うなら便利なんだけどさ…。

276:名無し~3.EXE
08/09/05 18:13:47 +9TG1vLi
<object id=hoge />
TypeName(hoge)で確認

277:名無し~3.EXE
08/09/05 19:29:24 VTJ1fL7j
>>276
すまん、俺が悪かった。
問題はそれ以前に、エラーになったらその時点で実行が止まっちゃう事にあった。

オブジェクトを作成できなくても実行を続けるにはどうすればいいかな。

278:名無し~3.EXE
08/09/07 09:27:05 F9Z8qgIn
HTAStopとNoScript(Firefoxのアドオンではない)で無効に設定しているので使ってません。

279:名無し~3.EXE
08/09/07 21:28:33 Bfr7d4al
>>274
IEなんて使わないで直接取りに行ったら?
POSTもできるし
Function PrintHttpDocSimply(url,param)
Dim oXmlHttp
Set oXmlHttp = CreateObject("MSXML2.XMLHTTP.4.0")
oXmlHttp.Open "POST", url , False
oXmlHttp.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
oXmlHttp.send param
PrintHttpDocSimply = oXmlHttp.responseText
End Function

paramは ”hoge=hoho&baka=kaba&momar=hiroyuki”
とか入れておけばいい

280:名無し~3.EXE
08/09/07 21:38:59 TQSameT9
なぜ全角文字を混ぜる

281:265
08/09/08 02:45:23 K462bD72
>>279
>>274じゃないけど反応してみる

さっぱりわからんので教えてくらはい。

再帰してるのはなぜ?
PrintHttpDocSimplyの引数が(url, param)なのにoXmlHttp.responseTextだけ
渡すのでいいの?
つーかそもそもoXmlHttp.responseTextはどこで定義されているの?

282:名無し~3.EXE
08/09/08 06:42:42 L5IL5s6b
VBScript Function でぐぐれ

283:265
08/09/08 16:13:17 TQKBbcaA
ぐぐった。
VBScriptにはreturnが無いのね。
もしかして再帰できないの?と思ったら再帰の呼び出しはcallを使うのか…。

>>279
サンクス。
>>275にも書いたように>>270-271でなんとかしちゃったけど、後で試してみる。

あと>>277は、try {} catch() {}すればいい事に気がついた。

284:名無し~3.EXE
08/09/10 00:05:22 nQEAey34
wshとは直接関係無いけど

Windowsのシステム内でのレジストリとWMIの位置付けの違いがよくわからん
レジストリは設定の保存場所だろ?
WMIも設定の保存場所…なのか?


285:名無し~3.EXE
08/09/10 01:11:02 +SACXhEc
>>282
MSXML2.XMLHTTP.4.0 というObjectでいろいろ定義されている
古いOSならいざ知らずたいがいの環境で使えるのが吉

286:名無し~3.EXE
08/09/10 01:20:16 bhv+KmqL
昔作ったBATを置き換えようかと思ってるんだけど
%~dpnx1とか%~n1とかどう取得するの?

287:名無し~3.EXE
08/09/10 01:59:46 VUGKxJpv
>>286
コマンドラインパラメータの取得なら
WshArguments オブジェクト
URLリンク(msdn.microsoft.com)

パスの分解なら
FileSystemObject のメソッド
URLリンク(msdn.microsoft.com)
各種 Get****Name


なげーよカスと思っても口にしてはいけないよ。

288:名無し~3.EXE
08/09/10 15:55:55 TB/+ZEHL
サーバーのデスクトップ画面をリモートから保存したい
クライアントでATバッチ実行してサーバにBATのrunasでadmin権限取得用vbsをechoで作成して実行するようにスケージュル
指定時間になったら、サーバで上で自動作成されたadmin.vbsが実行されてクライアントの中のcap.batが実行される
cap.batでサーバのデスクットプ画面を保存するadmin.vbsは実行後にadmin.vbsで削除される

一応動いたけどサーバでcap.bat実行中の画面が保存されるので困っている
runasでsendkeys使っているので非表示でbatを起動することはできないのでsendkeyが終った後にcap.batの最小化又はウィンドウサイズを位置を変更したい
↓の方法も試しましたがコマンドプロンプトの画面はaltキーが反応してないみたいで使えませんでした
URLリンク(detail.chiebukuro.yahoo.co.jp)

wshで実行中のコマンドプロンプトの最小化又はウィンドウサイズを位置を変更する方法はありませんか?

289:名無し~3.EXE
08/09/10 20:49:57 xOxjqnd6
わざわざそんなことせずともできると思うが、具体的に

290:286
08/09/11 07:01:11 KjAck0oQ
>>287
thx

291:at.bat part1
08/09/11 08:49:14 xAqasSGI
>>289
@echo off
@REM 実行するアプリとスケジュール時間
set RUNBAT=\\%COMPUTERNAME%\z$\bat\リモート\run_remote_pc.vbs
set RUNTIME=7:30

call :time_run

echo PC名 ping 内容 時間%h%時%m%分%s%秒>>atlog.txt
@REM ----------------------------------------------------------
for /F "tokens=1" %%a in (pclist.txt) do call :sub1 %%a
GOTO :EOF

@REM ----------------------------------------------------------
:sub1
SET LIST=%1
:PING
SET PING=ERR_LAN
ping /n 1 %LIST% | find "Reply" >tmp1.txt
for /F "tokens=1" %%a in (tmp1.txt) do SET PING=%%a
del tmp1.txt
IF NOT %PING%==Reply GOTO NGLAN
:OKLAN
echo Dim WshShell>\\%LIST%\c$\at_admin_run.vbs
echo Set WshShell = CreateObject(^"WScript.Shell^")>>\\%LIST%\c$\at_admin_run.vbs
echo WshShell.Run ^"runas.exe ^/user:megaoak\kanazawa ^"^"c:\at_admin_run.bat^"^" ^", 2 >>\\%LIST%\c$\at_admin_run.vbs
echo WScript.Sleep(100)>>\\%LIST%\c$\at_admin_run.vbs
echo WshShell.AppActivate(^"runas.exe^")>>\\%LIST%\c$\at_admin_run.vbs
echo WScript.Sleep(1)>>\\%LIST%\c$\at_admin_run.vbs
echo WshShell.SendKeys(^"kanazawa{ENTER}^")>>\\%LIST%\c$\at_admin_run.vbs
echo Set objFSO = WScript.CreateObject(^"Scripting.FileSystemObject^")>>\\%LIST%\c$\at_admin_run.vbs
echo objFSO.DeleteFile ^"c:\at_admin_run.vbs^">>\\%LIST%\c$\at_admin_run.vbs

292:at.bat part2終り
08/09/11 08:54:52 xAqasSGI
echo start wscript //nologo ^"%RUNBAT%^">\\%LIST%\c$\at_admin_run.bat
echo Del c:\at_admin_run.bat>>\\%LIST%\c$\at_admin_run.bat

AT.exe \\%LIST% %RUNTIME% /interactive c:\at_admin_run.vbs

echo %LIST% %PING% 接続OK %h%時%m%分%s%秒>>atlog.txt

GOTO :EOF

@REM ----------------------------------------------------------
:NGLAN
call :time_run
echo %LIST% %PING% 接続NG %h%時%m%分%s%秒>>atlog.txt
GOTO :EOF

@REM ----------------------------------------------------------
:time_run
@REM --/現在時刻のHとM取得/--start
for /F "tokens=1,2,3 delims=:" %%a in ("%TIME%") do set h=%%a&set m=%%b&set s=%%c
@REM 秒先頭の2桁
set s=%s:~,2%
echo -%h%時%m%分%s%秒-
@REM 先頭の0を取り除く
if %h% LSS 10 set h=%h:~1,1%
if %m% LSS 10 set m=%m:~1,1%
if %m% LSS 10 set s=%s:~1,1%
@REM --/現在時刻のHとMとS取得/--end
GOTO :EOF

↑↑これで一応動くようになったけど、テストしたらサーバで下のメッセージがでて5台しか成功してなかった

スクリプト"\\クライアントPC\z$\bat\リモート\run_remote_pc.vbs""(コンピュータへの接続数が最大値に達しているため、これ以上このリモートコンピュータに接続できません。)。

293:名無し~3.EXE
08/09/11 18:03:54 oxo2U/u+
minimizeall

294:名無し~3.EXE
08/09/11 18:08:49 WF6Xi3UD
>>293
全部のウィンドウが最小化するとサーバで起動中のアプリの画面をスクリーンキャプチャーできない
特定のウィンドウのみを最小化,移動,サイズ変更したい

なぜかわからないが、runas使わなくても動いたのでソースがシンプルになりました
また明日検証してみる

295:名無し~3.EXE
08/09/11 18:13:23 oxo2U/u+
>全部のウィンドウが最小化するとサーバで起動中のアプリの画面をスクリーンキャプチャーできない

???

>↓の方法も試しましたがコマンドプロンプトの画面はaltキーが反応してないみたいで使えませんでした

コマンドプロンプト以外には使えるんだろ?

296:名無し~3.EXE
08/09/11 20:10:09 WF6Xi3UD
コマンドプロンプトの画面のみを最小化,移動,サイズ変更したい


297:名無し~3.EXE
08/09/11 21:57:27 z48R5mCN
> コンピュータへの接続数が最大値に達しているため、これ以上このリモートコンピュータに接続できません。
Windows Server使え

298:名無し~3.EXE
08/09/11 22:49:58 WF6Xi3UD
>>297
windowsクライアントからwindowsサーバに対して実行してるから無理です
その問題はsambaサーバにキャプチャーしたpngファイルを保存する事にして解決しました

299:名無し~3.EXE
08/09/11 23:17:17 oxo2U/u+
start /min 続きバッチ

300:名無し~3.EXE
08/09/12 06:57:04 DXz7uta5
>>299
startで最小化あるんですね
ありがとう試してみます

301:名無し~3.EXE
08/09/16 21:31:25 OqBWXUZ3
301

302:名無し~3.EXE
08/09/19 11:28:54 9tqS9cEB
atでサーバをリモートでキャプ取るのできた
キャプソフトはccap.exe スクリーンセーバキャンセルできてPNG保存可能で197KB
exeやvbsをアクセス権フリーな状態のsambaに置いて後は普通にATコマンドのスクリプト書くだけだった


303:名無し~3.EXE
08/10/17 19:19:30 XaGw/LzA
職場でノートパソコンの更新があったが
ひきづつきwshは使えるようだ、よかった。

304:名無し~3.EXE
08/10/31 22:10:39 pltrwarm
webでツールバーとかアドレスバーとか戻るボタンがないブラウザ画面がポップアップすることがありますが、vbsであの状態のIEを呼び出せないでしょうか?

305:名無し~3.EXE
08/10/31 22:25:34 hqP79kIz
MenuBarとかToolBarとか
URLリンク(msdn.microsoft.com)(VS.85).aspx

306:名無し~3.EXE
08/10/31 22:37:56 pltrwarm
おおこんな便利なページがあるんですか!ありがとうございますいろいろ遊んでみます

307:名無し~3.EXE
08/10/31 22:48:15 pltrwarm
あははは楽しいです。
美しくないコードかもしれないけど結果は良好です。

Set IE = CreateObject("InternetExplorer.Application")
ie.menubar=false
ie.AddressBar=false
ie.toolBar=false
ie.visible = true
ie.navigate2 "URLリンク(www.google.co.jp)"

308:名無し~3.EXE
08/11/08 16:14:45 CSQUIZij
そういう書き方しかないべさ

309:名無し~3.EXE
08/11/16 12:13:26 jsDDDVhU
IEで動くVBSを書いていますが、
Setinterval で Subプロシージャを呼び出すときに
引数をSubプロシージャに渡したいのですが、エラーになります。
Googleも調べてみたのですが、解決できていません。

今書いている(エラーになる)コードは

Sub First
ID = window.setInterval("chk(" & a & ")", Time, "vbScript")
End Sub

Sub chk(b)
処理
End Sub

です。引数にはIPアドレスが入っています。

エラーは ')'がありません です。
エラーダイアログの"ライン"は 1 ですが、ソースの1行目はまったく関係ない内容(Dim定義)です。
おそらく、Setintervalの書き方の問題だと思うのですが、どなたかお解かりになりますか?


310:名無し~3.EXE
08/11/16 14:52:18 frYs1RTI
"chk(""" & a & """)"

311:名無し~3.EXE
08/11/30 11:30:40 42N27sG3


312:名無し~3.EXE
08/12/01 02:28:06 tUazuBOQ
質問させてください。
vbsからbatファイルを起動させて、当該batファイルの戻り値を取得したいです。

Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec("return.bat")

return.batは正常時0、異常時1を返します。
このbatをvbsから起動させた場合、戻り値はどのように取得できるのでしょうか。
よろいしくお願いいたします。

313:名無し~3.EXE
08/12/01 18:29:13 YhZLL2V/
ExitCode

314:名無し~3.EXE
08/12/01 18:32:18 SxqUT20G
>>312
URLリンク(msdn.microsoft.com)

315:名無し~3.EXE
08/12/03 15:22:38 ZqYgpyCA
Runを使えよ

316:名無し~3.EXE
08/12/04 23:56:02 mdmbOzTn
そんなのしRun

317:名無し~3.EXE
08/12/14 13:59:58 vsQqgwYe
今日初めてVBSを触りました。

IEのコンテキストメニューからパスワード生成を行えるように
したいのですが(ググったらコードでてきたのでそのまま利用)
実行するとInputBoxに書けませんというエラーが出ます。どうしてでしょうか?
メニューに登録したファイルの内容は↓
<SCRIPT LANGUAGE="VBScript">
<拾ったコード>
</SCRIPT>
拡張子はhtmにしてあります。
このファイルを直接ダブルクリックした場合は実行されますが、
右クリックからの起動はうまくいきません。


318:名無し~3.EXE
08/12/14 14:09:33 Pv8LMZtA
>>317
<SCRIPT LANGUAGE="VBScript">
<修正済みコード>
</SCRIPT>

319:名無し~3.EXE
08/12/14 15:36:33 pZTS1TIH
InputBoxは使えんよ
promptに変えろ

320:名無し~3.EXE
08/12/14 17:05:33 vsQqgwYe
むぅ・・・そうなのですか。
やってみます。

321:名無し~3.EXE
08/12/31 13:16:01 rgPn1704


322:名無し~3.EXE
09/01/06 18:31:56 /SR1ia3E
WScript.Echo("あけおめ");


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch