怎么防止程序被重复打开

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