Allowing a single instance of an application

I'm trying to ensure that only one instance of my application can be run at a time. I've been trying to use the following code:

// Check to see if or app is already running and revert
//  to it. Only one can run at a time. If we find another
//  version of ourself, defer to it.
HWND hwnd = FindWindow( "My App", NULL );
if( hwnd )
{
  if( IsIconic(hwnd) )
    ShowWindow( hwnd, SW_RESTORE );  // If an icon, restore
  SetForegroundWindow( hwnd );          
  return false;// Force a call to ExitInstance and shut down
}

  // Register our class with Windows
  // Declare a WNDCLASS stucture and fill it
WNDCLASS wc;
wc.style          = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;  
wc.lpfnWndProc    = DefWindowProc;
wc.cbClsExtra     = 0;
wc.cbWndExtra     = 0;
wc.hInstance      = AfxGetInstanceHandle();
wc.hIcon          = LoadIcon(IDR_MAINFRAME);
wc.hCursor        = LoadCursor(IDC_ARROW);
wc.hbrBackground  = (HBRUSH) (COLOR_WINDOW + 1);
wc.lpszMenuName   = NULL;
wc.lpszClassName  = "My App";
AfxRegisterClass( &wc );

With another instance of this app already running, FindWindow never returns a window handle. The line AfxRegisterClass() returns true indicating registration was successful, but other instances still launch.

The funny thing is this code seems to work in antoher App of mine and it was basically cut and pasted into the new App.

Is there an easier way to perform this check? Perhaps through the framework itself? How can I allow only one instance of an application to run?
JagerMAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Tommy HuiEngineerCommented:
Make sure your mainframe is also using this class for its window. Otherwise, the registering of the wndclass will work, but since there are no top-level windows of this class, FindWindow will return NULL.

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
JagerMAuthor Commented:
That did the trick. Thanks.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
System Programming

From novice to tech pro — start learning today.