Rohini Sreekanth
Rohini Sreekanth

Reputation: 91

Single Instance Application in C++/CLI using Mutex

I am developing a tray icon based application in C++ CLI. I am using Mutex to ensure single instance of my application running at a time. But each time a new instance starts, the current instance's window should go active. I am sending a message to the window using PostMessage(Pinvoke). But after 3 or 4 successive run, my application crashes.

Any ideas why that happen. please help!!

The code I have written in the main() function is,

Mutex ^mutex = gcnew Mutex(true, "{8F6F0AC4-B9A1-45fd-A8CF-72F04E6BDE8F}");
if (mutex->WaitOne(TimeSpan::Zero, true))
{
    // New Instance. Proceed......................
}
else// An instance is already running. Activate it and return
{
    // send our Win32 message to make the currently running instance
    // jump on top of all the other windows
    try
    {

        HWND hWindow = FindWindow( nullptr, "MyWindow" );
        if(hWindow)
            PostMessage(hWindow, WM_ACTIVATE_APP, nullptr,nullptr);
    }
    catch(Exception^ Ex)
    {
    }
    return -1;
}

Thanks & Regards,

Rohini

Upvotes: 1

Views: 1035

Answers (1)

Anton Savin
Anton Savin

Reputation: 41331

Try this instead of PostMessage():

ShowWindowAsync(hWindow, 1); // SW_SHOWNORMAL
SetForegroundWindow(hWindow);

Upvotes: 1

Related Questions