エクセルVBAから
他のアプリのスクロールバーを操作して、指定範囲で画面スクロールしたいと思っています。
キー入力では操作出来ない(マウス操作でのみスクロールされる)アプリなので、
Sendkeysは使えないのではないかと思い、
APIでハンドルを取得して、
SendMessageすればできるかなと思いましたが、APIについてよく分からないので、
とりあえず、メモ帳で以下を作成してみました。しかし、スクロールされません。
どこがいけないのか教えていただけないでしょうか?
よろしくお願いします。
***************
Public Declare Function FindWindowA Lib "User32" (ByVal cnm As String, ByVal cap As String) As Long
Public Declare Function SendMessage Lib "User32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const WM_VSCROLL = &H115
Public Const WM_HSCROLL = &H114
Public Const SB_TOP = &H6&
Public Const SB_BOTTOM = &H7&
Sub handle_get()
Dim Handle As Long
Dim Ap1 As String
Ap1 = "a.txt - メモ帳"
AppActivate Ap1
Handle = FindWindowA(vbNullString, Ap1)
SendMessage Handle, WM_VSCROLL, SB_BOTTOM, ByVal CLng(0)
SendMessage Handle, WM_HSCROLL, SB_TOP, ByVal CLng(0)
End Sub
***************
No.1ベストアンサー
- 回答日時:
こんにちは。
メモ帳の場合は、アプリケーションのウィンドウの下にエディットボックスコントロールが有り、其処で文字列を受け取っているので、エディットボックスコントロールのハンドルを取ってこないといけません。
更に上記の事例は、あくまでもメモ帳の場合ですので、操作対象のアプリケーションのウィンドウ構成如何で、取って来るべきハンドルが異なって来ます。
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd …
後、SB_BOTTOMですと、一気に下までスクロールしてしまうので、SB_LINEDOWNやSB_PAGEDOWN等を使用します。参考程度に。
Public Declare Function FindWindowA Lib "User32" (ByVal cnm As String, ByVal cap As String) As Long
Public Declare Function FindWindowEx Lib "User32" Alias "FindWindowExA" (ByVal hWndParent As Long, ByVal hWndChild As Long, ByVal lpszClass As String, ByVal lpszWindow As String) As Long
Public Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const WM_VSCROLL = &H115
Public Const WM_HSCROLL = &H114
Public Const SB_LINEDOWN = &H1
Public Const SB_TOP = &H6&
Public Const SB_BOTTOM = &H7&
Sub handle_get()
Dim Handle As Long
Dim HandleEdit As Long
Dim Ap1 As String
Ap1 = "a.txt - メモ帳"
AppActivate Ap1
Handle = FindWindowA(vbNullString, Ap1)
HandleEdit = FindWindowEx(Handle, 0, "Edit", vbNullString)
SendMessage HandleEdit, WM_VSCROLL, SB_LINEDOWN, ByVal CLng(0)
SendMessage HandleEdit, WM_HSCROLL, SB_LINEDOWN, ByVal CLng(0)
End Sub
machongolaさま
早速のご回答ありがとうございます!
>エディットボックスコントロールのハンドルを取ってこないといけません
それが足りなかったのですね。やっと分かりました。メモ帳では無事スクロールできました!
ご紹介いただいたリンク先の情報も参照していたのに、
実際の操作対象のアプリだと、FindWindowExを通すと、0が返って来てしまっていたため、削除していました。お手間おかけしました。
実際のアプリでは、キャプション名からウィンドウクラス名も取得してみたりしていたのですが、
意味不明な記号「AX:XXX:・・・」になってしまっていて、取ってきているハンドルが違うのかもしれません。
方向性的にはあっているように思いますので、もう少しトライしてみます。
ありがとうございました!
要件はご回答いただけましたので、この質問は閉じさせていただきます。
ご親切に回答ありがとうございました。
またの機会がありましたらよろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) VBA リボンののリカバリーでオーバーフローエラーになります 2 2023/07/04 19:07
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelでワードアートや図を常に...
-
PDFを(htmlのように)無限に縦...
-
リストビューをスクロールさせ...
-
エクセルVBAでフォームのListbo...
-
Visual Basicから Spreadのスク...
-
Excelで1.2行目だけ固定して...
-
ページ読み込み時に自動でスク...
-
Excelで一部分だけを常に表示さ...
-
複数の画像を横にスクロールさ...
-
VBE画面の縦のスクロールバ...
-
大きい表へのスクロールバーの...
-
リストビューのスクロールバー...
-
グループボックス内のコンボボ...
-
webページで横方向にアンカーを...
-
FC2 広告下げ禁止?
-
スプレッド上のマウスムーブイ...
-
新着情報などをスクロールしな...
-
エクセルで行を固定しその下か...
-
リストボックスをクリックした...
-
画像とグラフの重ね合わせ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelでワードアートや図を常に...
-
エクセルVBAでフォームのListbo...
-
PDFを(htmlのように)無限に縦...
-
リストビューをスクロールさせ...
-
Excelで1.2行目だけ固定して...
-
Excelで一部分だけを常に表示さ...
-
大きい表へのスクロールバーの...
-
Visual Basicから Spreadのスク...
-
vb,netでtextboxの文字を右から...
-
ページ訪問時にiframe内を自動...
-
アコーディオンで開かれたパネ...
-
マウスオーバー→ホイール回転で...
-
webページで横方向にアンカーを...
-
リストビューの水平スクロール...
-
ExcelVBAで他のアプリをスクロ...
-
IFRAMEでscrolling="yes|no"の...
-
リストビューのスクロールバー...
-
ページ読み込み時に自動でスク...
-
子要素のスクロールが親要素に...
-
Webサイト内でスクロールする小...
おすすめ情報