Solved

Allowing a single instance of an application

Posted on 1997-12-11
2
199 Views
Last Modified: 2013-11-20
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?
0
Comment
Question by:JagerM
2 Comments
 
LVL 15

Accepted Solution

by:
Tommy Hui earned 100 total points
Comment Utility
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
 

Author Comment

by:JagerM
Comment Utility
That did the trick. Thanks.
0

Featured Post

Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
if loop error 4 77
Doc'in system (example?) BA 7 78
has77  challenge 9 67
Line meaning 9 75
Introduction: Finishing the grid – keyboard support for arrow keys to manoeuvre, entering the numbers.  The PreTranslateMessage function is to be used to intercept and respond to keyboard events. Continuing from the fourth article about sudoku. …
Introduction: Ownerdraw of the grid button.  A singleton class implentation and usage. Continuing from the fifth article about sudoku.   Open the project in visual studio. Go to the class view – CGridButton should be visible as a class.  R…
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
This video explains how to create simple products associated to Magento configurable product and offers fast way of their generation with Store Manager for Magento tool.

744 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now