打开另一个应用程序后面的窗口
本文关键字:窗口 应用程序 另一个 | 更新日期: 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);
}