打开另一个应用程序后面的窗口

本文关键字:窗口 应用程序 另一个 | 更新日期: 2023-09-27 18:26:01

我想点击应用程序上的按钮打开几个窗口(IE窗口、Outlook邮件窗口、记事本窗口)。

问题:当我点击按钮,所有这些应用程序一个接一个地打开时。我自己的应用程序(用户点击了它)在混乱的窗口中丢失了。

我想打开应用程序后面的所有这些窗口。有什么建议吗?我可以使用任何标准的API来实现这种行为?

逻辑:我想做一些类似于打开窗口的事情,窗口的Z顺序为2。这样,当其他窗口打开时,我的活动窗口将始终位于顶部(z顺序=1)。

任何指针都会有所帮助。

感谢

Karephul

更新:http://msdn.microsoft.com/en-us/library/windows/desktop/ms633545%28v=vs.85%29.aspx我使用这个PInvoke将我的应用程序窗口设置为最上面的。然后所有其他窗口都会自动打开。完成后,我使用相同的PInvoke取消设置最上面的窗口标志。更多细节在我发布的链接中。

打开另一个应用程序后面的窗口

您可以将表单的TopMost属性设置为True。

确保允许用户更改或只在短时间内更改,因为这确实会让用户感到恼火。

有两种方法,调用win32命令SetForgroundWindow或切换到最顶层。


要切换到最上面,请执行以下操作。这会把窗户移到前面,但不会把它留在最上面,这很烦人。

// Launch applications (Process.Start(...))
TopMost = true;
TopMost = false;

调用Win32命令

[DllImport("user32.dll")][return:MarshalAs(UnmanagedType.Bool)]static extern bool SetForegroundWindow(IntPtr hWnd);

...
// Launch applications (Process.Start(...))
SetForegroundWindow(this.Handle);
...

它可能比你喜欢的更具侵入性,但我在执行一些Office互操作时意外发现,在打开Office应用程序和文件后,你可以发出

MessageBox.Show("All files have been opened.")

这应该会让你的应用程序(和消息框)处于最前沿。

如果使用System.Diagnostics.Process Classes Start方法,则可以使用ProcessStartInfo类为启动时的进程状态设置应用程序变量,并将其作为参数传递到重写的方法Start(ProcessStartInfo startInfo)中。有一个属性ProcessStartInfo.WindowStyle,其类型为ProcessWindowStyle,具有4个值Normal、Hidden、Minimized和Maximized,通过将该值设置为Miniminized,您可以重新获得焦点并轻松地将其置于最前面。

MSDN 中的代码

    // Uses the ProcessStartInfo class to start new processes,
    // both in a minimized mode.
    void OpenWithStartInfo()
    {
        ProcessStartInfo startInfo = new ProcessStartInfo("IExplore.exe");
        startInfo.WindowStyle = ProcessWindowStyle.Minimized;
        Process.Start(startInfo);
        startInfo.Arguments = "www.northwindtraders.com";
        Process.Start(startInfo);
    }