Click to See Complete Forum and Search --> : Roger
Prevent an application from ru
March 30th, 1999, 10:02 PM
Hello everyone,
I wrote an application using VC++.
How do I prevent a user from running it when another one is already
running? In short, what are the codes for detecting that another version
is already running?
The amateurish way is to wrong something to a temp file but this
will not work if the application crash halfway.
Please reply.
Thanks.
regards,
ywshum
Reshmi
March 30th, 1999, 10:45 PM
Hi,
I think you can find the instance using FindWindow.
Suppose your application has a caption IDS_CAPTION
CString szCaption;
szCaption.LoadString(IDS_CAPTION);
HWND hWnd = FindWindow(NULL, szCaption);
if (!hWnd) return FALSE;//no instance found
AfxMessageBox(IDS_EXIST);//if an instance found messagebox that an
//instance already exists
return TRUE;
Then based on the return value of this you can stop running another instance.
Thanks,
Reshmi
sally
March 30th, 1999, 11:49 PM
you can create a CMutex object with your own special string as a name for it
if you can create the CMutex, this is the first instance, and when the app exists you close the CMutex
if you can not create it, your app is already running
Sally
Sally
March 30th, 1999, 11:49 PM
you can create a CMutex object with your own special string as a name for it
if you can create the CMutex, this is the first instance, and when the app exists you close the CMutex
if you can not create it, your app is already running
Sally
S Cheeran
March 31st, 1999, 11:10 PM
BOOL CAIAWashChartApp::InitInstance()
{
AfxEnableControlContainer();
// Allow to run only single instance of ControlWoks
HWND hwnd = ::FindWindow(0, "AIA ControlWorks");
if(NULL != hwnd)
{
TRACE("One Instance of ControlWorks is already running\n");
if(::IsIconic(hwnd))
{
::ShowWindow(hwnd, SW_RESTORE);
}
else
{
::SetForegroundWindow(hwnd);
}
return FALSE;
}
.
.
.
.
}
Peter Lundqvist
April 1st, 1999, 01:20 AM
Hi. Try this!
In the App's .H -file add a CEvent *.
#include <afxmt.h> // CEvent
class YourApp : public CWinApp
{
...
...
...
private:
CEvent* m_pInstanceEvent;
};
// Add this In the App's .cpp -file //
/////////////////////////////////////////////////////////////////////////////
// CYourApp construction
CYourApp::CYourApp()
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
m_pInstanceEvent = NULL;
}
/////////////////////////////////////////////////////////////////////////////
// CYourApp destruction
CYourApp::~CYourApp()
{
// kill the instance handle
if (m_pInstanceEvent != NULL)
{
delete m_pInstanceEvent;
m_pInstanceEvent = NULL;
}
}
BOOL CYourApp::InitInstance()
{
// Do we already have an Instance of the App?
m_pInstanceEvent = new CEvent(FALSE, FALSE, AfxGetAppName());
if (::GetLastError() == ERROR_ALREADY_EXISTS)
{
// End this Instance
m_pInstanceEvent->SetEvent();
return FALSE;
}
...
...
...
return TRUE;
}
Good Luck!
/Peter Lundqvist
codeguru.com
Copyright Internet.com Inc., All Rights Reserved.