Delphi实现进程中只有一个应用程序

项目中要求应用程序在同一台机器上只能被打开一次,即进程中只要一个应用程序。左思右想,应该在程序之前做点什么。是不是要通过句柄什么的来得到该程序的进程,然后去进程列表中寻找是否已经存在此进程。

Mutex是互斥体的意思,当一个线程持有一个Mutex时,其它线程申请这个Mutex会被阻塞。可以通过Mutex来保证对某一资源的互斥访问(即同一时间内最多有一个线程来访问)。因此,我觉得Mutex的思想可以用在这个项目中。

Delphi中创建互斥体的函数为:

其中参数lpMutexAttributes用来设定Mutex对象的安全描述符和是否允许子进程继承句柄。bInitialOwner表明是否将Mutex的持有者设置为调用线程。lpName参数设置Mutex的名字,该名字区分大小写并不能包含"\",最大长度为MAX_PATH,

Code

    LPCTSTR lpName   );

可设置为NULL表明该Mutex为匿名对象。
如果调用成功,则返回Mutex的句柄,否则返回NULL,如果lpName不为NULL且调用前同名的Mutex已被创建,则返回同名Mutex的句柄,此时调用GetLastError将返回ERROR_ALREADY_EXISTS,参数bInitialOwner将被忽略。

 

下面通过该函数来实现只能打开一个应用程序

在Delphi应用程序的Program文件中。填入如下代码:

 

Code

 

 

posted on 2008-08-27 21:57  孙伟伟  阅读(1342)  评论(0编辑  收藏  举报