从 MS-Word ApplicationClass 获取 PID? [英] Get PID from MS-Word ApplicationClass?

查看:23
本文介绍了从 MS-Word ApplicationClass 获取 PID?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

考虑这个代码:

using Microsoft.Office.Interop.Word;

ApplicationClass _application = new ApplicationClass();

我可以从 _application 启动的 Winword.exe 进程中获取 PID 吗?

Can I get the PID from the Winword.exe process that was launched by the _application?

我需要 PID,因为文件损坏,我无法退出 ApplicationClass,即使使用此代码:

I need the PID because with corrupted files, I just can't quit the ApplicationClass, even using this code:

_application.Quit(ref saveFile, ref missing, ref missing);
System.Runtime.InteropServices.Marshal.ReleaseComObject(_application);
GC.Collect();
GC.WaitForPendingFinalizers();

我无法搜索winword.exe进程并杀死它,因为我将有几个,我不知道该杀死哪个.如果我可以为每个 ApplicationClass 获得一个 PID,我就可以杀死正确的 winword.exe 进程,该进程让我无法退出.

I can't search for the winword.exe process and kill it, because I will have several, and I don't know which one to kill. If I can get a PID for each ApplicationClass, I could just kill the correct winword.exe process that is giving me troubles to quit.

推荐答案

这是怎么做的.

//Set the AppId
string AppId = ""+DateTime.Now.Ticks(); //A random title

//Create an identity for the app

this.oWordApp = new Microsoft.Office.Interop.Word.ApplicationClass();
this.oWordApp.Application.Caption = AppId;
this.oWordApp.Application.Visible = true;

while (GetProcessIdByWindowTitle(AppId) == Int32.MaxValue) //Loop till u get
{
    Thread.Sleep(5);
}

///Get the pid by for word application
this.WordPid = GetProcessIdByWindowTitle(AppId);

///You canh hide the application afterward            
this.oWordApp.Application.Visible = false;

/// <summary>
/// Returns the name of that process given by that title
/// </summary>
/// <param name="AppId">Int32MaxValue returned if it cant be found.</param>
/// <returns></returns>
public static int GetProcessIdByWindowTitle(string AppId)
{
   Process[] P_CESSES = Process.GetProcesses();
   for (int p_count = 0; p_count < P_CESSES.Length; p_count++)
   {
        if (P_CESSES[p_count].MainWindowTitle.Equals(AppId))
        {
                    return P_CESSES[p_count].Id;
        }
   }

    return Int32.MaxValue;
}

这篇关于从 MS-Word ApplicationClass 获取 PID?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆