C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

「外部アプリのボタンを押下したい」


(過去ログ 135 を表示中)

[トピック内 1 記事 (1 - 1 表示)]  << 0 >>

■79683 / inTopicNo.1)   「外部アプリのボタンを押下したい」
  
□投稿者/ より (1回)-(2016/04/30(Sat) 21:41:12)

分類:[.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}")すると、画面が無限ループのような
 感じになり、アプリケーションがハングします。

■■■■■■■■■■■■■■■■■■■■■■■■■■

質問:ボタンの押し方、または、上述のテキストボックスに
フォーカスをあてる(アクティブ化する?)方法について、
ご教示承りたく何卒お願いします。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -