一个应用程序多次点击时,如何只让它只运行一个

原创 2004年10月09日 09:14:00

/////////////////////  (一)项目文件  test.dpr //////////////////////
program SerialGet;

uses
  Forms,
  UMain in 'UMain.pas' {frmMain},
  ULogin in 'UForm2.pas' {Form2},
  UDataModule in 'UDataModule.pas' {DataModule1: TDataModule},

{$R *.res}

begin
  Application.Initialize;

  if CreateMutex then                 //创建句柄,判断此应用程序是否在运行
  begin
    Application.CreateForm(TfrmMain, frmMain);
    Application.CreateForm(Tform2, form2);
    Application.CreateForm(TDataModule1, DataModule1);
    Application.Run;
  end else
  begin
    DestroyMutex;                     //释放句柄
  end;
end.

////////////////  (二)登陆窗体 UMain.pas  UMain.dfm //////////////////
unit UMain;

interface
uses ......
type
  ... ... ...
  private
  public
  end;

var
  frmMain: TfrmMain;

  function CreateMutex: Boolean;     // 全项目公用函数
  procedure DestroyMutex;            // 全项目公用函数

implementation
uses UDataModule;  //引用数据模块
var Mutex: hWnd;

{$R *.dfm}

procedure DestroyMutex;
begin
  if Mutex <> 0 then CloseHandle(Mutex);
end;

function CreateMutex: Boolean;
var
  PrevInstHandle: THandle;
  AppTitle: PChar;
begin
  AppTitle := StrAlloc(100);
  StrPCopy(AppTitle, Application.Title);
  Result := True;
  Mutex := Windows.CreateMutex(nil, False, AppTitle);
  if (GetLastError = ERROR_ALREADY_EXISTS) or (Mutex = 0) then begin
    Result := False;
    SetWindowText(Application.Handle, '');
    PrevInstHandle := FindWindow(nil, AppTitle);
    if PrevInstHandle <> 0 then begin
      if IsIconic(PrevInstHandle) then
        ShowWindow(PrevInstHandle, SW_RESTORE)
      else
        BringWindowToTop(PrevInstHandle);
      SetForegroundWindow(PrevInstHandle);
    end;
    if Mutex <> 0 then Mutex := 0;
  end;
  StrDispose(AppTitle);
end;

一个应用程序多次点击时,如何只让它只运行一个

/////////////////////  (一)项目文件  test.dpr //////////////////////program SerialGet;uses  Forms,  UMain...
  • sxia200
  • sxia200
  • 2007年05月24日 14:23
  • 489

VC中如何让一个应用程序只启动一次

方法一:使用#pragma data_seg 步骤一:在应用程序的入口文件前面加上如下语句 #pragma data_seg("flag_data") int g_Count = 0; //共...
  • youyongyoumou
  • youyongyoumou
  • 2015年04月09日 10:42
  • 2001

Java 只运行一个实例

查了一下资料,Java 只运行一个实例的方法有下面三种: 1、占用端口(有效,但是有端口被挪用的缺陷) 2、检查文件是否存在(有效,但突然停机可能有问题) 3、使用JNI(有效,但丧失可移植性)...
  • huangng
  • huangng
  • 2017年07月02日 21:09
  • 139

让一个应用程序只运行一个实例

方法一:/*创建全局互斥体,然后在进程启动时检查该互斥体是否已被创建只需要在InitInstance()中加入*/ ::CreateMutex(NULL, FALSE, "MyAPP"); /*...
  • pass86
  • pass86
  • 2006年11月09日 13:34
  • 919

android只让某个activity运行一次-SharedPreferences

使用SharedPreference来完成。SharedPreferences是Android平台上一个轻量级的存储类,用来保存应用的一些常用配置 | 只让进入一次引导页         ...
  • u012246458
  • u012246458
  • 2015年06月25日 14:40
  • 1277

如何使一个程序只运行一个

方法一:If App.PrevInstance = True Then MsgBox "程序已经在运行中,不打开两个!", vbCritical + vbOKOnly, "友情提示"  方法二:设计时...
  • surro
  • surro
  • 2007年08月20日 15:13
  • 315

如何让mfc程序只运行一个

BOOL MyApp::InitInstance() { ::CreateMutex(NULL,TRUE,m_pszExeName); if(GetLastError()==ERROR_ALRE...
  • u010549750
  • u010549750
  • 2015年03月11日 13:19
  • 144

如何让Java程序只运行一个实例

Java没有提供这样的机制。从操作系统的观点来看,一个启动的Java Application仅仅是一 个JVM的运行实例。运行相同Application的两个实例,仅仅是运行两个无关的JVM。 只...
  • yaerfeng
  • yaerfeng
  • 2012年02月16日 15:20
  • 6736

使Qt程序只能运行一个实例的3种方法

版权:http://blog.csdn.net/robertkun 1. 共享内存的方法 Unix: QSharedMemory "owns" the shared memory ...
  • smallstar02
  • smallstar02
  • 2017年02月05日 17:38
  • 891

怎样让我的MFC程序只能运行一个实例?

BOOL CStockApp::InitInstance() { //======================================================== HANDL...
  • wang03989
  • wang03989
  • 2016年05月24日 15:30
  • 254
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个应用程序多次点击时,如何只让它只运行一个
举报原因:
原因补充:

(最多只允许输入30个字)