读书人

怎么防止程序被重复打开

发布时间: 2012-02-12 17:16:33 作者: rapoo

如何防止程序被重复打开
我是初学者,只学过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变动,就手动赋予一个常量啊


[解决办法]

C/C++ code
//---------------------------------------#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;}//--------------------------------------- 

读书人网 >C++ Builder

热点推荐