|
프로그램을 단 한번만 실행되도록 하려고 다음과 같이 코딩했습니다.
(이때 메인폼의 클레스명은 TMainForm이였고, 그 폼의 caption 은 "FoxPapers wow" 였습니다.)
//TODO -c fill: run only once.
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
HWND hAnother = FindWindow("TMainForm","FoxPapers wow");
if (hAnother) {
SetForegroundWindow(hAnother);
return 0;
}
Application->Initialize();
Application->HelpFile = ExtractFilePath(Application->ExeName) + "help\\foxpapers.hlp";
Application->CreateForm(__classid(TMainForm), &MainForm);
Application->CreateForm(__classid(TMainOptionForm), &MainOptionForm);
ShowWindow(Application->Handle, SW_HIDE);
Application->ShowMainForm=false;
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}
이렇게 코딩하였더니, 볼렌드빌더가 실행중이지 않은 상태에서는
프로그램이 제대로 돌아갑니다.
즉, 기대했던 대로,프로그램이 한 번 실행되면, 또다른 인스턴스는 생성되지 않게 됩니다.
그런데 볼렌드빌더가 실행중인 경우는 얘기가 달라집니다.
위의 코드가 들어있는 프로젝트르 볼렌드빌더로 연 상태에서 Run을 클릭할 경우는,
프로그램이 실행되지 않습니다.
즉, 이 경우는 hAnother 의 값이 NULL 이 아닌 값이 됩니다.
프로젝트를 열고 나서 Run을 누를 경우는, FindWindow("TMainForm","FoxPapers wow")함수가,메인폼에 해당하는 폼디자이너 창의 헨들이 리턴하는 것 같습니다.
이런 문제가 없게 하려면 어떻게 해야 되나요?
|