【发布时间】:2012-01-13 19:53:16
【问题描述】:
如何确保我的应用程序只有一个实例,并在尝试打开第二个实例时为其设置焦点?
我试过了:
public partial class Form1 : Form {
[DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
public static extern
IntPtr FindWindow(String lpClassName, String lpWindowName);
[DllImport("USER32.DLL")]
public static extern
Boolean SetForegroundWindow(IntPtr hWnd);
private void Form1_Load(object sender, EventArgs e)
{
bool isRunning = Process.GetProcesses()
.Where(p => p.MainWindowTitle.Contains(Text))
.Count() > 1;
if (isRunning)
{
FocusWindow(Text);
Application.Exit();
}
}
public static void FocusWindow(string title)
{
SetForegroundWindow(FindWindow(null, title));
}
}
这不是应用程序的焦点。我该如何解决这个问题?
【问题讨论】:
-
你确定 FindWindow 返回一个有效的 HWND 吗?
-
在启动表单之前检查 Program.cs 不是更有意义吗?使用
count > 0检查进程名称的实例。