none
C# 他exe起動し、コマンドボタンを押す RRS feed

  • 質問

  • Visual Studio2010 C#でA.exeとB.exeを作成し、A.exeからB.exeを起動し、B.exeのフォームのリストボックスやコマンドボタンを操作することは

    可能なのでしょうか?

    可能であれば、方法をご教授いただけると幸いです。

    2013年7月30日 2:39

回答

  • > A.exeからB.exeを起動し・・・

    どぼんさんのサイトで他のプロセスを操作する Tips が公開されてます。参考にされてはいかがでしょうか。

    http://dobon.net/vb/dotnet/process/index.html

    > B.exeのフォームのリストボックスやコマンドボタンを操作することは可能なのでしょうか?

    Forms アプリなら PostMessageSendMessage 等のAPIを使えば可能です。PostMessage 等で検索すれば、様々なサンプルが見つかると思います。


    ひらぽん http://d.hatena.ne.jp/hilapon/

    • 回答の候補に設定 星 睦美 2013年8月6日 5:21
    • 回答としてマーク 星 睦美 2013年8月27日 1:00
    2013年7月30日 5:55
    モデレータ
  • "C# 別のアプリ 操作" でググればそれらしいものがヒットすると思います。

    それ以前に、A.exeとB.exeの内容を含んだ一つのexeを作ればもっと簡単な気もしますが、どうでしょうか。
    B.exeがA.exeからしか呼び出されなければ、ですが。

    • 回答の候補に設定 星 睦美 2013年8月6日 5:21
    • 回答としてマーク 星 睦美 2013年8月27日 0:59
    2013年7月30日 6:01
  • 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/

    • 回答の候補に設定 星 睦美 2013年8月6日 5:21
    • 回答としてマーク 星 睦美 2013年8月27日 0:59
    2013年7月30日 7:14
  • 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以外から起動可能であれば、他の方が言われているようにプロセスを使った操作となると思います。

    • 回答の候補に設定 星 睦美 2013年8月6日 5:21
    • 回答としてマーク 星 睦美 2013年8月27日 0:59
    2013年8月1日 11:20

すべての返信

  • > A.exeからB.exeを起動し・・・

    どぼんさんのサイトで他のプロセスを操作する Tips が公開されてます。参考にされてはいかがでしょうか。

    http://dobon.net/vb/dotnet/process/index.html

    > B.exeのフォームのリストボックスやコマンドボタンを操作することは可能なのでしょうか?

    Forms アプリなら PostMessageSendMessage 等のAPIを使えば可能です。PostMessage 等で検索すれば、様々なサンプルが見つかると思います。


    ひらぽん http://d.hatena.ne.jp/hilapon/

    • 回答の候補に設定 星 睦美 2013年8月6日 5:21
    • 回答としてマーク 星 睦美 2013年8月27日 1:00
    2013年7月30日 5:55
    モデレータ
  • "C# 別のアプリ 操作" でググればそれらしいものがヒットすると思います。

    それ以前に、A.exeとB.exeの内容を含んだ一つのexeを作ればもっと簡単な気もしますが、どうでしょうか。
    B.exeがA.exeからしか呼び出されなければ、ですが。

    • 回答の候補に設定 星 睦美 2013年8月6日 5:21
    • 回答としてマーク 星 睦美 2013年8月27日 0:59
    2013年7月30日 6:01
  • 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/

    • 回答の候補に設定 星 睦美 2013年8月6日 5:21
    • 回答としてマーク 星 睦美 2013年8月27日 0:59
    2013年7月30日 7:14
  • 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以外から起動可能であれば、他の方が言われているようにプロセスを使った操作となると思います。

    • 回答の候補に設定 星 睦美 2013年8月6日 5:21
    • 回答としてマーク 星 睦美 2013年8月27日 0:59
    2013年8月1日 11:20
  • フォーラム オペレーターの星 睦美です。
    A_M_Scofield さん、こんにちは

    質問にフォーラムの回答者からのアドバイスが、実現方法を検討する際のヒントになるのではないかと思います。
    今回は私からスレッドに[回答の候補に設定] させていただきましたが、もし引き続き質問があれば返信をお願いします。

    参考になる情報がありましたら、投稿者から[回答としてマーク] いただければ今後のフォーラムの情報交換の助けになりますので、よろしくお願いします。

    ---
    今回はフォーラム オペレーターから[回答としてマーク] させていただきました。(2013.8.27)


    日本マイクロソフト株式会社 フォーラム オペレーター 星 睦美


    • 編集済み 星 睦美 2013年8月27日 1:01 回答としてマーク
    2013年8月6日 5:26