首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

怎么防止程序被重复打开

2012-02-12 
如何防止程序被重复打开我是初学者,只学过C语言。现在要解决这个问题——防止程序被重复打开。以前的方法是利

如何防止程序被重复打开
我是初学者,只学过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;}//--------------------------------------- 

热点排行