delphi는 하나의 실례만 실행할 수 있습니다

5688 단어
"delphi는 하나의 실례를 실행하는 세 가지 방법만 허용합니다."
1. 상호 배척 대상 만들기
프로젝트 프로젝트 1.dpr에서 상호 배척 대상 만들기
program project1

uses

windows,form,

frmmain in 'frmmain.pas' {mainform};

        {$r *.res}

    var

    happmutex: thandle; //      

   begin

     happmutex := createmutex(nil, false,’projectname’); //      projectname    

      if ( (happmutex <> 0) and (getlasterror() = error_already_exists)) then

begin   // happmutex <> 0           

        messagebox('      ,         !','  !', mb_ok);

   end

    else

    begin

       application.ininitialize;

       application.createform(tmainform, mainform);

      application.run;

   end;

        releasemutex(happmutex); //      closehandle(happmutex)    

   end.

2. 찾기 창법
이것은 가장 간단한 방법 중의 하나다.프로그램이 실행되기 전에findwindow 함수로 같은 창 클래스와 제목을 가진 창을 찾습니다. 찾으면 이미 존재한다는 것을 설명합니다
프로젝트 소스 파일의 초기화 부분에 다음 코드를 추가합니다.
program project1

uses

forms,windows;

var hwnd:thandle;

  begin

   hwnd:=findwindow(‘tform1’,’form1’);

   if hwnd=0 then

   begin

       application.initialize;

       application.createform(tform1, form1);

     application.run;

   end

          else

         application.messagebox(pchar(''),pchar(''),mb_ok);

      end;

findwindow () 함수는 두 개의 매개 변수 (클래스 이름과 제목의 창) 중 하나를 가지고 있는 매개 변수를 무시할 수 있지만, 공교롭게도 다른 프로그램도 같은 클래스를 사용하면 정확한 결과를 얻지 못하도록 두 개의 매개 변수를 모두 사용하는 것을 강력히 권장합니다.
또한델파이 ide 창에서 이 프로그램을 실행하면
이 글은 마카이동 블로그에서 전재되었습니다. 출처를 밝혀 주십시오.http://www.makaidong.com같은 클래스와 제목의 창이 이미 존재하기 때문에 한 번도 실행할 수 없습니다. 디자인할 때의 창입니다. 
3. 전역원자법
우리도 시스템에 전역 원자를 추가하는 방법을 이용하여 여러 프로그램의 실례적인 운행을 방지할 수 있다.전역 원자는 윈도우즈 시스템이 책임지고 유지한다. 그 중의 모든 원자가 유일하다는 것을 보장하고, 인용 계수를 관리하며, 전역 원자의 인용 계수가 0일 때 메모리에서 제거한다.글로벌addatom 함수로 전역 원자에 255바이트 이내의 문자열을 추가하고 글로벌findatom으로 전역 원자가 존재하는지 확인합니다. 마지막으로 프로그램이 끝날 때 글로벌deletetom 함수로 추가된 전역 원자를 삭제합니다.예는 다음과 같습니다.
    program project1

     uses windows,froms,

       unit1 in 'unit1.pas' {form1},

     const iatom=‘application’; //                  

  begin

   if globalfindatom(iatom)=0 then

   begin

      globaladdatom(iatom); //      

      application.initialize;

      application.createform(tform1,form1);

      application.run;

      globaldeleteatom(globalfindatom(iatom));//         

   end

   else

   application.messagebox(pchar(''),pchar(''),mb_ok);  

end.

 
관련 기사를 검색하려면 다음과 같이 하십시오.
delphi는 이 링크를 실행하는 세 가지 방법만 허용합니다.http://www.makaidong.com/%E5%8D%9A%E5%AE%A2%E5%9B%AD%E7%83%AD%E6%96%87/11617.shtml전재는 출처를 밝혀 주십시오:delphi는 하나의 실례만 실행할 수 있는 세 가지 방법-블로그원

좋은 웹페이지 즐겨찾기