意図:WPFアプリケーションのを実行します。新しいインスタンスが開始されると、すでに実行中のインスタンスはフォアグラウンドに設定されます。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();
}
はいずれも私が間違って何をやって指摘することができます。もう一度繰り返すと、すでに実行中のウィンドウが最大化状態になっているが、後ろ向きの状態にある場合に機能します。すでに実行中のウィンドウが通知トレイに最小化されると失敗します。
おかげ