http://q.hatena.ne.jp/1248657374


上記記事のNo.3のコードを参考にして、VBAから開いたIEを制御し、Webサイト上で
開かれたJavascriptのconfirmポップアップを自動処理するコードを作成していた
のですが、特定の端末でその処理がうまくいっていないことが判明しました。

条件ははっきりしていないのですが、どうもIE9を使用している端末では
GetLastActivePopupでconfirmポップアップのウインドウハンドルが取得できず
親ウインドウのハンドルがかえっているためにループしているようでした。

質問はこうした場合にconfirmポップアップのウインドウハンドルを得る
他の手段がないかという点になります。
また、IE9であっても問題なく上記コードを動作させることができるようであれば、
どの辺りに問題の原因があるのかを特定したいと思っています。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2013/03/05 20:33:01
  • 終了:2013/03/12 20:35:06
id:mold

質問者から

mold2013/03/07 14:03:29

改めて確認してみるとどうもGetLastActivePopupが失敗する事象は
IEというよりOSのバージョンに依存しているように思われます。
事象の再現状況は以下のようになっています。
 WindowsXP/IE8:成功
 Windows7(32bit)/IE8:失敗
 Windows7(32bit)/IE9:失敗

UISpyでウインドウの親子関係を確かめてみると、ポップアップの
親ウインドウはLocalizedControlTypeが第2ウインドウとなっており、
これはobjIEオブジェクトのウインドウと別スレッドになっているよう
だったので、この辺りに原因があるのかもしれません。

ひとまず今回は、以下のようにポップアップウインドウ名から
ウインドウハンドルを取得するようにして対応しました。
FindWindow("#32770", "●ポップアップウインドウ名●")

ポップアップウインドウ名はIEのバージョンによって異なるようなので、
現状はIEのバージョンを取得して処理を分岐させるようにしていますが、
対象とは別のポップアップウインドウを掴んでしまう可能性や、IE10で
またポップアップウインドウ名の仕様が変わった時のことを考えて、
継続してもう少しスマートな方法がないかアイディアを募集します。

回答(0件)

回答はまだありません

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません