切换应用程序并将它们分配给实例

时间:2014-12-12 15:47:23

标签: c# processor user32

我在切换应用程序并将其分配给变量时遇到问题。这是我到目前为止所做的。

[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);
}

最后,我想指定要分配给xlApp的Excel窗口。我试过了:
xlAppl = SwitchToThisWindow(proc.MainWindowHandle, false);但显然这不起作用,因为界面是空的。我试着看GetActiveWindow我正在考虑获取活动窗口并分配它,但它的返回值不是对象它的IntPtr。 有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:1)

到目前为止,我想指出一些事情:

  1. 对于SwitchToThisWindow MSDN状态 - [此功能不适用于一般用途。它可能会在后续版本的Windows中被更改或不可用。如果我是你,我个人不会使用那个。
  2. 您的Process.GetProcessByName调用将返回所有excel进程。然后你将尝试将每个人带到前台。当然只有最后一个实际上会在前台,因为它们不能都在前台。你可能应该选择一种更准确的方法来选择你想要的那种。
  3. 您假设MainWindowHandle不是IntPtr.Zero,在所有情况下都不是有效的假设。一旦有可见的窗口,MainWindowHandle将只有一个值。
  4. 如果我是你,我会尝试使用SetForegroundWindowSetActiveWindow 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
        );
    

答案 1 :(得分:0)

伙计们,我找到了解决方案。如果其他人正在寻找这个问题,那么这里的答案非常简单:

Excel.Application xlApp = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");