Намерение : запустить отдельный экземпляр приложения WPF.Когда запускается новый экземпляр, уже запущенный экземпляр должен быть установлен на передний план.
Хотя у меня достигнута большая часть , я сталкиваюсь с проблемой, когда сидит уже запущенное приложениев трее уведомлений.Код выполняется без ошибок, но не может восстановить окно и установить его на передний план. Фрагмент кода (c #):
[DllImport("user32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll")]
private static extern bool IsIconic(IntPtr hWnd);
[DllImport("user32.dll")]
private static extern bool ShowWindow(IntPtr hWnd, int cmdShow);
var currentProcess = Process.GetCurrentProcess();
string processName = currentProcess.ProcessName;
Process[] instances = Process.GetProcessesByName(processName);
if (instances.Length > 1)
{
foreach(var instance in instances)
{
if (!currentProcess.Id.Equals(instance.Id))
{
IntPtr hWnd = instance.MainWindowHandle;
if (IsIconic(hWnd))
ShowWindow(hWnd, SW_RESTORE);
SetForegroundWindow(hWnd);
}
}
currentProcess.Kill();
}
Может ли кто-нибудь указать, что я делаю неправильно.Повторим еще раз, это работает в случае, когда уже запущенное окно находится в развернутом состоянии, но задним числом.Сбой, когда уже запущенное окно сворачивается в панель уведомлений.
Спасибо