
エクセル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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
大きい表へのスクロールバーの...
-
TikTokLiteの自動スクロールの...
-
エクセルVBAでフォームのListbo...
-
リストビューのスクロールバー...
-
文章の自動スクロール
-
常に画像の大きさを横幅100%で...
-
Excelでワードアートや図を常に...
-
リストビューをスクロールさせ...
-
webページで横方向にアンカーを...
-
写真を右から左にスクロールさ...
-
C# Panel領域の下部に余白を設...
-
マウスでコロコロしたいんですが…
-
スクロールバーの位置指定
-
MSFlexGridのスクロールバー位置
-
デジタル時計の時刻合わせの方...
-
マイページはどこを開くの
-
エクセルのシート上に別のシー...
-
【このスクリプトの実行を中止...
-
Outlookでこのような表示がされ...
-
ウインドウを毎回同じ位置、大...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelでワードアートや図を常に...
-
PDFを(htmlのように)無限に縦...
-
リストビューをスクロールさせ...
-
エクセルVBAでフォームのListbo...
-
TikTokLiteの自動スクロールの...
-
マウスオーバー→ホイール回転で...
-
vb,netでtextboxの文字を右から...
-
大きい表へのスクロールバーの...
-
アコーディオンで開かれたパネ...
-
Visual Basicから Spreadのスク...
-
webページで横方向にアンカーを...
-
ページ読み込み時に自動でスク...
-
ページ訪問時にiframe内を自動...
-
文章の自動スクロール
-
リストボックスをクリックした...
-
グループボックス内のコンボボ...
-
JTableの行ヘッダーを非表示に...
-
ジャバスクリプトを教えて下さい
-
スクロールボタンを押してもス...
-
このサイトのスクロール逆じゃ...
おすすめ情報