Как я могу обеспечить один экземпляр моего приложения и установить фокус на него при попытке открыть второй экземпляр?Как я могу применить один экземпляр моего приложения?
Я пробовал:
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? – Tigran
Не было бы более целесообразным проверить в Program.cs перед запуском формы? Проверьте экземпляр имени процесса с помощью 'count> 0'. –
См. [Приложения с одним экземпляром в C#] (http://blogs.msdn.com/b/tyler_whitney/archive/2005/11/28/497604.aspx) – LarsTech