
アドバイスをお願いします。
Excel-VBAで起動しているエクスプローラに対してハンドルを取得してクリックしたり、テキストボックスに文字をセットするプログラムを作って動かしています。
WindowsXPのときはできていたのですが、Windows7になったら正しく動作しなくなりました。
下のコードはエクスプローラの現在のフォルダパスが表示されるところに(添付ファイル参照)文字を入れるものです。
最後のSendMessageAnyで1が返ってしまいます。何が考えられますでしょうか。どう対策したらいいでしょうか。
なおハンドルの値はSDKのInspect Objectsで確認していますので、正しく取得できていると思っています。
よろしくお願いします。
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 SendMessageAny Lib "user32.dll" _
Alias "SendMessageA" _
(ByVal hwnd As Long, _
ByVal MSG As Long, _
ByVal wParam As Long, _
ByVal lParam As Any) As Long
Const WM_SETTEXT = &HC
Private hwnd As Long
Private FOLDER As String
Sub Put_folder_name1()
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, "ComboBoxEx32", vbNullString)
hwnd = FindWindowEx(hwnd, 0, "ComboBox", vbNullString)
hwnd = FindWindowEx(hwnd, 0, "Edit", vbNullString)
FOLDER = "\\xx.xx.xx.xx\test"
RC = SendMessageAny(hwnd, WM_SETTEXT, 0, ByVal FOLDER)
end sub

No.2ベストアンサー
- 回答日時:
いや、アドレスバーは ToolbarWindow32 です。
(ちなみに Accessible Explorer で確認しました)
(取り合えず)C++で確認したところ、BM_CLICKでは無理でWM_LBUTTONDOWNなら反応しますが、座標の指定が面倒ですので
子要素のIAccessibleを取得してクリックさせるとか。
ただ、そんな事をしなくとも起動済みのExplorerが対象なら
ShellWindows Collectionで列挙してnavigateメソッドで遷移させればいいのでは。
http://www.moug.net/faq/viewtopic.php?t=68947
(fullnameかtypename等でIEを除外する処理必要)
kumatti1さん
>ShellWindows Collectionで列挙してnavigateメソッドで遷移
うまくいきました。ありがとうございました。
ただ、先があって検索文字列をセットして検索させたいのです。
検索させた後の結果の取り出し部分はできています。
検索文字列セット部分の質問はVisualBasicのカテゴリにて登録しました。(「windows7のエクスプローラをVBAで操作-3」 URL:http://oshiete.goo.ne.jp/qa/8595559.html)
引き続きアドバイス戴けたら有難いです。
よろしくお願いします。
No.1
- 回答日時:
後続の質問で何でそんな事がしたいのか謎だったのですが、ここで繋がりました。
私も今調べて知ったのですが、デフォルトでは ComboBoxEx32 は非表示になってますね。
エクスプローラのアドレスバーをクリックすると入力が可能になると。
でも、パスを指定して開くのならば
CreateObject("Shell.Application").Explore "C:\"
とかでいいのではと。
この回答への補足
kumatti1さん
回答ありがとうございました。
非表示という状態があるのですね。知りませんでした。
> エクスプローラのアドレスバーをクリックすると
"msctls_progress32"のハンドルでSendMessage(hwnd, BM_CLICK, 0, 0)を
すればいいのですかね?
今、デバッグできる環境でないので明日デバッグしてみます。
(パスを指定して開くのは用途が違っていましたので、こっちの線で進めます)
あと「windows7のエクスプローラをVBAで操作-2」の方の回答もありがとうございました。
やっぱ、IAccessibleですか。勉強してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたい 6 2023/01/23 12:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Windows起動時 Sharepointのド...
-
winlogon.exeが勝手にPCを終了...
-
[P]の文字だけが入力できない
-
プログラミングをしたいのです...
-
システム情報とは>
-
DVDレコーダーについて
-
スタートアップでのプログラム...
-
タスクバーにプリンターのアイ...
-
win起動時に特定プログラムをタ...
-
Power Speed を削除方法について!
-
NT4.0のサービスへの登録について
-
PC起動時に出るものを消したい...
-
windows 終了時にプログラムを...
-
「既に起動されています」と出...
-
更新プログラムを取得しました
-
不要のスタートアップ教えて下...
-
強制終了をしたらPCが激重にな...
-
タスクマネージャが起動しなく...
-
ソフトの削除について
-
PCを起動するとJAVAが・・・
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Windows起動時 Sharepointのド...
-
[P]の文字だけが入力できない
-
winlogon.exeが勝手にPCを終了...
-
スタートアップでのプログラム...
-
プログラミングをしたいのです...
-
win10でスタートアップに登録し...
-
ソフトの削除について
-
ウインドーズ10のシャットダウン
-
スタートアップ・タスクスケジ...
-
「既に起動されています」と出...
-
不要のスタートアップ教えて下...
-
タスクバーにプリンターのアイ...
-
あたりまえだと思いますがLogMe...
-
毎朝8:30にエクセル自動起動し...
-
PCのシャットダウン時に現れる...
-
プログラムの基本優先度を常に’...
-
シャットダウン時に何やらエラ...
-
デスクトップのアイコンが全て...
-
起動直後~15分くらいPCのガリ...
-
windowsタスクマネージャ消して...
おすすめ情報