(BluePrism)汎用的にキー送信するオブジェクトを作る ~2 of 2 おまけ編~
おこんばんは、おむおむです。
ポケモン図鑑とかいうおもちゃにかまけてたら、
この記事書くの忘れてました。。。
前回↓
newgraduate19-rpa.hatenablog.com
まあ正直前回の分だけで完結でもいいんですが、
なんだか味気ないのでおまけを付けたいと思います。
プロセス名からウィンドウタイトルを取得
前回紹介した内容では、
ウィンドウタイトルを入力パラメータとして
アクションに与えていましたが、
その際は部分一致でOK!な作りにしていました。
が、なにやら複数合致するから完全一致にしたい!
と思われる方もいらっしゃるはず。
いや、いてくれないと困る(この記事を書くモチベ的に)
ので、コードステージを使って
プロセス名からウィンドウタイトルを取得する
アクションを実装してみたいと思います。
外部参照と名前空間の追加
まず、オブジェクトの初期化ページで、
情報ステージを開きます。
次に、コードオプションタブから
外部参照と名前空間を追加します。
今回使用するのはProcessクラスなので、
Microsoftのドキュメントを参照して
外部参照にSystem.Diagnostics.Process.dll、
名前空間にSystem.Diagnosticsを追加します。
docs.microsoft.com
完了したらOKで閉じます。
入出力用のデータアイテムを作成
続いて、新規アクションの作成して
入力と出力で使用するデータアイテムを追加します。
今回はプロセスの名前を入力、
ウィンドウタイトルが列挙された
コレクションを出力したいと思います。
もし、同一のプロセスが複数立ち上がっている場合、
ウィンドウタイトルが異なる可能性を考慮して
コレクションにしています。
コードで使用する入出力パラメータを設定
コードステージのプロパティを開き、
コード内で使用する入出力パラメータを追加します。
コード内であまり日本語を使いたくないので、
パラメータは英語っぽくしておきます。
今回の場合、入力はpName、
出力はcolとしておきました。
コードを記述
さて、ここまでくれば準備万端。
バンタンデザイン研究所です。
実際にコードを書いていきましょう。
まず、GetProcessByNameメソッドを使用して
Processの配列を取得し、要素数だけfor文で回します。
docs.microsoft.com
プロセスのウィンドウタイトルは、
MainWindowTitleプロパティから取得できます。
docs.microsoft.com
そして、出力用のコレクションにガンガン追加していきます。
完成したものがこちらになります。(〇分クッキング)
' 入力プロセス名に合致するプロセスを配列として取得 Dim pl As Process() = Process.GetProcessesByName(pName) ' 出力コレクションにWindow Titleというカラム追加 col.Columns.Add("Window Title", GetType(String)) Dim p As Process ' プロセスの配列だけ繰り返し For Each p In pl Dim currentRow As Datarow = col.NewRow If p.MainWindowTitle.Length <> 0 Then currentRow("Window Title") = p.MainWindowTitle col.Rows.Add(currentRow) End If Next
みんな大好き、dobon.netのほぼコピペで行けますね。
dobon.net
DataTableへの行追加は
こちらが参考になります。
zukucode.com
動かしてみよう
ウィンドウタイトルの異なる
メモ帳を2つ起動して試してみます。
やったぜ☆
まとめ
・コードステージがあれば極論なんでもできる
・でも保守性がた落ちだから最終手段です☆
大してユーザフレンドリーじゃないな。。。
ま、いいか☆
にゃーんにゃにゃんにゃーん
(次回以降は割とちゃんと役に立ちそうな記事書きます~)