- PR -

別アプリの制御・監視

投稿者投稿内容
じじ
会議室デビュー日: 2006/01/16
投稿数: 8
投稿日時: 2006-02-15 11:46
お世話になっております。

C#にて別アプリ(Aとします)の制御・監視を行うアプリを作成しております。
制御というのは、Aの画面上にあるボタンを押すなり、[Alt]+[F]などのキー操作を自作のアプリから行いたく、
監視というのは、Aの画面がある画面に遷移したことを検知したいといった内容です。

Aの起動は自作のアプリから起動してもいいし、既に起動している状態のものを制御するでも、どちらでも構いません。

System.Diagnostics.Processクラスから、別アプリの起動や終了の検知をする方法はわかったのですが、
Win32APIのSendMessageのようなもので、Aの画面を動かしたいのです。

このような危ない仕組みは作らないのが一番なのですが、
Aに変わるシステムを作り直すわけにもいかないため、作成に至っております。

そもそもこんなことは出来ないのか、ということも含め、御知恵を拝借できればと思っております。

以下のサイトを参考にしましたが、解決には至っておりません。
[Microsoft Win32 と Microsoft .NET Framework API との対応]
http://www.microsoft.com/japan/msdn/net/general/win32map.asp#win32map_messageandmessagequeuefunction
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-15 11:53
A も CLR のアプリケーションでしょうか?
AppDomain とか .NET Remoting などで検索されると良いかな。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
じじ
会議室デビュー日: 2006/01/16
投稿数: 8
投稿日時: 2006-02-15 12:13
じゃんぬねっと様、アドバイスありがとうございます!
ご指示いただいたものについて引き続き調べて見ますが、A自体の実装についてはブラックボックスなのです。
つまり、外部の会社が作成したもので、何で作ったか、CLR上で動作しているのか…ソースコードさえ無い状態です。

私が出来ることはSpy++ツールなどで情報を拾うことくらい?と思っております。
そのような状況でも、AppDomainを使用してAのイベントを呼ぶことなど出来るでしょうか…。

情報提供が不足しており、申し訳ございませんでした。
引き続きアドバイス等いただけましたら幸いです。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-15 12:48
えー、それだとどうにもならないような...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2006-02-15 14:12
GUIのテストUTILのようなもの?(製品はあるようです)
部分画像を定期キャプチャして、事前登録の画像と比較・・・

Windowsのバッチ処理化のソフトにも、画面を見れるものがあった。
(準備のわずらわしさで使ったことは無いです)
通常のバッチ化は、スロー操作(sleep 多用)にして、画面は見ない。
[ メッセージ編集済み 編集者: MMX 編集日時 2006-02-15 14:15 ]

GUIでのバッチ化はWindows3.1のころからありますが
結局 VBA とかエディタマクロのように、スクリプト機構
が入っていないとうまく行かない。(OOならUNO)
本当に画面を読むのは、GUIのテストツールくらいだ。

最近なら、バイトコードを掘り返して、アスペクトの注入みたいのを
考えるのでしょうか。

[ メッセージ編集済み 編集者: MMX 編集日時 2006-02-16 00:49 ]
じじ
会議室デビュー日: 2006/01/16
投稿数: 8
投稿日時: 2006-02-15 15:10
じゃんぬねっと様、MMX様、ご返信ありがとうございます
MMX様の仰るようなアプリがあることは知りませんでした(^^;;

ただ、情報をまとまって出せず申し訳ございませんが、
別アプリ"A"を起動した後、特定の制御を自作アプリからした後、
一定画面になるまではユーザの入力を受け付ける必要がございます。

自作アプリ起動 ⇒ 自作アプリからAを起動 ⇒ Aを特定の画面になるまで制御(ボタンを押す、キー入力など)
⇒(ユーザの入力) ⇒ ユーザ入力により特定の画面(終了画面)になるのを待つ ⇒ Aを終了させる
⇒ 自作アプリの処理

といった流れを行いたく検討しております。
System.Diagnostics.Process.StandardInputを使用してキー入力を行えないか、などを試しておりますが、未だ解決しておりません。

VB6の時代にSendMessageを使ってマウスクリックやキーボードイベントメッセージの作成をして
別アプリを制御した記憶があったので、その線で出来ないかと考えておりました。

引き続き調べて見たいと思いますが、何でも結構ですので思いつく対応策があれば教えていただければ幸いです。

すみませんが宜しくお願いいたします<(_ _)>
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-15 15:14
引用:

じじさんの書き込み (2006-02-15 15:10) より:

VB6の時代にSendMessageを使ってマウスクリックやキーボードイベントメッセージの作成をして
別アプリを制御した記憶があったので、その線で出来ないかと考えておりました。


VB6 同様の制御は同じようにできます。
が、監視はできないんじゃないかな、という意味で書きました。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
k_kazu
常連さん
会議室デビュー日: 2006/02/11
投稿数: 25
投稿日時: 2006-02-15 15:49
引用:

VB6の時代にSendMessageを使ってマウスクリックやキーボードイベントメッセージの作成をして
別アプリを制御した記憶があったので、その線で出来ないかと考えておりました。


でしたら
CodeProject
http://www.thecodeproject.com/csharp/InteropSignon.asp
PINVOKE.NET
http://www.pinvoke.net/default.aspx/user32/SendMessage.html
が参考になると思います。
# PINVOKE.NET のサンプルは、取得できる文字が1文字短いので修正が必要ですが・・。

スキルアップ/キャリアアップ(JOB@IT)