- Merge from trunk up to r45543
[reactos.git] / base / applications / taskmgr / taskmgr.c
index e0ff5c2..3f8bcbd 100644 (file)
@@ -55,8 +55,27 @@ int APIENTRY wWinMain(HINSTANCE hInstance,
 
     /* check wether we're already running or not */
     hMutex = CreateMutexW(NULL, TRUE, L"taskmgrros");
-    if ((!hMutex) || (GetLastError() == ERROR_ALREADY_EXISTS))
+    if (hMutex && GetLastError() == ERROR_ALREADY_EXISTS)
+    {
+        /* Restore existing taskmanager and bring window to front */
+        /* Relies on the fact that the application title string and window title are the same */
+        HWND hTaskMgr;
+        TCHAR szTaskmgr[128];
+
+        LoadString(hInst, IDS_APP_TITLE, szTaskmgr, sizeof(szTaskmgr)/sizeof(TCHAR));
+        hTaskMgr = FindWindow(NULL, szTaskmgr);
+
+        if (hTaskMgr != NULL)
+        {
+            SendMessage(hTaskMgr, WM_SYSCOMMAND, SC_RESTORE, 0);
+            SetForegroundWindow(hTaskMgr);
+        }
+        return 0;
+    }
+    else if (!hMutex)
+    {
         return 1;
+    }
 
     /* Initialize global variables */
     hInst = hInstance;