我们只希望我们的应用程序在任何时候都运行一个实例。因此,在启动时,它会查看应用程序是否正在运行,如果是,它会调用设置前景窗口在主窗口上。
这一切都很好......大多数情况下..
当我们的应用程序启动时,它将显示一个启动屏幕和一个登录表单。这两种形式都有显示任务栏 = false.
因此,如果您在显示登录表单时尝试启动应用程序的另一个副本,则该登录表单没有被带到前面!
特别是当用户也看不到任务栏中的任何内容时,他们所想到的只是该应用程序已经失效并且无法启动。没有迹象表明有另一个实例正在运行。
有什么办法可以解决这个问题吗?
嗯,代码在这里。即使ShowInTaskBar
is false
,你应该能够把它带到前面。
[DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
public static extern IntPtr FindWindow(String lpClassName, String lpWindowName);
[DllImport("USER32.DLL")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
public static void bringToFront(string title) {
// Get a handle to the Calculator application.
IntPtr handle = FindWindow(null, title);
// Verify that Calculator is a running process.
if (handle == IntPtr.Zero) {
return;
}
// Make Calculator the foreground application
SetForegroundWindow(handle);
}
注意:你应该FindWindow
使用表单的类而不是名称,因为启动屏幕表单有时没有标题,甚至没有控制框。使用 Spy++ 进行更深入的挖掘。
Use FindWindow
溅上。我认为这就是您想要做的 - 在加载主窗体时将启动屏幕放在前面。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)