切换应用程序并将其分配给实例
本文关键字:分配 实例 应用程序 | 更新日期: 2023-09-27 18:34:11
我在切换应用程序并将它们分配给变量时遇到问题。这就是我目前所拥有的。
[DllImport("user32.dll")]
public static extern void SwitchToThisWindow(IntPtr hWnd, bool b);
Process[] procs = Process.GetProcessesByName("Excel");
foreach (Process proc in procs)
{
SwitchToThisWindow(proc.MainWindowHandle, false);
}
最后,我想将该Excel窗口分配给xlApp。我试过了:
xlAppl = SwitchToThisWindow(proc.MainWindowHandle, false);
但显然这不起作用,因为界面是空白的。我尝试查看GetActiveWindow
我想获得活动窗口并分配它,但它的返回值不是对象,而是 IntPtr。有没有办法摆脱这种情况?
关于您到目前为止所拥有的内容,我想指出几件事:
- 对于 SwitchToThisWindow MSDN 状态 - [此函数不适用于一般用途。它可能在后续版本的 Windows 中被更改或不可用。所以如果我是你,我个人不会用那个。
- 您的 Process.GetProcessByName 调用将返回所有 excel 进程。然后,您将尝试将每个内容带到前台。当然,只有最后一个实际上会出现在前景中,因为它们不可能都在前景中。您可能应该决定一种更准确的方式来选择您想要的。
- 您假设 MainWindowHandle 不是 IntPtr.Zero,这在所有情况下都不是有效的假设。MainWindowHandle 只有在呈现了可见窗口后才会具有一个值。
如果我是你,我会尝试使用 SetForegroundWindow 和 SetActiveWindow API。
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern bool SetForegroundWindow(
IntPtr hWnd
);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr SetActiveWindow(
IntPtr hWnd
);
伙计们,我找到了解决方案。如果其他人正在寻找这个,答案很简单:
Excel.Application xlApp = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");