トップ回答者
C# 他exe起動し、コマンドボタンを押す

質問
回答
-
> A.exeからB.exeを起動し・・・
どぼんさんのサイトで他のプロセスを操作する Tips が公開されてます。参考にされてはいかがでしょうか。
http://dobon.net/vb/dotnet/process/index.html
> B.exeのフォームのリストボックスやコマンドボタンを操作することは可能なのでしょうか?
Forms アプリなら PostMessage や SendMessage 等のAPIを使えば可能です。PostMessage 等で検索すれば、様々なサンプルが見つかると思います。
ひらぽん http://d.hatena.ne.jp/hilapon/
-
AもBも自分で作成しているようですので、可否だけでいえば、可能です。
方法については、具体的なことが何も書かれていないので、もっとも汎用性の高い方法のキーワードだけ並べておきます。
まず、起動が別プロセスとして実行するということを意味しているのであれば、Process クラスについて調査してみてください。
二重起動(複数個立ち上がるなど)の問題についても考慮が必要です。
同一プロセス内でもウィンドウが出せればいいのなら、プロジェクト参照してDLLと同じ扱いで利用する方法もあります。
.NET は、EXEとDLLで全く同じではありませんが、クラスが公開されていれば、EXEをDLLと同じ形で利用することができます。
プロセスとして別に起動していなければならない場合は、プロセスを起動した後、プロセス間通信を行います。
プロセス間通信については、MSDNライブラリで一度調べてみてください。
>方法をご教授いただけると幸いです。
http://www.tt.rim.or.jp/~rudyard/torii009.html
わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/
-
Visual Studio2010 C#でA.exeとB.exeを作成し、A.exeからB.exeを起動し、B.exeのフォームのリストボックスやコマンドボタンを操作することは
可能なのでしょうか?
可能であれば、方法をご教授いただけると幸いです。
少し、内容を切り分けて考えた方がいいと思います。
B.exe を起動するのが、A.exeからだけなのか、それとも、B.exeを単体で起動することができるか、によって
B.exeのフォームのコントロール操作の方法も変わると思います。例えば、もしB.exeを起動するのがA.exeからだけならば、Assembly.LoadFileを使って、アセンブリを読込む方法が
簡単かも知れません。Assembly assembly = Assembly.LoadFile("B.exe"); if (assembly != null) { // 画面クラスタイプ取得 Type formType = assembly.GetType("Form1"); if (formType != null) { Form form = (Form)formType.InvokeMember(null, System.Reflection.BindingFlags.CreateInstance, null, null, null); if (form != null) { // 画面起動する場合 form.Show(); } } }
とすれば、フォームを起動することができます。
もし、B.exeがA.exe以外から起動可能であれば、他の方が言われているようにプロセスを使った操作となると思います。
すべての返信
-
> A.exeからB.exeを起動し・・・
どぼんさんのサイトで他のプロセスを操作する Tips が公開されてます。参考にされてはいかがでしょうか。
http://dobon.net/vb/dotnet/process/index.html
> B.exeのフォームのリストボックスやコマンドボタンを操作することは可能なのでしょうか?
Forms アプリなら PostMessage や SendMessage 等のAPIを使えば可能です。PostMessage 等で検索すれば、様々なサンプルが見つかると思います。
ひらぽん http://d.hatena.ne.jp/hilapon/
-
AもBも自分で作成しているようですので、可否だけでいえば、可能です。
方法については、具体的なことが何も書かれていないので、もっとも汎用性の高い方法のキーワードだけ並べておきます。
まず、起動が別プロセスとして実行するということを意味しているのであれば、Process クラスについて調査してみてください。
二重起動(複数個立ち上がるなど)の問題についても考慮が必要です。
同一プロセス内でもウィンドウが出せればいいのなら、プロジェクト参照してDLLと同じ扱いで利用する方法もあります。
.NET は、EXEとDLLで全く同じではありませんが、クラスが公開されていれば、EXEをDLLと同じ形で利用することができます。
プロセスとして別に起動していなければならない場合は、プロセスを起動した後、プロセス間通信を行います。
プロセス間通信については、MSDNライブラリで一度調べてみてください。
>方法をご教授いただけると幸いです。
http://www.tt.rim.or.jp/~rudyard/torii009.html
わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/
-
Visual Studio2010 C#でA.exeとB.exeを作成し、A.exeからB.exeを起動し、B.exeのフォームのリストボックスやコマンドボタンを操作することは
可能なのでしょうか?
可能であれば、方法をご教授いただけると幸いです。
少し、内容を切り分けて考えた方がいいと思います。
B.exe を起動するのが、A.exeからだけなのか、それとも、B.exeを単体で起動することができるか、によって
B.exeのフォームのコントロール操作の方法も変わると思います。例えば、もしB.exeを起動するのがA.exeからだけならば、Assembly.LoadFileを使って、アセンブリを読込む方法が
簡単かも知れません。Assembly assembly = Assembly.LoadFile("B.exe"); if (assembly != null) { // 画面クラスタイプ取得 Type formType = assembly.GetType("Form1"); if (formType != null) { Form form = (Form)formType.InvokeMember(null, System.Reflection.BindingFlags.CreateInstance, null, null, null); if (form != null) { // 画面起動する場合 form.Show(); } } }
とすれば、フォームを起動することができます。
もし、B.exeがA.exe以外から起動可能であれば、他の方が言われているようにプロセスを使った操作となると思います。
-
フォーラム オペレーターの星 睦美です。
A_M_Scofield さん、こんにちは質問にフォーラムの回答者からのアドバイスが、実現方法を検討する際のヒントになるのではないかと思います。
今回は私からスレッドに[回答の候補に設定] させていただきましたが、もし引き続き質問があれば返信をお願いします。
参考になる情報がありましたら、投稿者から[回答としてマーク] いただければ今後のフォーラムの情報交換の助けになりますので、よろしくお願いします。---
今回はフォーラム オペレーターから[回答としてマーク] させていただきました。(2013.8.27)
日本マイクロソフト株式会社 フォーラム オペレーター 星 睦美
- 編集済み 星 睦美 2013年8月27日 1:01 回答としてマーク