我想通过点击我的应用程序上的按钮打开几个窗口(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取消设置最顶层的窗口标志。我发布的链接中的更多细节。
答案 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.Process类Start方法,则可以使用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);
}