打开另一个应用程序后面

时间:2012-02-27 19:11:38

标签: c# winforms pinvoke

我想通过点击我的应用程序上的按钮打开几个窗口(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取消设置最顶层的窗口标志。我发布的链接中的更多细节。

4 个答案:

答案 0 :(得分:1)

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

确保您允许用户更改或仅在短时间内进行更改,因为它确实会让用户感到烦恼。

答案 1 :(得分:1)

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


要切换最顶层,请执行以下操作。这将把窗户带到前面,但不要把它留在最顶端,这很烦人。

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

调用Win32命令

  

[的DllImport( “USER32.DLL”)]           [返回:MarshalAs(UnmanagedType.Bool)]           static extern bool SetForegroundWindow(IntPtr hWnd);

...

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

...

答案 2 :(得分:0)

它可能比你喜欢的更具侵入性,但是在打开办公室应用程序和文件之后我偶然发现了一些Office互操作

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

这应该会将您的应用(和消息框)放在最前面。

答案 3 :(得分:0)

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

来自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);
    }