掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
表示したダイアログのボタンを即押しするには? (ID:122559)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
初めて質問いたします。 現在VisualBasic6.0(SP5)とWIN32APIを使って 「他アプリケーション(市販されたプログラム)の操作」をするプログラムを 作っています。 やりたい処理は「コマンドボタンをクリックしたときに表示されるダイアログ から目的のキャプションがついたボタン(「はい」「いいえ」など)を探し出す」 (その後に探し出したボタンをクリックする)ものなのですが、ボタンクリック で出てきたダイアログからボタンを即座に探し出すことができません。 (ダイアログを既に開いた状態で同処理を行うとボタン検索ができます。 アプリケーションのフォームとダイアログのタイトルは両方とも同じです) アプリケーションのクラスとダイアログのクラス(#32770)を使って ウィンドウハンドルを導くことはできるのですが、APIを本格的に 使うのは初めてなので解決法をうまく導くことができません(T-T) 解決策に繋がるものをご教授願えれば幸いです。 ---------(やりたい処理のソース(API定義は割愛)) Public Function MsgPic(ByVal strWName As String, ByVal strBName As String) As Boolean Dim WINDOW_NAME As String '* フォーム・ダイアログのキャプション Dim BUTTON_NAME As String '* ボタンのキャプション Dim hWnd As Long Dim hChild As Long Dim i As Long Dim lRet As Long MsgPic = False WINDOW_NAME = strWName BUTTON_NAME = strBName 'フォームのハンドルを取る hWnd = FindWindow(vbNullString, WINDOW_NAME) If hWnd = 0 Then Exit Function End If 'ダイアログのハンドルを取る hChild = FindWindowEx(hWnd, 0, "#32770", WINDOW_NAME) If hChild = 0 Then Exit Function End If 'ウィンドウ内の部品名をリストに列記 frmMain.List1.Clear lRet = EnumChildWindows(hChild, AddressOf EnumChildProc, 0) 'リストから目的ボタンのキャプションを探す For i = 0 To frmMain.List1.ListCount - 1 ’目標ボタンのキャプションと一致するか If InStr(1, frmMain.List1.List(i), BUTTON_NAME) > 0 Then MsgPic = True Exit Function End If Next i End Function Public Function EnumChildProc(ByVal hWnd As Long, lParam As Long) As Long Dim Ret As Long Dim Leng As Long Dim Name As String 'バッファ確保 Name = String(255, Chr(0)) Leng = Len(Name) '名前を取得する Ret = GetWindowText(hWnd, Name, Leng) '* 子ウィンドウがなくなるまで繰り返す If Ret <> 0 Then frmMain.List1.AddItem Name End If EnumChildProc = 1 End Function
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.