teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

6

進捗晒し

2019/07/08 09:52

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,5 +1,12 @@
1
1
  宜しくお願いいたします。
2
2
 
3
+ ### 進捗
4
+ IAccesibleで検索して来た方ごめんなさい。UIAutomationでやってます。C#なので・・・。
5
+
6
+ [現状のコードはこんな感じ](https://qiita.com/it_dokata_bottomline/items/741ce0cabded499d2581)というのをQiitaに投げつけときました。見やすいかなあと思って。
7
+
8
+ 今のところ`CacheRequest`してから値を取ろうとすると上手くいっていないのでそこらへんにも取り組んでみます。
9
+
3
10
  ### 前提・実現したいこと
4
11
 
5
12
  他のアプリケーションのFormに実装された`DataGridView`の`DataGridViewCell`の値を`IAccesible`オブジェクトを利用して取得したい。

5

方針を追加。文章にまとめると状況が理不尽すぎて冷静でいられない。

2019/07/08 09:52

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -140,6 +140,12 @@
140
140
 
141
141
  2行目とか2セル目が見られていないのでこのままでは全く役に立たない。
142
142
 
143
+ ### 方針
144
+
145
+ - UIAutomationを利用
146
+ - AutomationIDプロパティ経由でのAutomationElement取得はしない
147
+ できればAutomationIDを取得したいが開発環境では肝心の対象プログラムが動かず、開発用に提供された本番機にはWindowsSDKを入れるなとの指示が降りている。(開発機では環境上の都合でソフト自体が起動しない。)
148
+
143
149
  ### 補足情報(FW/ツールのバージョンなど)
144
150
 
145
151
  - Visual Studio 2015 SP1

4

無造作になってた表記を丁寧に修正

2019/07/05 08:57

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -2,24 +2,20 @@
2
2
 
3
3
  ### 前提・実現したいこと
4
4
 
5
- 他のアプリケーションのFormに実装された`DataGridView`の`DataGridViewCell`の値を`IAccesible`オブジェクトから取得したい。
5
+ 他のアプリケーションのFormに実装された`DataGridView`の`DataGridViewCell`の値を`IAccesible`オブジェクトを利用して取得したい。
6
6
  [以前の質問](https://teratail.com/questions/194548)で提案してもらった`Accessiblity`を利用したアプリケーションの外部操作を実現しようとしています。
7
7
 
8
- `Reflection`なる仕組みが.NETで構築したアプリでは有効らしく実際自作の`DataGridView`にいい加減な値が入ってるだけのバカチョンアプリを外部操作できたのですが、対象アプリは起動時に何らかの引数を必要としているためにそもそも`Assembly.LoadFrom()`で起動させられず代替案と`Accessibility`を利用した方法を試そうとしています。
8
+ `Reflection`なる仕組みが.NETで構築したアプリでは有効らしく実際自作の`DataGridView`にいい加減な値が入ってるだけのバカチョンアプリを外部操作できたのですが、対象アプリは起動時に何らかの引数を必要としているためにそもそも`Assembly.LoadFrom()`で起動させられず頓挫たので今度は`Accessibility`を利用した方法を試そうとしています。
9
9
  - 対象アプリはC#で作られたマルチウィンドウアプリ
10
10
  - `IAccesssible`を使う理由は対象アプリが社外品でPGと細かい話や要求が出来ないため無理やり情報を抜き出す必要があるため
11
11
  - 対象アプリには一切手出し出来ない
12
12
  - `IAccessible`縛りではない。もっと他に便利な仕組みがあればそちらに移行してもよい。使えれば何でもOK
13
13
 
14
-
15
14
  現状`IAccessible.accName`とか`IAccessible.accValue`とかの値を覗き見ることが出来てはいるのですが、以下の問題が発生しています。
16
15
 
17
-
18
-
19
16
  ### 発生している問題・エラーメッセージ
20
17
 
21
18
  `DataGridViewCell`にあたるオブジェクトを抜き出せていない。
22
- 全ての`DataGridViewCell`の内容を取得できず1行目の内容のみ取得している。
23
19
 
24
20
  ### 該当のソースコード
25
21
 
@@ -119,11 +115,13 @@
119
115
  ```
120
116
 
121
117
  ### 対象のDataGridViewと現状の出力
118
+ 対象のDataGridViewの状態
122
- |列1|列2|
119
+ |||
123
120
  |:--|:--|
124
121
  |hoge1|fuga2|
125
122
  |piyo3|nyan4|
126
123
 
124
+ 出力
127
125
  ```
128
126
  name = "DataGridView" , value = "" , type = "System.__ComObject"
129
127
  name = "トップの行" , value = "トップの行" , type = "System.__ComObject"

3

タグ追加

2019/07/04 04:28

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
File without changes

2

コードの見た目

2019/07/03 04:22

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -27,7 +27,8 @@
27
27
  // テストコードの概要
28
28
  private void ReadDataGirdView(IntPtr dataGridViewHandler)
29
29
  { // DataGirdViewのハンドラを渡して、IAccessibleのaccNameとかaccValueの内容を列挙したものをMessageBoxで表示させる
30
+ var accessibleObj
30
- var accessibleObj = AccessibleObjectExtractor.ExtractAccessibleObjectFromWindow(dataGridViewHandler);
31
+ = AccessibleObjectExtractor.ExtractAccessibleObjectFromWindow(dataGridViewHandler);
31
32
  string msg;
32
33
  msg = MakeMsg(accessibleObj);
33
34
  MakeChildrenMsg(accessibleObj, ref msg);

1

// テストコードの概要

2019/07/03 02:15

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -24,6 +24,7 @@
24
24
  ### 該当のソースコード
25
25
 
26
26
  ```cs
27
+ // テストコードの概要
27
28
  private void ReadDataGirdView(IntPtr dataGridViewHandler)
28
29
  { // DataGirdViewのハンドラを渡して、IAccessibleのaccNameとかaccValueの内容を列挙したものをMessageBoxで表示させる
29
30
  var accessibleObj = AccessibleObjectExtractor.ExtractAccessibleObjectFromWindow(dataGridViewHandler);