[英]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 属性来判断进程是否由您的代码决定。
但是有一些限制:
使用 new Microsoft.Office.Interop.Word.Application() 时,默认情况下不显示 windows 一词。 当它被隐藏时,Process.MainWindowTitle 是空的。 因此,在获得 Pid 之前,您将其设置为可见。
打开文档后,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.