0

ユーザーが自分のハード ドライブから Office ドキュメントを開く場合、ドキュメントの詳細を取得するためにモーダル ウィンドウとして exe (win フォーム アプリケーション) を開く必要があります。

そのために、オフィス ドキュメント ファイルが開いているかどうかを監視するために、クライアント マシンで実行されるコンソール アプリを開発しました。以下のコードを見つけてください

static void Main(string[] args)
{
    var UIAEventHandler = new AutomationEventHandler(OnUIAEvent);
    Automation.AddAutomationEventHandler(WindowPattern.WindowOpenedEvent,
                            AutomationElement.RootElement,
                            TreeScope.Children, UIAEventHandler);
    Console.ReadLine();

    Automation.RemoveAllEventHandlers();
}

public static void OnUIAEvent(object src, AutomationEventArgs args)
{
    AutomationElement element;

    try
    {
        element = src as AutomationElement;
    }
    catch
    {
        return;
    }
    string name = "";
    if (element == null)
        name = "null";
    else
    {
        name = element.GetCurrentPropertyValue(
                AutomationElement.NameProperty) as string;
    }
    if (name.Length == 0) name = "< NoName >";
    string guid = Guid.NewGuid().ToString("N");
    string str = string.Format("{0} : {1}", name, args.EventId.Id);
    if ((element.Current.ClassName.Equals("XLMAIN", StringComparison.InvariantCultureIgnoreCase) == true && name.Contains(".xlsx")) || (element.Current.ClassName.Equals("OpusApp", StringComparison.InvariantCultureIgnoreCase) == true && name.Contains(".docx")))
    {

        Process.Start(@"E:\experiment\TestingWindowsService\UserInfomation\bin\Debug\UserInfomation.exe", element.Current.Name);
        //Automation.AddAutomationEventHandler(
        //     WindowPattern.WindowClosedEvent,
        //     element, TreeScope.Element, (s, e) => UIAEventHandler1(s, e, guid, name));
        Console.WriteLine(guid + " : " + name);
        // Environment.Exit(1234);
    }
}

exeを開くためOnUIAEventに使用しているイベントハンドラーに表示されている場合は、期待どおりに機能しています。Process.Startしかし、私はexeが開いたドキュメントのモーダルとして開く必要があることを望んでいます。以下のコードは、exeのフォームロードです。

private void Form1_Load(object sender, EventArgs e)
{
    this.TopMost = true;
    this.CenterToScreen();
}

Windows アプリケーションを開いて、開いているドキュメントのモーダルとして開くことはできますか?

4

1 に答える 1

0

外部アプリケーションが要件を考慮してコーディングされていない限り、それは困難です。コードにアクセスできる場合 (持っているようです)、コンソール アプリケーションにフォームを含めることができます (コンソール アプリケーションから winform を実行する方法はこちらを参照してください)。

最も簡単なオプションは、Windows フォーム プロジェクトを開始し、出力タイプをコンソール アプリケーションに変更することです。または、System.Windows.Forms.dll への参照を追加して、コーディングを開始します。

using System.Windows.Forms;

[STAThread] static void Main() {
    Application.EnableVisualStyles();
    Application.Run(new Form()); // or whatever 
} 

重要なのは、Main() メソッドの [STAThread] で、完全な COM サポートに必要です。

Creator をオーバーライドし、ドキュメントに一致するパラメーターを追加したり、ログ/監視に必要なものを追加したりできます。

于 2016-12-17T06:41:13.103 に答える