在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
项目中要求应用程序在同一台机器上只能被打开一次,即进程中只要一个应用程序。左思右想,应该在程序之前做点什么。是不是要通过句柄什么的来得到该程序的进程,然后去进程列表中寻找是否已经存在此进程。 Mutex是互斥体的意思,当一个线程持有一个Mutex时,其它线程申请这个Mutex会被阻塞。可以通过Mutex来保证对某一资源的互斥访问(即同一时间内最多有一个线程来访问)。因此,我觉得Mutex的思想可以用在这个项目中。 Delphi中创建互斥体的函数为: 其中参数lpMutexAttributes用来设定Mutex对象的安全描述符和是否允许子进程继承句柄。bInitialOwner表明是否将Mutex的持有者设置为调用线程。lpName参数设置Mutex的名字,该名字区分大小写并不能包含"\",最大长度为MAX_PATH, HANDLE CreateMutex(
可设置为NULL表明该Mutex为匿名对象。
下面通过该函数来实现只能打开一个应用程序 在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.
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论