当用户第二次尝试运行时,如何激活已打开的应用程序?

时间:2016-08-20 19:12:07

标签: c++ c++builder vcl

我正在使用Mutex将我的应用程序限制为仅一个实例。这是代码:

HANDLE hMutex;
hMutex = CreateMutex(NULL, FALSE, "MyTestApp");

if(hMutex == NULL)
    ShowMessage(GetLastError());
else
    if(GetLastError() == ERROR_ALREADY_EXISTS)  {
        ShowMessage("Application already running!");
        // activate already running instance ?!
     return -1;
    }

我想扩展它以激活已经运行的实例。怎么做?感谢。

2 个答案:

答案 0 :(得分:1)

假设它是Win32应用程序: 1)使用FindWindow函数和您提供的窗口名称及其类名。 2)使用SetForegroundWindow并返回HWND FindWindow

答案 1 :(得分:0)

一旦确定没有其他应用程序实例正在运行,请重载主表单的WndProc处理唯一消息(例如,如const unsigned int myMsgId = WM_USER + 100;),或者您可以使用RegisterWindowMessage。当应用程序的第二个实例启动时,在创建主窗体之前广播带有该消息标识符PostMessage(NULL, myMsgId, 0, 0)的消息并退出。应用程序的第一个实例可以对它做出反应并使用BringWindowToTop将自己置于前台(如果可能,vista及以上版本不允许出于显而易见的原因)。如果不允许将应用程序置于前台,应用程序的状态栏图标将开始闪烁以引起用户注意。

萨姆