|
分類:[.NET 全般]
分類:[VB.NET/VB2005 以降]
開発環境
Win7
Visual Studio 2015
「外部アプリのボタンを押下したい」
(プログラミング初心者につき、不備、誤った表現等が
あると思います、前もっておわびいたします。)
■■■■■■■■■■■■■■■■■■■■■■■■■■
【操作したい外部アプリの説明】
・複数のテキストボックスが羅列されている入力フォーム
・入力フォームは、同じ内容で10ページあるが、1ページづつしか画面に表示されない
・そのため、入力フォーム上部に、1から10までのページを画面変換するためのボタンがある。
・この、ボタン押下 ⇒ ページ変更(画面変換)をプログラムで操作したいです。
・ページ変更(画面変換)ができれば、ボタン押下自体はこだわっておりません。
「ボタンの見た目イメージ」
|< < [1 ]/10 > >|
※真ん中に現在のページ数を示すテキストボックス、と
その左右にページを送る/戻すためのボタンが4つ
ボタンを手動で操作する場合(2つの方法)
方法1:">" をクリックすると、画面が次ページに変わる
">|"をクリックすると、画面が最終ページ(10ページ)に変わる
方法2:テキストボックス [1 ]部分をクリックしてアクティブ化し
数字を任意のページ数に打ち変え、ENTERキーを
押下すると、画面がそのページに変換する。
■■■■■■■■■■■■■■■■■■■■■■■■■■
WINSPECTORでハンドルを調べた結果
WINSPECTORのターゲットマークをドラッグして、ボタン付近にあわせると
下記の2通りでのみ、フォーカスがあたります(赤枠の罫線で囲まれる)。
1. 全体 ⇒"|< < [1 ]/10 > >|"
WindowsForms10.Window.8.app.0.378734a "lbNavigator1"
2.テキストボックス ⇒"[1 ]"
WindowsForms10.EDIT.app.0.378734a "1"
※押下したいボタン ">" には個別にフォーカスが当たりません。
■■■■■■■■■■■■■■■■■■■■■■■■■■
できたこと:本当は、方法1:ボタンを押したいのですが、その方法が
分からないので、方法2:テキストボックス内のページ番号打ちかえ
(初期値の"1"から"2"へ)をトライし、下記のコードで成功しました。
【※関係のあるところのみ抜粋】
Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" _
(ByVal hwndParent As Integer, ByVal hwndChildAfter As Integer,
ByVal lpszClass As String, ByVal lpszWindow As String) As Integer
Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" _
(ByVal hWnd As Integer, ByVal MSG As Integer,
ByVal wParam As Integer, ByVal lParam As Integer) As Integer
Declare Function SendMessageStr Lib "user32.dll" Alias "SendMessageA" _
(ByVal hWnd As Integer, ByVal MSG As Integer,
ByVal wParam As Integer, ByVal lParam As StringBuilder) As Integer
Public Const WM_SETTEXT = &HC
Public Const BM_CLICK = &HF5
hwnd(320) = FindWindowEx(hwnd(119), 0, "WindowsForms10.Window.8.app.0.378734a", "lbNavigator1")
hwnd(321) = FindWindowEx(hwnd(320), 0, "WindowsForms10.EDIT.app.0.378734a", "1")
sb(173) = New StringBuilder("2")
Ret = SendMessageStr(hwnd(321), WM_SETTEXT, 0, sb(173))
ただ、このテキストボックスにフォーカスをあてる(アクティブ化する?)
方法が分からず、よって、次工程:ENTER押下でのページ変換、に
つなげることができません(※)。
※このテキストボックスにフォーカスがあたっていない状態で
SendKeys.Send("{ENTER}")すると、画面が無限ループのような
感じになり、アプリケーションがハングします。
■■■■■■■■■■■■■■■■■■■■■■■■■■
質問:ボタンの押し方、または、上述のテキストボックスに
フォーカスをあてる(アクティブ化する?)方法について、
ご教示承りたく何卒お願いします。
|