アドインの助けを借りて、アプリケーションの毎日の使用を大幅に促進する追加機能を実装できます。 典型的なアプローチは簡単です-アドオンの開発のためのアプリケーションAPIを研究し、それを別個のライブラリとして実装します。 通常、複数の言語から選択できますが、C#は、.NetプラットフォームでWindows用のアプリケーションを開発するための普及率と人気のために、このリストに載る可能性が最も高いでしょう。
ただし、多くの場合、アドオンでは、アプリケーションの使用時に必要な何らかの視覚情報を常に表示する必要があります。 この問題の簡単な解決策-カスタムウィンドウを作成し、それをすべてのウィンドウの上に表示するか、フォアグラウンドに移動する-では、ユーザースペースの編成に不便が生じます。 どうにかしてそれらに耐えることができますが、そのようなウィンドウが複数ある場合はどうでしょうか?
原則として、アプリケーション環境自体では、すべてが必要に応じて編成されます-必要なアクションは、追加のウィンドウ、ユーザーが自分で設定したい場所とサイズの形で実装されます。 APIには、カスタムウィンドウを環境に統合するためのこの機能が含まれている必要があると想定できますが、奇妙なことに、そのような機能はおそらく存在しないでしょう。 ただし、本当に必要な場合は実装できます。
Windows用アプリケーションの動作の基本はイベントモデルです。アプリケーションは(ユーザーとオペレーティングシステムの両方から)メッセージを受信し、それらに応答します。たとえば、コンテンツを描画します。 この機能はすべてウィンドウプロシージャに実装されているため、このプロシージャを独自のプロシージャに置き換えて、ウィンドウ機能アルゴリズムを完全に変更できます。 このような低レベルのタスクを実行するには、WinAPIというオペレーティングシステムの機能を有効にする必要があります。 C#(.NET Framework)とWinAPI間の接続は、プラットフォーム呼び出しサービス(マネージコード(C#)からアンマネージWinAPI(C)プロシージャコードを呼び出す機能)を使用して実装されます。
たとえば、プロのCADシステムEplanのアドオンの開発を検討してください。 典型的なアドオンの開発経験が既にあると想定されている(そうでない場合は、
ここで基本を理解することができ
ます )ので、視覚的なアドオンウィンドウの実装に関連するアクションのみがコメントされます。 まず、現在開いているページのリストを(フォアグラウンドで)別のウィンドウに表示するアドオンオプションを検討してください。
メインのアドオンプログラムファイル、main.cs。
ここで最も簡単な追加が実装されます。アクション(Action Action_Test)の実行中に、テキストフィールドに必要な情報を入力し、フォームをダイアログモードで表示します。 結果を以下の図に示します。


ご覧のとおり、ウィンドウはEplan環境の上部に表示されます。この作業は、ウィンドウを閉じた後にのみ可能です。 これは非常に不便です。 通常の別のウィンドウに情報を表示するアドオンの2番目のバージョンを検討してください。 これを行うには、Action_TestクラスのExecuteメソッドで、文字列frm.ShowDialog()をfrm.Show()に置き換えます。 これで、アドオンウィンドウと環境を切り替えることができます。 ただし、アドオンウィンドウを閉じた後の正しい操作のためには、Action_Testクラスのコードを最新化する必要があります。
public class Action_Test : IEplAction { public Action_Test() { frm = new System.Windows.Forms.Form(); rtbox = new System.Windows.Forms.RichTextBox(); rtbox.Dock = System.Windows.Forms.DockStyle.Fill; rtbox.Location = new System.Drawing.Point( 0, 0 ); frm.Controls.Add( rtbox ); frm.FormClosing += FormClosing; } public bool OnRegister( ref string Name, ref int Ordinal ) { Name = "showWndAction"; Ordinal = 20; return true; } private void FormClosing( object sender, FormClosingEventArgs e ) { e.Cancel = true; ( sender as System.Windows.Forms.Form ).Hide(); } public bool Execute( ActionCallingContext oActionCallingContext ) { SelectionSet set = new SelectionSet(); Page[] pages = set.OpenedPages; rtbox.Clear(); foreach ( Page pg in pages ) { rtbox.AppendText( pg.Name + "\n" ); } frm.Show(); return true; } public void GetActionProperties( ref ActionProperties actionProperties ) { } System.Windows.Forms.Form frm; System.Windows.Forms.RichTextBox rtbox; }
どうやら、正しいウィンドウを閉じる処理(FormClosingメソッド)を追加する必要があったようです。 このようなソリューションは使用できますが、それでもユーザーにとって最も便利ではありません。 フォームが組み込みのフォームとして動作するようにするには、フォームを標準の環境ウィンドウに配置し、そのコンテンツを最初に非表示にします。 このウィンドウ機能を実装するには、WinApi関数を使用します。 アドオンコードを以下に示します。 操作アルゴリズムの詳細は、EplanWindowWrapperクラスのShowDlg()メソッドのコメントで説明されています。
メインのアドオンプログラムファイル、main.cs。
追加のソフトウェアモジュール、EplanWindowWrapper.cs。
主な機能は、EplanWindowWrapperクラスに実装されています。 クラスのインスタンスを作成するときは、標準ウィンドウのコンテンツを正しく置き換えるために必要なすべてを指定する必要があります。 必要な識別子を取得するには、Visual Studioの一部であるSpy ++ユーティリティを使用できます。 便宜上、WinApi関数(Platform Invoke)の必要なラッパーはすべて、個別のpiクラスに配置されます。
この実装の結果を以下に示します。

これで、ウィンドウは他の標準環境ウィンドウと同じように動作しますが、ユーザー情報が含まれ、自動化エンジニアが最も快適に作業できるようになりました。
このように、アドオンの開発用のAPIの機能が制限されている場合、原則として、アプリケーションに任意の機能を追加できます。