質問編集履歴
6
進捗晒し
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
方針を追加。文章にまとめると状況が理不尽すぎて冷静でいられない。
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
無造作になってた表記を丁寧に修正
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()`で起動させられず
|
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
|
-
|
|
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
タグ追加
title
CHANGED
File without changes
|
body
CHANGED
File without changes
|
2
コードの見た目
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
|
-
|
31
|
+
= AccessibleObjectExtractor.ExtractAccessibleObjectFromWindow(dataGridViewHandler);
|
31
32
|
string msg;
|
32
33
|
msg = MakeMsg(accessibleObj);
|
33
34
|
MakeChildrenMsg(accessibleObj, ref msg);
|
1
// テストコードの概要
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);
|