我有启动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的正确实例?
答案 0 :(得分:0)
您可以使用Process.MainWindowTitle属性判断进程是否在您的代码中。
但是有一些限制:
使用新的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;
}
答案 1 :(得分:-1)
那是什么(untestet):
<强>更新强>
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。