RPAエンジニアの雑記

RPA(Blue Prism)について色々記載してます。

(BluePrism)汎用的にキー送信するオブジェクトを作る ~2 of 2 おまけ編~

おこんばんは、おむおむです。

ポケモン図鑑とかいうおもちゃにかまけてたら、
この記事書くの忘れてました。。。
f:id:newgraduate19:20200729233215p:plain

前回↓
newgraduate19-rpa.hatenablog.com

まあ正直前回の分だけで完結でもいいんですが、
なんだか味気ないのでおまけを付けたいと思います。

プロセス名からウィンドウタイトルを取得

前回紹介した内容では、
ウィンドウタイトルを入力パラメータとして
アクションに与えていましたが、
その際は部分一致でOK!な作りにしていました。

が、なにやら複数合致するから完全一致にしたい!
と思われる方もいらっしゃるはず。
いや、いてくれないと困る(この記事を書くモチベ的に)

ので、コードステージを使って
プロセス名からウィンドウタイトルを取得する
アクションを実装してみたいと思います。

外部参照と名前空間の追加

まず、オブジェクトの初期化ページで、
報ステージを開きます。
f:id:newgraduate19:20200729223140p:plain

次に、コードオプションタブから
外部参照名前空間を追加します。

今回使用するのはProcessクラスなので、
Microsoftのドキュメントを参照して
外部参照にSystem.Diagnostics.Process.dll
名前空間System.Diagnosticsを追加します。
f:id:newgraduate19:20200729224954p:plain
docs.microsoft.com

完了したらOKで閉じます。

入出力用のデータアイテムを作成

続いて、新規アクションの作成して
入力と出力で使用するデータアイテムを追加します。

今回はプロセスの名前を入力、
ウィンドウタイトルが列挙された
コレクションを出力したいと思います。

もし、同一のプロセスが複数立ち上がっている場合、
ウィンドウタイトルが異なる可能性を考慮して
コレクションにしています。

f:id:newgraduate19:20200729230102p:plain

コードで使用する入出力パラメータを設定

コードステージのプロパティを開き、
コード内で使用する入出力パラメータを追加します。

コード内であまり日本語を使いたくないので、
パラメータは英語っぽくしておきます。

今回の場合、入力はpName
出力はcolとしておきました。

f:id:newgraduate19:20200729230440p:plain
f:id:newgraduate19:20200729230452p:plain

コードを記述

さて、ここまでくれば準備万端。
バンタンデザイン研究所です。

実際にコードを書いていきましょう。

まず、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つ起動して試してみます。
f:id:newgraduate19:20200729232710g:plain

やったぜ☆

まとめ

・コードステージがあれば極論なんでもできる
・でも保守性がた落ちだから最終手段です☆

大してユーザフレンドリーじゃないな。。。
ま、いいか☆

にゃーんにゃにゃんにゃーん
(次回以降は割とちゃんと役に立ちそうな記事書きます~)