WEB上でファイルをダウンロードする際、
開かれる「名前を付けて保存」ダイアログに対して
保存するファイル名をVB上から書き換えたく思います。
Const WINDOW_NAME As String = "名前を付けて保存"
Dim hWnd As Long
Dim hChild As Long
hWnd = FindWindow(vbNullString, WINDOW_NAME)
If hWnd = 0 Then
MsgBox "FindWindow 失敗"
Exit Sub
End If
hChild = FindWindowEx(hwnd, 0, "Edit", vbNullString)
If hChild = 0 Then
MsgBox "FindWindowEx 失敗"
Exit Sub
End If
'エディットボックスにSendMessage
SendMessage hChild , EM_REPLACESEL, 0, ByVal tmpString
この方法でエディットボックスを検索しましたが
エディットボックスが見つからず hChild = 0 となってしまいます。
試しに予め開いている「名前を付けて保存」ダイアログに対して
spy++ でエディットボックスを覗き、
取得したウィンドウハンドルに対して GetClassName で変換してみると
"Edit" と変換されていました。
どうもきちんと検索ができていないように見えます。
使い方が悪いのでしょうか?
ちなみにダイアログ中のボタンなどは正常に見つかっています。
どうしても見つからないなら、
とりあえず、enum〜で子Window列挙してみるとか。
ありがとうございます。
FindWindowExをやめてEnumChildWindowsを使用してみました。
が検索で引っかかったのはButton,Staticのみで
目的のEditクラスは見つかりませんでした。
画面自体にはコンボボックスやツールバーなどもあるので
それらも引っかかってもよさそうな気もするのですが・・
すみません。環境を書き忘れていました。
VB6SP5 , OS:Win2000 , IE6です。
自己レスです。
今回の目的の[名前を付けて保存]ダイアログのファイル名を入力する
エディットボックスですがFinderSystemというツールで調べた所
ComboBoxEx32 --> ComboBox --> Edit と
深い階層下にあることがわかりました。
以下のようにFindWindowExを3回実施して"Edit"を捕まえる
サンプルを海外で見つけたのでマネしてやってみましたが
まだ捕まえられていません。(ComboBoxEx32 が捕まえられません)
hMsgBox = FindWindow("#32770", "Open")
hComboBox = FindWindowEx(hMsgBox, 0, "ComboBoxEx32", "")
hComboBox2 = FindWindowEx(hComboBox, 0, "ComboBox", "")
hTextBox = FindWindowEx(hComboBox2, 0, "Edit", "")
う〜む。。。
FindWindowEx の変わりにGetWindowを使ったところ
直接Editは捕まえられませんでしたがComboBoxEx32が捕まえられました。
ですので ComboBoxEx32 --> ComboBox --> Editと
3回 GetWindow を実施したところうまくウィンドウハンドルを取得できました。
お騒がせしました。