• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

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

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

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

HANDLE CreateMutex(

    LPSECURITY_ATTRIBUTES lpMutexAttributes,    
    BOOL bInitialOwner,    

    LPCTSTR lpName   );

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

 

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

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

 


  Forms,Windows,SysUtils,
  UntMain in 'UntMain.pas' {frmMain},
{$R *.res}
var
hMutex:THandle;
Ret:Integer;
begin
  Application.Title:
='EI';
  hMutex:
=CreateMutex(nil,true,'EI');
  Ret:
=GetLastError;

  
if Ret <> ERROR_ALREADY_EXISTS  then
  
begin
    Application.Initialize;
    Application.CreateForm(TfrmMain, frmMain);
   
end
  
else
  
begin
    Application.MessageBox(
'The System is Runing','Notes!',MB_OK);
    ReleaseMutex(hMutex);
  
end;
  Application.Run;
end.

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
.net制作调用matlab画曲线软件的实现发布时间:2022-07-18
下一篇:
matlab画图函数plot()/set/legend发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap