使用System.Diagnostics.Process对象识别单词实例的进程ID

问题描述 投票:1回答:3

我有如下代码可启动Word应用程序实例

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

现在,我需要知道已启动的单词实例的进程ID。我无法使用FindWindow获取窗口句柄,也无法使用GetWindowThreadProcessId从句柄获取进程ID,因为该代码在Windows Server 2008上不起作用。

我使用Process.GetProcessesByName(“ WINWORD”)获得所有单词处理。是否有Process的任何属性可以为我提供我们在app.Caption中设置的值?如果没有,我是否可以设置Word.Application的其他任何属性,以后再从Process数组读取以识别Word的正确实例?

c# ms-word system.diagnostics word-automation word-automation-service
3个回答
0
投票

您可以使用Process.MainWindowTitle属性来判断该过程是否由您的代码决定。

但是有一些限制:

  1. 当您使用新的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;
    }

0
投票

感谢这对​​我有用。我使用了相同的方法,并且能够从对象中获取单词process的PID。


-1
投票

那(unestet):

更新

Word.Application wdapp;
try 
{     
    Process wordProcess = System.Diagnostics.Process.Start("Path to WINWORD.EXE");
    wdApp = (Word.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application");
} 
catch (COMException) 
{
     Type type = Type.GetTypeFromProgID("Word.Application");
     wdapp = System.Activator.CreateInstance(type);
 } 

wdApp应该是开始的单词。然后您通过wordProcess实例获得了进程ID。

© www.soinside.com 2019 - 2024. All rights reserved.