人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Microsoft Access2002・Internet Explorer Ver6を使用しています。VBAを使用しあるサイトにアクセスしPDFファイルをダウンロードしようとしていますが、わからない箇所があります。それは、PDFをDLしようとしてあるボタンをクリックすると、POPUPウインドウが表示され、「開く(O)」「保存(S)」「キャンセル」「詳細情報(M)」のどれかのボタンをクリックしなければなりません。そこで下記質問です。◆まず、このPOPUPウインドウが表示されたどうかのチェックはどのように行えばいいですか?◆また、そのボタンをクリックする方法はありますか?(SENDKEY以外で)以上2点よろしくお願いします。

●質問者: topo
●カテゴリ:コンピュータ
✍キーワード:DL Internet Explorer Microsoft PDF PDFファイル
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● Gyokuran
●10ポイント

http://www.akj.co.jp/aug/qa/ans0001-0050/0616.html

的外れでしたら申し訳ありません。

参考になれば幸いです。

◎質問者からの返答

ご回答ありがとうございます。

これはフォームの入力のキャンセルの方法なので、ちょっと違う気がします。

まず、ポップアップウインドウが表示されたかどうかをチェックできれば、最悪SENDKEYSでもいけそうな気はするのですが。

まだまだ回答募集します


2 ● wm5775
●40ポイント

http://www.hatena.ne.jp/

はてな

すみません。ど忘れしましたが、アクティブウィンドウのタイトルを取得するWin32の関数があったと思います。ポップアップウィンドウが出てくるタイミングになったら、ループで上記関数でポーリングし、ポップアップウィンドウを認識したら、SendKeyやSendMessageなどを使ってボタンをクリックするというのはいかがでしょうか?

なぜ、SendKey以外を使いたい事情があるのかはてなからは読み取れませんが、汎用プログラムでなく、画面の条件などが一定のようであれば、マウスカーソルをある座標に移動させてクリックイベントを発行することで、アクティブウィンドウの任意のボタンをクリックすることができると思いますがいかがでしょうか?

◎質問者からの返答

ご回答ありがとうございます。

質問してから色々調べた所、ポップアップウィンドウでは無く、ダイアログ(?)が表示されているようです。

Win32のAPIでアクティブウィンドウのタイトルを取得しようとしたのですが、うまくいきませんでした。

下記のコードでループさせるとダイアログが表示されると下記のループの中で処理が停止しているようです。

ダイアログのボタンを手動でクリックすると処理が継続します。

Do While Me![IEBrowser].Object.Document.ReadyState <> ”complete”

Debug.Print Me![IEBrowser].Object.Document.ReadyState

DoEvents

Loop

どうやらAPIを利用するのではという所までは予想できるようになったのですが、ダイアログを表示するAPIは見つけたのですが、ダイアログが表示されたかどうかを調べるAPIが必要なようです。

できれば、簡単なコードを利用して方法を教えてくれると助かります。


3 ● wm5775
●10ポイント

http://www.hatena.ne.jp/a

URLはダミーです。度々の投稿になってしまい申し訳ありません。回答にあったループで停止してしまうということであれば、ポーリングするコードはスレッドにするとうまくいくかもしれません。C++ではスレッドを使用するのは容易ですが、VBではどうでしょうか。VBには疎いので参考にならなかったらすみません。でも、ループが停止するのはアクティプウィンドウをポーリングするコードがメインウィンドウと同一のスレッドにあるためだと思います。

◎質問者からの返答

ご回答ありがとうございます。

「スレッド」や「ポーリング」の意味が解らないのですが、色々調べてみます。


4 ● Nagi
●10ポイント

http://homepage1.nifty.com/MADIA/vb/API/EnumWindows.htm

EnumWindows(全てのウインドウを列挙する)

VBAのプログラマじゃないんで、的外れな回答かもしれませんが、Win32 APIの「EnumWindows」を使えば、トップレベルのウインドウを全て取得できます。

この中から、タイトルが「ファイルのダウンロード」となっているウィンドウ(ダイアログ)を探してみてはどうでしょう。

◎質問者からの返答

ご回答ありがとうございます。

後で、試して見ます。


5 ● Nagi
●50ポイント

http://www.yahoo.co.jp/

Yahoo! JAPAN

URLはダミーです

以下のコードで、どうでしょう?

1.GetWindowHandleと言う関数で「ファイルをダウンロードしますか」と言うダイアログがあるか調べれます。

2.SendOkと言う関数で、「保存」ボタンをクリックできます。

2はWM_COMMANDを直接送っているので、代りにSendKeysあたりを使った方がいいかもしれません。

Public Declare Function EnumWindows Lib ”user32” (ByVal lpEnumFunc As Long, lPalam As Long) As Long

Public Declare Function GetWindowText Lib ”user32” Alias ”GetWindowTextA” (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

Public Declare Function PostMessage Lib ”user32” Alias ”PostMessageA” (ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Public Declare Function SetForegroundWindow Lib ”user32” (ByVal hWnd As Long) As Long

Dim WindowHandle As Long

Sub Button1_OnClick()

’ ウインドウを検索してみる

hWnd = GetWindowHandle()

If hWnd <> 0 Then

’ 見つかったらしい

SendOk (hWnd)

Else

’ 見つからない

MsgBox ”「ファイルをダウンロードしますか」と言うタイトルのウインドウは見つかりません”

End If

End Sub

’ ウインドウの「保存ボタンをクリックする」

Public Function SendOk(ByVal hWnd As Long)

’ ウインドウを最前面に

Ret = SetForegroundWindow(hWnd)

’ 保存ボタンをクリック(WM_COMMANDメッセージを送信)

Ret = PostMessage(hWnd, &H111, &H1144, &H110596)

End Function

’ 「ファイルをダウンロードしますか」と言うタイトルのウインドウを検索

’ 見つかれば0以外を返す

Public Function GetWindowHandle() As Long

’ 0にしておく

WindowHandle = 0

’ ウインドウ検索

Ret = EnumWindows(AddressOf EnumProc, 0)

GetWindowHandle = WindowHandle

End Function

’ コールバック関数

Public Function EnumProc(ByVal hWndX As Long, lParam As Long) As Boolean

Dim Ret As Long

Dim Leng As Long

Dim Name As String

EnumProc = True

’バッファ確保

Name = String(255, Chr(0))

Leng = Len(Name)

’名前を取得する

Ret = GetWindowText(hWndX, Name, Leng)

’名前が”ファイルのダウンロード”

If Ret <> 0 Then

If InStr(Name, ”ファイルのダウンロード”) <> 0 Then

WindowHandle = hWndX

EnumProc = False

End If

End If

End Function

◎質問者からの返答

ご回答ありがとうございます。

後で試して見ます。

いったんここで終了します。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ