gpt4 book ai didi

c# - 如何获取隐藏的 Excel 应用程序实例的 ProcessID (PID)

转载 作者:行者123 更新时间:2023-11-30 23:24:41 26 4
gpt4 key购买 nike

我有一个 Microsoft.Office.Interop.Excel.Application 实例。为了确保 EXCEL.EXE 进程及时终止,我需要找到在创建 Application 对象时实例化的 ProcessID。

我找到了 samples为此,当 Excel Application 有一个窗口时。

有没有办法为“隐藏”实例执行此操作,即当没有窗口绑定(bind)到 EXCEL.EXE 进程时,即当 excelApp.Hwnd 不是设置?

最佳答案

Application.Hwnd 有一个有效的窗口句柄,即使应用程序没有可见的工作簿窗口,您也可以使用它来获取关联 Excel 应用程序的进程。

[DllImport("user32.dll")]
static extern int GetWindowThreadProcessId(int hWnd, out int lpdwProcessId);

Process GetExcelProcess(Microsoft.Office.Interop.Excel.Application excelApp)
{
int id;
GetWindowThreadProcessId(excelApp.Hwnd, out id);
return Process.GetProcessById(id);
}

void TerminateExcelProcess(Microsoft.Office.Interop.Excel.Application excelApp)
{
var process = GetExcelProcess(excelApp);
if (process != null)
{
process.Kill();
}
}

private void button1_Click(object sender, EventArgs e)
{
// Create Instance of Excel
Microsoft.Office.Interop.Excel.Application oXL = new Microsoft.Office.Interop.Excel.Application();
try
{
// Work with oXL
}
finally
{
TerminateExcelProcess(oXL);
}
}

注意:这个question有一些答案解释了为什么当您通过自动化从 C# 完成使用它时 Excel 进程不会终止(除非您非常迂腐地确保释放对您显式使用的任何对象的每个引用)。

关于c# - 如何获取隐藏的 Excel 应用程序实例的 ProcessID (PID),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37636319/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com