编译出来的exe,在经过用户多次点击的情况下可以一个程序运行多次,因此也打开了不少exe,然而有可能用户是不知道的。那么请问如何限制本程序只开一次呢?即用户只要双击exe第一次,程序运行后,无论用户再点击多少次都只运行一个这样的程序,直到本程序被退出为止。
解决方案 »
- Unit RpSystem was compiled with a different version of RpFormPreview.TRavePrevie
- 请教如何获取cxgrid筛选记录的index
- 有没有办法向一组自定义的非可视化类广播自定义的消息?高手来帮忙啊
- 询问广州诚毅软件(立信企业下属单位)
- StringGrid和DrawGrid有和不同?StringGrid列怎么居中对齐?
- sql 中的错误,大家帮忙
- Com组件在使用后,退出程序时报错!!100分求救!
- Image的问题,100分给能解决我问题的人。(注:加上我另一个提问共100)
- 如何去掉BDE连接数据库的提示框??
- 能否给ClientDataSet1新加的一个字段加索引。详细进去看。
- 有没有更好的方法分解这个字符串,在线等
- 一段键盘记录的程序,运行后系统停止响应,大家帮忙看看怎么回事
procedure TForm1.FormCreate(Sender: TObject);
var
ZAppName: array[0..127] of char;
Hold: String;
Found: HWND;
begin
Hold := Application.Title;
Application.Title := 'OnlyOne'
+ IntToStr(HInstance); // 暂时修改窗口标题
StrPCopy(ZAppName, Hold); // 原窗口标题
Found := FindWindow(nil, ZAppName); // 查找窗口
Application.Title := Hold; // 恢复窗口标题
if Found<>0 then begin
// 若找到则激活已运行的程序并结束自身 ShowWindow(Found, SW_RESTORE);
Application.Terminate;
end;
end;
Forms,
Windows,
Unit1 in 'Unit1.pas' {Form1};{$R *.res}
var
hMutex:hWnd;
begin
Application.Initialize;
Application.Title:='test';
hMutex:=CreateMutex(nil,false,'test');
if GetLastError<>Error_Already_Exists then
begin
Application.CreateForm(TForm1, Form1);
Application.Run;
end
else
begin
Application.MessageBox('本程序只允许同时运行一个','Error');
ReleaseMutex(hMutex);
end;
end.
procedure TForm1.FormCreate(Sender: TObject);
var
Atom : TAtom;
begin
if GlobalFindAtom('wudi_1982') <> 0 then//在系统原子表中找原子,wudi_1982代表这个程序的标识
begin
showmessage('程序已经运行一个实例');
Application.Terminate;
end;
GlobalAddAtom('wudi_1982');//增加原子end;
var
ZAppName: array[0..127] of char;
Hold: String;
Found: HWND;
begin
Hold := Application.Title;
Application.Title := 'OnlyOne'
+ IntToStr(HInstance); // 暂时修改窗口标题
StrPCopy(ZAppName, Hold); // 原窗口标题
Found := FindWindow(nil, ZAppName); // 查找窗口
Application.Title := Hold; // 恢复窗口标题
if Found<>0 then begin
// 若找到则激活已运行的程序并结束自身 ShowWindow(Found, SW_RESTORE);
Application.Terminate;
end;
end;這是最經典的方法