4

バックグラウンドで実行されている他の多くのツールの顔となるアプリケーションに取り組んでいます。問題に直面しています。バックグラウンド アプリケーションの起動中に、特定のファイルをロードする必要があります (ファイル --> ロード --> ファイル名)。

フロントエンド アプリケーションFappを 、バックグラウンド アプリケーションを としますBapp。メニュー項目Fappのハンドルを取得してロード機能をトリガーすることは可能ですか。Bapp'sボタンのハンドルは取得できますが、メニュー項目のハンドルは取得できません。

現在、AutoIt を使用してこれを達成しています。C# 自体でこれを達成しようとしています。

4

3 に答える 3

0

Bapp が何らかの方法で Win32 API を呼び出すことができる場合、これはSendMessage()を使用してカスタムWM_USERメッセージをFapp に送信することで実現できます。Fapp でこのメッセージを処理し、適切なアクションを実行します。

コントロールのハンドルを取得してそのハンドラーを呼び出すことは正しい方法ではないと思います。

于 2013-05-12T20:43:50.180 に答える
0

これが 2 つのアプリケーションを相互に通信させる正しい方法であると確信していますか?

BApp のソース コードがなく、使用できる API もない場合、対話型ユーザーのふりをすることが BApp と対話する唯一の方法である可能性があります。問題が多いことを認識して、いつ何が起こるかを考えてください。

  • BApp はまだ実行されていません
  • BApp でモーダル ダイアログが開いている
  • BApp が操作中 (またはハング) で、そのメニューが無効になっている
  • BApp が新しいバージョンに更新され、その UI が変更されました
  • インタラクティブなユーザーが、操作の途中でフォーカスを変更します。

これに代わる方法は、UI を使用してアプリケーションを単体テストする場合と同じことを行うことです。これは、関数を実行する呼び出しを作成してアプリケーションを自動化するという同じことを行っているためです。この場合、結果が期待どおりであることをテストします。これは WPF の投稿であるため、MVVM を使用してアプリケーションを作成していると仮定できます。(UI を変更するときに脆弱性を回避するための) 最善の方法は、UI (ビュー) を無視し、その下にあるレイヤー、つまり VM を呼び出すことです。 (ビューモデル)。

実際、BApp アプリケーション内に自己ホスト WCF 接続を追加して、外部から呼び出すことができるようにするのは非常に簡単です。

        this._host = new ServiceHost(service);
        this._host.AddServiceEndpoint(typeof(IContract), new NetTcpBinding(), address);
        this._host.Open();

これにより、2 人が完全に独立して会話できるようになります。

于 2013-05-08T10:52:08.777 に答える