1

次のようにWordアプリケーションインスタンスを開始するコードがあります

Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();
app.Caption = "abcd_" + DateTime.Now.Ticks.ToString();

開始された単語インスタンスのプロセス ID を知る必要があります。Windows Server 2008 ではコードが機能しないため、FindWindow を使用してウィンドウ ハンドルを取得したり、GetWindowThreadProcessId を使用してハンドルからプロセス ID を取得したりすることはできません。

Process.GetProcessesByName("WINWORD")を使用して、すべてのワード プロセスを取得します。app.Caption で設定した値を私に与えることができる Process のプロパティはありますか? そうでない場合は、設定して後で Process 配列から読み取って Word の正しいインスタンスを識別することができる Word.Application の他のプロパティはありますか?

4

2 に答える 2

0

Process.MainWindowTitle プロパティを使用して、プロセスがコードによるものかどうかを判断できます。

ただし、いくつかの制限があります。

  1. new Microsoft.Office.Interop.Word.Application() を使用する場合、既定では windows という単語は表示されません。非表示の場合、Process.MainWindowTitle は空です。したがって、Pid を取得する前に、それを可視に設定することを示します。

  2. ドキュメントを開くと、MainWindowTitle はドキュメントのファイル名に変わります。

これが私のコードです:

    static void Main(string[] args)
    {
        string uniCaption = Guid.NewGuid().ToString();
        Word.Application oWordApp = new Word.Application();
        oWordApp.Caption = uniCaption;
        oWordApp.Visible = true;

        Process pWord = getWordProcess(uniCaption);

        //If you don't want to show the Word windows
        oWordApp.Visible = false;

        //Do other things like open document etc.
    }

    static Process getWordProcess(string pCaption)
    {
        Process[] pWords = Process.GetProcessesByName("WINWORD");
        foreach (Process pWord in pWords)
        {
            if (pWord.MainWindowTitle == pCaption)
            {
                return pWord;
            }
        }

        return null;
    }
于 2014-10-07T20:51:23.117 に答える