gpt4 book ai didi

c# - 从 C# 启动 Excel 进入后台

转载 作者:可可西里 更新时间:2023-11-01 10:55:20 26 4
gpt4 key购买 nike

我有一个 .xlsx 文件,我希望通过 C# 在 Excel 中启动该文件。为此,我将 Process.start() API 与 open 动词结合使用。

除了 Excel 窗口短暂出现然后隐藏在主应用程序后面之外,这工作正常。

奇怪的是,在完全相同的代码部分中使用完全相同的 API 启动 PDF(Adoboe Viewer 作为默认 View )工作正常,PDF 显示最大化并停留在那里。这似乎排除了我的应用程序在 Excel 启动后自行回到前台的可能性。

有谁知道这可能是什么原因造成的?

编辑:添加代码

    ProcessStartInfo startInfo = new ProcessStartInfo(filename);
startInfo.WindowStyle = windowStyle; // maximized

startInfo.Verb = "open";
startInfo.ErrorDialog = false;

Process.Start(startInfo);

最佳答案

启动 Excel:

Process myProcess = new Process();
myProcess.StartInfo.FileName = "Excel"; //or similar
myProcess.Start();
IntPtr hWnd = myProcess.Handle;
SetFocus(new HandleRef(null, hWnd));

从 user32.dll 导入 SetFocus 函数:

[DllImport("user32.dll", CharSet=CharSet.Auto,ExactSpelling=true)]
public static extern IntPtr SetFocus(HandleRef hWnd);

将导入放在函数之外。您可能必须让主线程休眠以等待 Excel 启动。

编辑:

System.Diagnostics.Process myProcess = new
System.Diagnostics.Process();
myProcess.StartInfo.FileName = "Excel"; //or similar
myProcess.Start();
myProcess.WaitForInputIdle(2000);
IntPtr hWnd = myProcess.MainWindowHandle;
bool p = SetForegroundWindow(hWnd);
if(!p)
{//could not set focus}

导入:

[DllImport("user32.dll", CharSet=CharSet.Auto,SetLastError=true)]
public static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll", CharSet=CharSet.Auto,SetLastError=true)]
public static extern IntPtr SetFocus(IntPtr hWnd);

这将等到应用程序启动,然后再尝试将焦点设置到它。

关于c# - 从 C# 启动 Excel 进入后台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4125116/

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