private static void ShowPreviousWindow() { // 実行中の同じアプリケーションのウィンドウ・ハンドルの取得 var prevProcess = Win32Api.GetPreviousProcess(); if (prevProcess != null && prevProcess.MainWindowHandle == IntPtr.Zero) { // 起動中のアプリケーションを最前面に表示 Win32Api.WakeupWindow(prevProcess.MainWindowHandle); } else { if (prevProcess != null) { //プロセス特定は出来たが、ウィンドウハンドルが取得できなかった(アイコン化されている) //タスクトレイアイコンのクリックをエミュレート //注:アイコン特定はTooltipの文字列で行うため、多重起動時は先に見つけた物がアクティブになる var rslt = Win32Api.ClickTasktrayIcon(Application.ProductName); if (!rslt) { // 警告を表示(見つからない、またはその他の原因で失敗) MessageBox.Show(MyCommon.ReplaceAppName(Properties.Resources.StartupText1), MyCommon.ReplaceAppName(Properties.Resources.StartupText2), MessageBoxButtons.OK, MessageBoxIcon.Information); } } else { // 警告を表示(プロセス見つからない場合) MessageBox.Show(MyCommon.ReplaceAppName(Properties.Resources.StartupText1), MyCommon.ReplaceAppName(Properties.Resources.StartupText2), MessageBoxButtons.OK, MessageBoxIcon.Information); } } }
private static void ShowPreviousWindow() { // 実行中の同じアプリケーションのウィンドウ・ハンドルの取得 var prevProcess = Win32Api.GetPreviousProcess(); if (prevProcess == null) { return; } if (prevProcess.MainWindowHandle != IntPtr.Zero) { // 起動中のアプリケーションを最前面に表示 Win32Api.WakeupWindow(prevProcess.MainWindowHandle); } else { //プロセス特定は出来たが、ウィンドウハンドルが取得できなかった(アイコン化されている) //タスクトレイアイコンのクリックをエミュレート //注:アイコン特定はTooltipの文字列で行うため、多重起動時は先に見つけた物がアクティブになる Win32Api.ClickTasktrayIcon(Application.ProductName); } }