Intention laufende Anwendung: Führen Sie eine einzelne Instanz eine WPF-Anwendung. Wenn eine neue Instanz gestartet wird, sollte die bereits laufende Instanz auf den Vordergrund gesetzt werden.Stellen Sie sicher, einzelne Instanz einer WPF-Anwendung: Schwierigkeit der Wiederherstellung die bereits in den Vordergrund
Während ich am meisten davon erreicht habe, stehe ich vor einem Problem, wenn die bereits laufende Anwendung in der Benachrichtigungsleiste sitzt. Der Code wird ohne Fehler ausgeführt, das Fenster & kann jedoch nicht in den Vordergrund zurückgesetzt werden. Code Snippet (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();
}
Kann man darauf hinweisen, was mache ich falsch. Um es noch einmal zu wiederholen, es funktioniert in dem Fall, wenn das bereits laufende Fenster im maximierten Zustand ist, aber im Nachhinein. Es schlägt fehl, wenn das bereits laufende Fenster in das Benachrichtigungsfeld minimiert wird.
Dank