不让程序在启动后继续启动的方法 ?

解决方案 »

  1.   

    看看这个帖子
    http://expert.csdn.net/Expert/topic/717/717792.xml?temp=.373974
      

  2.   

    给你一篇文章1、对主窗口程序的改动:在主窗口(即程序创建的第一个窗口)中interface节加入
    const
    CM_RESTORE = WM_USER + $1000; {自定义的“恢复”消息}
    MYAPPNAME = "My Delphi Program";
    并在Form的定义的public节中加入
    procedure CreateParams(var Params: TCreateParams); override;
    Procedure RestoreRequest(var message: TMessage); message CM_RESTORE;
    在implementation节中加入
    {指定窗口名称}
    procedure TForm1.CreateParams(var Params: TCreateParams);
    begin
    inherited CreateParams(Params);
    Params.WinClassName := MYAPPNAME;
    end;{处理“恢复”消息}
    procedure TForm1.RestoreRequest(var message: TMessage);
    begin
    if IsIconic(Application.Handle) = TRUE then
    Application.Restore
    else
    Application.BringToFront;
    end;经过以上修改,程序的主窗口的类名已经被指定了,这是进行判断的基础。一般在程序刚开始运行的时候进行判断,所以还要对DPR文件进行修改。2、对DPR文件的改动在 uses 节中添加 windows、messages这两个单元加入下列语句,注意两个文件中常量CM_RESTORE和MYAPPNAME的定义必须一致
    const
    CM_RESTORE = WM_USER + $1000; {自定义的“恢复”消息}
    MYAPPNAME = "My Delphi Program";
    var
    RvHandle : hWnd;将下列语句插到程序最前部(在Application.Initialize之前)RvHandle := FindWindow(MYAPPNAME, NIL);
    if RvHandle > 0 then
    begin
    PostMessage(RvHandle, CM_RESTORE, 0, 0);
    Exit;
    end;
    这段程序的意思是如果找到一个类名相同的窗口,则向该窗口发送一个消息,并退出,而本例中原窗口收到该消息后会自动激活或从图标还原,从而达到了避免二次运行且能自动调出前一例程的目的。
      

  3.   

    http://expert.csdn.net/Expert/topic/451/451593.xml?temp=.5273859
      

  4.   

    program Project1;use
      forms,windows,
      Unit1 in 'Unit1.pas' {Form1};
    {$R *.RES}
    begin
      CreateMutex(nil, True, 'MyAppClass');
      if GetLastError = ERROR_ALREADY_EXISTS then
      begin
        MessageBox(0, '干吗?', '你运行了两次!' ,MB_ICONERROR);
        Halt;
      end;  Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    end;
      

  5.   

    hprevinst:=findwindow('TFrm_Part_main',nil);
      if hprevinst=0 then
      begin
       //主
      end
    else
      begin
        Application.Terminate;
        Application.Run;
      end;
    在USES中引用WINDOWS
      

  6.   

    zdcnow(磁效应) 的方法就可以了
      

  7.   

    zdcnow(磁效应) 的方法就可以了
      

  8.   

    可以使用创建互斥对象的方法。尽管互斥对象通常用于同步连接,但用在这个地方也是非常方便的。仅用了4句代码就轻松搞定。 
      VAR Mutex:THandle; 
      begin 
       Mutex:=CreateMutex(NIL,True,‘SingleApp’); 
       IF GetLastError<>ERROR_ALREADY_EXISTS THEN//如果不存在另一实例 
       BEGIN 
       Application.CreateHandle; 
       Application.CreateForm (TExpNoteForm, ExpNoteForm); 
       Application.Run; 
       END; 
       ReleaseMutex(Mutex); 
      end. 
    抄来的,呵呵,不过还可以用吧
      

  9.   

    工程文件中
    const
      MUTEX             = 'MUTEX_HOUSESYS';
    begin
      if OpenMutex(MUTEX_ALL_ACCESS, False, pChar(MUTEX)) = 0 then
        CreateMutex(nil, True, pChar(MUTEX))
      else
        Exit;