|
아래와 같이 FormCreate할때 실행되도록 코드를 입력했는데요.
프로그램이 하나 실행중인데 exe파일을 클릭하면 또 실행됩니다.
void __fastcall TForm1::FormCreate(TObject *Sender)
{
HANDLE mutex;
try
{
const char ProgMutex[] = "Project1";
// mutex = OpenMutex(0, false, mutexname);
//mutex = OpenMutex(MUTEX_ALL_ACCESS,false,mutexname);
if((mutex=OpenMutex(MUTEX_ALL_ACCESS, false, ProgMutex))==NULL)
mutex = CreateMutex(NULL, true, ProgMutex);
else
return;
//밑부분은 현재 있는 상태
Application->Initialize();
Application->CreateForm(__classid(TForm1),&Form1);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
// 프로그램에 사용된 뮤텍스 해제
ReleaseMutex(mutex);
return;
}
장성호 님이 쓰신 글 :
: mutex = OpenMutex(MUTEX_ALL_ACCESS, false, mutexname);
:
: 이렇게 해보세요
:
: 그럼...
:
: 김명섭 님이 쓰신 글 :
: : 아래와 같은 코드를 이용하여 프로그램을 한번만 실행시킬 수 있다고 하는데요~~
: : 입력해서 exe파일을 만들어서 실행했지만 프로그램이 여러개 실행됩니다..
: : (ShowMessage는 실행되지 않았습니다..)
: : 혹시 아시는분 계시면 알려주시면 고맙겠습니다.
: :
: : WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, INT)
: : {
: : HANDLE mutex;
: : try
: : {
: : const char mutexname[] = "MyProgram";
: : mutex = OpenMutex(0, false, mutexname);
: : if(mutex == NULL)
: : {
: : mutex = CreateMutex(NULL,true,mutexname);
: : }
: : else
: : {
: : ShowMessage("현재 프로그램이 가동중입니다...");
: : return 0;
: : }
: : //밑부분은 현재 있는 상태
: : Application->Initialize();
: : Application->CreateForm(__classid(TForm1),&Form1);
: : Application->Run();
: : }
: : catch (Exception &exception)
: : {
: : Application->ShowException(&exception);
: : }
: : // 프로그램에 사용된 뮤텍스 해제
: : ReleaseMutex(mutex);
: : return 0;
: :
: :
: : }
|