Webページをスクレイピングする際に問題になるダイアログ処理をVBでやるためにいろいろ調べた結果、どうにかこうにか動くようになった。
いろんなページから参考を探して丸写しだけでは結構動かない。何が違うのかは分からないがおそらくフォーカスとかだろう。
・凄く参考にしたサイト
http://happylife.miraiserver.com/wp/net-%E3%81%A7%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E3%82%92%E4%BD%95%E3%81%A8%E3%81%8B%E3%81%99%E3%82%8B-1215.html
'ダイアログ処理用サブスレッド
Private Sub start_dialog()
Dim t As New System.Threading.Thread(New System.Threading.ThreadStart(AddressOf watch_dialog))
t.Start()
End Sub
Private Sub watch_dialog()
Dim hwnd As Integer
Dim hwnd2 As Integer
Do
'ファイルダウンロード確認ダイアログの処理
System.Threading.Thread.Sleep(500)
hwnd = FindWindow("#32770", "ファイルのダウンロード")
If (hwnd <> 0) Then
hwnd = FindWindow("#32770", "ファイルのダウンロード")
hwnd2 = FindWindowEx(hwnd, 0, "Button", "保存(&S)")
If (hwnd <> 0 And hwnd2 <> 0) Then
Call SendMessage(hwnd2, WM_ACTIVATE, 1, 0)
System.Threading.Thread.Sleep(500)
Call SendMessage(hwnd2, BM_CLICK, 0, 0)
End If
End If
'ファイル保存先指定ダイアログの処理
System.Threading.Thread.Sleep(500)
hwnd = FindWindow("#32770", "名前を付けて保存")
If (hwnd <> 0) Then
hwnd2 = FindWindowEx(hwnd, 0, "Button", "保存(&S)")
If (hwnd2 <> 0) Then
Call SendMessage(hwnd2, WM_ACTIVATE, 1, 0)
System.Threading.Thread.Sleep(600)
Call SendMessage(hwnd2, BM_CLICK, 0, 0)
End If
End If
'ダウンロード完了ダイアログの処理
hwnd = FindWindow("#32770", "ダウンロードの完了")
If (hwnd <> 0) Then
hwnd = FindWindow("#32770", "ダウンロードの完了")
hwnd2 = FindWindowEx(hwnd, 0, "Button", "閉じる")
If (hwnd <> 0 And hwnd2 <> 0) Then
Call SendMessage(hwnd2, WM_ACTIVATE, 1, 0)
System.Threading.Thread.Sleep(600)
Call SendMessage(hwnd2, BM_CLICK, 0, 0)
End If
End If
Loop
End Sub
0 件のコメント:
コメントを投稿