繁体   English   中英

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

[英]Identify process id of word instance using System.Diagnostics.Process object

我有如下代码启动 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 的正确实例?

您可以使用 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;
    }

那怎么样(未测试):

更新

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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM