C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: C#2010 別ウィンドウのボタンコントロール操作


(過去ログ 114 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■67233 / inTopicNo.1)  C#2010 別ウィンドウのボタンコントロール操作
  
□投稿者/ net (1回)-(2013/07/18(Thu) 12:46:40)

分類:[C#] 

C#2010で作成したアプリケーション(APP1)のボタンコントロールを今回、作成するアプリケーション(APP2)から操作(クリック)したい場合はどのようなことが必要でしょうか?
初歩的な質問で大変恐縮ですが、参考になるソース、資料がありましたらお手数ですがご教示の程宜しくお願い致します。


引用返信 編集キー/
■67237 / inTopicNo.2)  Re[1]: C#2010 別ウィンドウのボタンコントロール操作
□投稿者/ shu (350回)-(2013/07/18(Thu) 14:57:55)
No67233 (net さん) に返信
> C#2010で作成したアプリケーション(APP1)のボタンコントロールを今回、作成するアプリケーション(APP2)から操作(クリック)したい場合はどのようなことが必要でしょうか?
> 初歩的な質問で大変恐縮ですが、参考になるソース、資料がありましたらお手数ですがご教示の程宜しくお願い致します。
>
>
やりたい事が初歩的なことではなく実装するのに結構手間がいるので
キーワードだけ、
こういう操作を一般的にプロセス間通信と呼びます。
ウィンドウメッセージを使う
ソケット通信を行う。=>.NetRemotingを使用すると実装しやすいかも
共有メモリを使う
などがあります。APP1のソースを変更できない場合はウィンドウメッセージを使うと良いです。
引用返信 編集キー/
■67245 / inTopicNo.3)  Re[2]: C#2010 別ウィンドウのボタンコントロール操作
□投稿者/ Azulean (179回)-(2013/07/18(Thu) 22:36:27)
横から指摘するだけとなってしまって申し訳ないのですが、.Net Remoting は .NET 4 世代では「新規の開発には、このトピックを適用しないでください」と位置づけられており、WCF が後継とされています。参考までに。

http://msdn.microsoft.com/ja-jp/library/vstudio/kwdt6w2k
引用返信 編集キー/
■67249 / inTopicNo.4)  Re[3]: C#2010 別ウィンドウのボタンコントロール操作
□投稿者/ net (3回)-(2013/07/19(Fri) 09:37:14)
shuさん、Azuleanさん

ご連絡有難う御座います。Windowsメッセージによるプロセス間通信で対応する様に致しました。

APP1のボタンを操作するにあたり、APP2の以下のような制御フローを作成して対応中です。

 (1) 起動中(.exe)のAPP1のウインドウ・ハンドルを取得する。
 (2) ウインドウ・ハンドルからコントロールの列挙
 (3) 列挙したボタン、テキストボックスなどのキャプションを調べて目的のコントロール(ボタンなど)のウインドウ・ハンドルを取得
 (4) 取得したボタンのウインドウ・ハンドルにクリック指示を送信する。

(1)は問題なく、取得出来ていることを確認しました。但し、(2)、(3)、(4)がうまく対応出来ておりません。
EnumChildWindows、EnumChildProc関数を使用して対応していますが、このあたりの実装方法がよくないのかと思っております。

サンプルソースや資料などありましたら、ご教示頂く。尚、制御フローの考え方に間違いありましたらご指摘の程お願い致します。
引用返信 編集キー/
■67251 / inTopicNo.5)  Re[4]: C#2010 別ウィンドウのボタンコントロール操作
□投稿者/ とっちゃん (129回)-(2013/07/19(Fri) 10:35:45)
とっちゃん さんの Web サイト
No67249 (net さん) に返信
>
> APP1のボタンを操作するにあたり、APP2の以下のような制御フローを作成して対応中です。
>
>  (1) 起動中(.exe)のAPP1のウインドウ・ハンドルを取得する。
>  (2) ウインドウ・ハンドルからコントロールの列挙
>  (3) 列挙したボタン、テキストボックスなどのキャプションを調べて目的のコントロール(ボタンなど)のウインドウ・ハンドルを取得
>  (4) 取得したボタンのウインドウ・ハンドルにクリック指示を送信する。
>
> (1)は問題なく、取得出来ていることを確認しました。但し、(2)、(3)、(4)がうまく対応出来ておりません。
> EnumChildWindows、EnumChildProc関数を使用して対応していますが、このあたりの実装方法がよくないのかと思っております。
>
APP1のアプリは何で作られていますか?もし、WPF(XAMLを使ったアプリ)だと、上記の方法ではウィンドウハンドルを取り出すことはできません。
#WPFには子ウィンドウがないため、外部からはここのコントロールになにかを。。。ということはできない

あと。。。APP1のアプリの操作したいボタンは、実行時に動的に変化するようなものなのでしょうか?
それとも、固定的に作られたものなのでしょうか?
前者だと、実行時に調べないと無理ですが、後者なら事前にSPY++などでウィンドウ詳細を調べ上げておいて、
実行時はその情報をもとにダイレクトにもぐりこんでいくという方法もあります。

一度SPY++(VSをインストールしていれば一緒にインストールされていると思います。Expressはわかりませんが)でウィンドウを調べてみるといいと思いますよ。

引用返信 編集キー/
■67252 / inTopicNo.6)  Re[5]: C#2010 別ウィンドウのボタンコントロール操作
□投稿者/ net (4回)-(2013/07/19(Fri) 10:54:58)
とっちゃんさん

ご連絡有難う御座います。

APP1のプログラムはC#で作成しています。WPFでは無いため、問題なく親ウィンドウハンドルは取得出来ました。

実行時に動的に変化するものではありません。toolstrip中のボタン(APP1のみの場合、F5で実行可)をクリックしたいというだけです。
そのボタンがAPP1のスタートキーになるイメージです。

ご提案のとおり、Spy++は既に使用中でダイレクトにもぐりこんでいく事をしています。
引用返信 編集キー/
■67261 / inTopicNo.7)  Re[5]: C#2010 別ウィンドウのボタンコントロール操作
□投稿者/ net (5回)-(2013/07/19(Fri) 14:00:58)
APP1のウィンドウハンドルの列挙は無事出来ました。

Spy++で確認したところ、目的のコントロール(ボタン)はtoolstripの中にあるのですが、toolstripのウィンドウハンドルまでしか取得出来ませんでした。

単純にhWnd(toolstripのウィンドウハンドル)に以下のようにPostMessage関数を使用して試みましたが実行されません。

PostMessage(hWnd, WM_KEYDOWN, VK_F5, 0);

補足:VK_F5 = 0x74、WM_KEYDOWN = 0x100

どのようにすればそのボタンを操作(実行)することが可能なのでしょうか?お手数おかけ致しますが、ご存知の方いましたらご連絡お願い致します。
引用返信 編集キー/
■67264 / inTopicNo.8)  Re[6]: C#2010 別ウィンドウのボタンコントロール操作
□投稿者/ とっちゃん (131回)-(2013/07/19(Fri) 14:17:44)
とっちゃん さんの Web サイト
No67261 (net さん) に返信
> APP1のウィンドウハンドルの列挙は無事出来ました。
>
> Spy++で確認したところ、目的のコントロール(ボタン)はtoolstripの中にあるのですが、toolstripのウィンドウハンドルまでしか取得出来ませんでした。
>
> 単純にhWnd(toolstripのウィンドウハンドル)に以下のようにPostMessage関数を使用して試みましたが実行されません。
>
> PostMessage(hWnd, WM_KEYDOWN, VK_F5, 0);
>
> 補足:VK_F5 = 0x74、WM_KEYDOWN = 0x100
>
> どのようにすればそのボタンを操作(実行)することが可能なのでしょうか?お手数おかけ致しますが、ご存知の方いましたらご連絡お願い致します。

F5キーを押すと、動く。。。
ということなので、SendKeys.Send で、アプリにメッセージ送るとかできませんかね?
アクティブにする(APP1のトップレベルウィンドウを、見つけ出して、SetForegroundWindowする)ことはできそうなので...

いくつか制約はあるかもしれませんが。。。(ほかにポップアップしているものがないなど。。。)
これなら、たぶん難しいことを考えずに行けると思います。

引用返信 編集キー/
■67266 / inTopicNo.9)  Re[3]: C#2010 別ウィンドウのボタンコントロール操作
□投稿者/ shu (352回)-(2013/07/19(Fri) 14:41:29)
No67245 (Azulean さん) に返信
> 横から指摘するだけとなってしまって申し訳ないのですが、.Net Remoting は .NET 4 世代では「新規の開発には、このトピックを適用しないでください」と位置づけられており、WCF が後継とされています。参考までに。
>
> http://msdn.microsoft.com/ja-jp/library/vstudio/kwdt6w2k

失礼しました。勉強不足だったようで古い情報を提案してしまいました。
引用返信 編集キー/
■67267 / inTopicNo.10)  Re[4]: C#2010 別ウィンドウのボタンコントロール操作
□投稿者/ net (6回)-(2013/07/19(Fri) 15:06:44)
とっちゃんさん、shuさん

ご連絡有難う御座います。無事にAPP1をAPP2から制御することが出来ました。
今回は色々勉強になりました。有難う御座いました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -