Windowsフォームアプリの行取得

こんにちは。

明細を表示しているWindowsフォームアプリにて、
複数行表示されている情報から、特定の行の情報を取得したいのですが
idx以外に行を特定できる情報がない、アンカーでの特定ができないなどの理由で上手くいっていません。
Windowsフォームアプリで、行を特定する方法を教えていただけないでしょうか。

以下、やってみたことです。

①idx以外に行を特定できる情報がない
UIExplorerで確認したところ、明細行や明細行内で取得したい項目(テキストボックス)で
何行かを特定する情報はidxしかありませんでした。
コーディング規約等でidxの使用は避けるべきと記載があり、
また明細をスクロールするとidxが変更されるため使用しない方針としたいです。

②アンカーでの特定ができない
行番号が表示されているので、アンカーの使用を検討しました。
①同様にidxの使用を避ける為、UIExplorerの「UIフレームワーク」の設定をアクティブなアクセシビリティに設定し
セレクターを取得したところ、name='行番号’となったのでそのセレクターを使用しようと思いましたが
別のテキストボックスで行番号と同じ値が使用されていると、そちらを取得する場合がありました。

③データスクレイピングができない
「このコントロールは、データ抽出をサポートしていません。」とダイアログが表示されます。

こんにちは

Windowsアプリの、特にカスタムテーブルは取れるセレクターが少ないケースが多く、一概にこうやれば取れるという方法は無いのではないかと思います。

今回のケースは上記の情報だけですと、例えば以下は試してみる価値はあるのではと思います。

・相対セレクターをもう少し頑張ってみる:name属性で行番号を取れるのであれば、当該フォーム部品を特定できればなんとかなりそうな気もしますが....

・Get Full Text等のテキストをがさっと取ってくるアクティビティや Ctrl+a → Ctrl+c等でテキスト全体をとってきて、その後文字列操作で当該行の情報を取ってくる。

1 Like

回答ありがとうございます!
ご提案いただいた方法を試してみました。

⇒部品を特定するために、セレクターに「ctrlname=‘取得したいフォーム名’」を追加してみても
検証で×が表示されてしまいました。
その他いろいろ試してみたのですが、検証が×ばかりで手詰まりです。

⇒1行に表示されている情報が多く、マッピングが難しかったです。
また、スクロールしないと見れないデータの取得ができていませんでした。

今のところ別案として、idxを指定して取得できた行番号が操作したい行番号であれば、
そのidxを使用して行内の情報を取得しようと思っています。

こんにちは

なかなか厳しそうですね...

あと試すとすれば
・可能ならUiAutomation.Activities Packageのバージョンを最新にしてみる
・UiExplorerのUIフレームワークを明示的に変更して、セレクターを取ってみる
等ですかね...。

回答ありがとうございます。

⇒「アクティブなアクセシビリティ」と「UIオートメーション」で取得できるセレクターは異なるのですが、取得したいフォーム名など追加しても期待通りの動きとなりませんでした。

Windowsフォームアプリの事例があまり見当たらなかったのですが、
あまり使われてないのでしょうか?たまたま上がってなかっただけでしょうか。。。

こんにちは

やはりうまくいきませんでしたか..

一言でWindowsフォームアプリといっても.netベースのものもあれば、MFCベースのものもあったり、またそれぞれのコンポーネントがカスタム化されていたりするので、一概にこうすれば取得できるという方法論が論じにくい側面があります。
実際に触ってみるとなんらかの糸口を見つけることができるかもしれませんが、リモートですとこれも難しいかと思います。

実態としては、経験上、特に企業内ではクラシックなアプリケーションが動いていることはよくあり、Webに比べると手を焼くケースが多いですね...。

一旦、以下の方法でテキストボックスから値を取得することができているのですが
できれば1-1のループはしたくないなと思ってます。。。
他の解決策を募る為、未解決のままとさせていただきます。すみません。

1.行をループ(DataTableに明細を持っています)
1-1 idxを1~表示件数ループ
1-2 idxを使用して行番号のテキストボックスから行番号を取得
1-3 1の行とテキストが同じ場合、そのidxを使用して別のテキストボックスから値を取得

Webの操作は簡単にできますが、内製のアプリの操作を自動化するのはやはり手を焼くケースが多いのですね。勉強になります!ありがとうございます。

1 Like