如何防止程序被重复打开
我是初学者,只学过C语言。
现在要解决这个问题——防止程序被重复打开。
以前的方法是利用CAPTION解决这个问题的,但是caption要变动就失效了。有没有什么解决办法啊?
这是以前的方法:
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize(); //防止程序被重复打开
HANDLE hMutex = CreateMutex(NULL, TRUE, sInstruName.c_str() );
if(NULL == hMutex)
{
MessageBox(NULL, "创建Mutex失败!",Application->Title.c_str(), MB_OK | MB_SYSTEMMODAL);
return 0;
}
if(GetLastError() == ERROR_ALREADY_EXISTS)
{
HWND hForm = FindWindow("TMainForm", sInstruName.c_str() );
SetForegroundWindow(hForm);
ReleaseMutex(hMutex);
return 0;
}
这个方法我也不是太懂,请求高手帮忙对这段程序进行讲解一下。另求其他好方法解决,谢谢大家了!
[解决办法]
HANDLE hMutex = CreateMutex(NULL, TRUE, sInstruName.c_str() );
你怕caption变动,就手动赋予一个常量啊
[解决办法]
//---------------------------------------#include <vcl.h>#pragma hdrstop//---------------------------------------USEFORM("frmMain_Unit.cpp", frmMain);USEFORM("uDataModule.cpp", dm); /* TDataModule: File Type *///---------------------------------------WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){ try { HWND hWnd=CreateMutex(NULL,true,"ReadCard_Demo_Flag");//随便写的字符串 if(GetLastError()==ERROR_ALREADY_EXISTS) { if(hWnd) { Application->MessageBox("程序正在运行中!","提示", MB_OK+MB_ICONINFORMATION+MB_APPLMODAL); ReleaseMutex(hWnd); } return 0; } Application->Initialize(); Application->Title = "读卡系统"; Application->CreateForm(__classid(TfrmMain), &frmMain); Application->CreateForm(__classid(Tdm), &dm); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } catch (...) { try { throw Exception(""); } catch (Exception &exception) { Application->ShowException(&exception); } } return 0;}//---------------------------------------