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

アドバイスをお願いします。
Excel-VBAで起動しているエクスプローラに対してハンドルを取得してクリックしたり、テキストボックスに文字をセットするプログラムを作って動かしています。
WindowsXPのときはできていたのですが、Windows7になったら正しく動作しなくなりました。

下のコードはエクスプローラのフォルダパスの右のボタン(添付ファイル参照)をクリックすべく、コーディングしたものです。

最後のSendMessage(hwnd, BM_CLICK, 0, 0) でクリックしたいのですが、その前にボタンのハンドルが取得できません。SDKのInspect Objectsで調べると、このボタンはClass="ToolbarWindow32"でName="前の場所"ですが、NativeWindowHandleが表示されず、Legacy.IAccessible.ChildID=1となっています。
このようなウィンドゥは別のやり方(IAccessible?)でないとクリックできないように感じていますが如何せん知識がありません。
どうしたらできるか、アドバイスよろしくお願いします。

Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As Any, ByVal lpWindowName As Any) As Long
Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" ( _
ByVal hwndParent As Long, _
ByVal hwndChildAfter As Long, _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal MSG As Long, ByVal wParam As Long, lParam As Any) As Long
Const BM_CLICK = &HF5
Private hwnd As Long

Sub Click_button()
hwnd = FindWindow("CabinetWClass", vbNullString)
hwnd = FindWindowEx(hwnd, 0, "WorkerW", vbNullString)
hwnd = FindWindowEx(hwnd, 0, "ReBarWindow32", vbNullString)
hwnd = FindWindowEx(hwnd, 0, "Address Band Root", vbNullString)
hwnd = FindWindowEx(hwnd, 0, "msctls_progress32", vbNullString)
hwnd = FindWindowEx(hwnd, 0, "ToolbarWindow32", vbNullString)
' この次が分からない。
RC = SendMessage(hwnd, BM_CLICK, 0, 0)
end sub

「windows7のエクスプローラをVBA」の質問画像

A 回答 (1件)

カテゴリは Visual Basic の方が妥当なんではと。


http://www.ka-net.org/ribbon/ri14.html

ウィンドウを持ってる親の要素から AccessibleObjectFromWindow で IAccessible を取り出して、
http://okwave.jp/c257.html
にある GetAcc 関数で子孫要素を検索すればいいのではと。
で、得られたら accDoDefaultAction でクリック。
    • good
    • 0

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