アプリ版:「スタンプのみでお礼する」機能のリリースについて

ExcelVBAで、IEを操作してます。
submitでダウンロードダイアログが表示される
HPで、ダウンロードダイアログを操作したい(保存、ファイル名指定)のですがどういう方法がありますか?
対象オブジェクト.sendkeysも考えましたが
対象オブジェクトが何であるのかわかりません。
どうかよろしくお願いします。

A 回答 (2件)

>やれるならsendkeysでやろうと思っています。



個人的には、このメソッドは嫌いですが、sendkeysでやることに反対はしません。


徹夜サポで暇してます。

ここを参考にやってみました。
http://okwave.jp/kotaeru.php3?q=894824


sendkeysは使用しておりませんが、もし使用する場合にも参考になるかと思います^^


Option Explicit

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function GetDlgCtrlID Lib "user32" (ByVal hwnd As Long) As Long

Private Const WM_COMMAND As Long = &H111
Private Const CLASSNAME_ダイアログ As String = "#32770"
Private Const CLASSNAME_ボタン   As String = "Button"

Private Sub Test()
  Const STEP1_TITLE  As String = "ファイルのダウンロード"
  Const STEP2_TITLE  As String = "名前を付けて保存"

  Dim l_lngWnd_Window_Step1  As Long
  Dim l_lngWnd_Window_Step2  As Long
  
  'step1
  If Not FindDialog(STEP1_TITLE, l_lngWnd_Window_Step1) Then
    Exit Sub
  End If
  Call PushSaveBtn(l_lngWnd_Window_Step1)
  
  
  'step2
  If Not FindDialog(STEP2_TITLE, l_lngWnd_Window_Step2) Then
    Exit Sub
  End If
  Call PushSaveBtn(l_lngWnd_Window_Step2)
End Sub

'ダイアログを探す
Private Function FindDialog(ByVal p_strCaption As String, ByRef p_lngFindWnd As Long) As Boolean
  p_lngFindWnd = 0
  Do
    DoEvents
'    If Not IEがBUSY Then
'      Exit Do
'    End If
    p_lngFindWnd = FindWindow(CLASSNAME_ダイアログ, p_strCaption)
  Loop While p_lngFindWnd = 0
  
  FindDialog = p_lngFindWnd <> 0
End Function

'ボタンを押す
Private Sub PushSaveBtn(ByVal p_lngWindowWnd As Long, Optional p_strBtnCaption As String = "保存(&S)")
  Dim l_lngWnd_Save  As Long
  l_lngWnd_Save = FindWindowEx(p_lngWindowWnd, 0, CLASSNAME_ボタン, p_strBtnCaption)
  Call SendMessage(p_lngWindowWnd, WM_COMMAND, GetDlgCtrlID(l_lngWnd_Save), ByVal l_lngWnd_Save)
End Sub
    • good
    • 4
この回答へのお礼

大変助かりました。メドがつきそうです。
sendkeysは使わずにやってみます。
ありがとうございました。

お礼日時:2005/12/02 11:34

確かXPのSPの状況によって、ダウンロードダイアログの出方が異なったと思います。



さらにOS別を考慮すると、さらにパターンが増えます。

個別のSendKeysパターンを網羅するプログラムを組むか、WM_COMMANDでOKボタンを押させる必要があると思います。
http://okwave.jp/kotaeru.php3?q=199357

この回答への補足

ご回答ありがとうございます。
対象OSは限定ですので(XP SP2)
やれるならsendkeysでやろうと思っています。

sendkeysを送るタイミングも不明で、
busyを検知しておけばいいかと思ったら、
ダウンロードダイアログが表示してる間はbusyの
ようで状況把握を何のプロパティで確認すれば
よいかわかりません。

補足日時:2005/11/30 23:15
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています