• 締切済み

VBSを使用して、ブラウザにて表示されたメッセージボックスを消す方法

VBSでブラウザを立ち上げ、IDとPWを入力しボタンをクリックするまではスクリプトを使って出来たのですが、ボタンを押した後にメッセージボックスが出てきてしまい、どうしてもそこで止まってしまいます。 ---- Set objWshShell = Wscript.CreateObject("Wscript.Shell") objWshShell.Sleep(1000) objWshShell.SendKeys("{ENTER}") ---- なども使ってみたのですが、うんともすんとも言わない・・・ Web上を探し回ったのですが全く見つからず、回答はほとんどが無理というものばかりで、本当に解決する方法は無いのでしょうか? 基本同じと思いますがVBAで解決ができるのであれば、そちらでもOKなのですが・・・

みんなの回答

  • korin_
  • ベストアンサー率69% (46/66)
回答No.3

起動したIEがアクティブにならない場合があるようなので、 APIを使用して起動したIEをアクティブにするようにしました。 VBAで下記を試してもらえますか? Private Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hWnd As Long) As Long Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Private Sub test() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Width = 800 objIE.Height = 600 objIE.Left = 0 objIE.Top = 0 objIE.StatusBar = False objIE.Toolbar = False objIE.Visible = True objIE.Navigate "HPのアドレス" Do Until objIE.Busy = False Sleep (250) Loop objIE.StatusBar = True objIE.Toolbar = True 'ID欄を設定 objIE.Document.frm.ID.Value = "******" 'Pass欄を設定 objIE.Document.frm.Pass.Value = "++++++" 'ボタンを押す objIE.Document.frm.btn.Click ' ウィンドウをアクティブに設定 Dim wResult As Long wResult = SetForegroundWindow(objIE.hWnd) Dim objWshShell As Object Set objWshShell = CreateObject("Wscript.Shell") Sleep (5000) objWshShell.SendKeys ("{ENTER}") ' ページの読み込みが終わるまで待機 Do Until objIE.Busy = False Sleep (250) Loop End Sub

HiroQual
質問者

お礼

上記の内容をVBAにて確認したのですが、VBSと同様の結果になりました。 薄々感じてはいましたが、やはりVBではMSGBOXを操作することは出来ないのでしょうかね。 そろそろ諦めようかと思います。

  • korin_
  • ベストアンサー率69% (46/66)
回答No.2

> 上記の方法ではできませんでした。 Enterを送信したいのであれば上記の方法で出来るはずです。 出来ない理由としては、IEがActiveになっていないか、Msgboxが表示される前にEnterを送信してしまっているぐらいしか考えられません。 実際のコードを提示してもらえれば、何か原因がわかるかもしれません。 > その他、方法はございますでしょうか? 外部のインスタンスなので、VBScriptでは無理だと思います。 VBAで、APIを使用してMsgboxを監視するプログラムを作成するぐらいしかないと思います。

HiroQual
質問者

補足

下記のようにプログラムを組みました。 ---- Option Explicit Dim objIE Dim objWshShell Set objIE = CreateObject("InternetExplorer.Application") Set objWshShell = Wscript.CreateObject("Wscript.Shell") 'Set objWshShell = WScript.CreateObject("WScript.Shell") objIE.Width = 800 objIE.Height = 600 objIE.Left = 0 objIE.Top = 0 objIE.Statusbar = False objIE.ToolBar = False objIE.Visible = True objIE.Navigate "HPのアドレス" Do Until objIE.Busy = False WScript.sleep(250) Loop objIE.Statusbar = True objIE.ToolBar = True 'ID欄を設定 objIE.Document.frm.ID.value ="******" 'Pass欄を設定 objIE.Document.frm.Pass.value ="++++++" 'ボタンを押す objIE.Document.frm.btn.Click 'ここまではうまくいくのですが、クリック後にMSGBOXが表示される。 'ENTERを押すようにSendKeysを使用しても実行されません。 objWshShell.Sleep(5000) objWshShell.SendKeys("{ENTER}") '下記の内容はMSGBOXを閉じブラウザを閉じた後にエラーとして表示されます。 '待ち状態が続いている状態なのだがブラウザが起動しなかったことにより表示されたのかもしれません。 Do Until objIE.Busy = False WScript.Sleep(250) Loop 'オブジェクトの破棄 Set objIE = Nothing ----- 差しさわりが無ければVBAにてAPIを使用する方法などを教えていただけますでしょうか? お手数をお掛けいたします。

  • korin_
  • ベストアンサー率69% (46/66)
回答No.1

以下のコード(vbs)で試しに実行してみたところ、メッセージが表示されないようになりました。 SendKeysをする前にmsgboxが表示されるまでSleepで待機しないと、上手くいかないです。 こういう事ではないですか? Dim objIE Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True '指定したURLを表示する objIE.Navigate "https://okauth.okwave.jp/mypage_qa.php3?list=answer" dim objWshShell Set objWshShell = Wscript.CreateObject("Wscript.Shell") WScript.Sleep(5000) objWshShell.SendKeys("{ENTER}") 'ページの読み込みが終わるまで待機 Do Until objIE.Busy = False WScript.Sleep(250) Loop

HiroQual
質問者

お礼

ご返答ありがとうございます。 上記の様にURLの表示し、IDを入力し、PWを入力し、ブラウザ内のLOGINボタンまでは押すことはできます。 LOGINボタンを押した後に、MSGBOX(yesno)が表示され、そのときにYESボタンクリック or ENTERキーを入力したいのです上記の方法ではできませんでした。 その他、方法はございますでしょうか?

関連するQ&A