エクセル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も見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
【VBA】UI Automationコンボボックスを制御したい
Visual Basic(VBA)
-
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
ExcelVBAでスペースキー操作したい
Excel(エクセル)
-
-
4
VBAにてメッセージボックスを最前面に表示させる
その他(プログラミング・Web制作)
-
5
VBAで任意のウインドウのサイズを変更する方法
Visual Basic(VBA)
-
6
ExcelVBAでPDFを閉じるソース
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
リストビューをスクロールさせ...
-
Visual Basicから Spreadのスク...
-
vb,netでtextboxの文字を右から...
-
Excelでワードアートや図を常に...
-
JTableの行ヘッダーを非表示に...
-
コマンドボタンを押している間...
-
エクセルVBAでフォームのListbo...
-
大きい表へのスクロールバーの...
-
Excelの質問で票の途中に...
-
safariのスクロールが遅い?
-
JAVAアプレットでgoogleMAP
-
スクロール時の行ズレ [ASP.NET...
-
スクロールバーの表示について
-
文章の自動スクロール
-
ExcelVBAで他のアプリをスクロ...
-
webページで横方向にアンカーを...
-
PDFを(htmlのように)無限に縦...
-
html js 横軸の長いチャート
-
マイページはどこを開くの
-
デジタル時計の時刻合わせの方...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelでワードアートや図を常に...
-
エクセルVBAでフォームのListbo...
-
PDFを(htmlのように)無限に縦...
-
リストビューをスクロールさせ...
-
Excelで1.2行目だけ固定して...
-
Excelの質問で票の途中に...
-
Excelで一部分だけを常に表示さ...
-
大きい表へのスクロールバーの...
-
ページ訪問時にiframe内を自動...
-
Visual Basicから Spreadのスク...
-
vb,netでtextboxの文字を右から...
-
webページで横方向にアンカーを...
-
リストビューの表示開始行変更
-
スクロール位置を中央にしたい
-
マウスオーバー→ホイール回転で...
-
VBE画面の縦のスクロールバ...
-
IFRAMEでscrolling="yes|no"の...
-
ポストバック時のスクロール位...
-
マウスでコロコロしたいんですが…
-
文章の自動スクロール
おすすめ情報