荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: Peter (小飞侠), 信区: Program
标 题: 防止程序被重复执行(转载)
发信站: BBS 荔园晨风站 (Thu Jan 21 21:10:06 1999), 转信
Windows95的程序一般都可以重复执行,例如你按下WIN+E组合键即启动资
源管理器,如果再按WIN+E组合键又会出现一个资源管理器,这两个程序互不干
扰。有时候你可以需要制作这样一个程序:当该程序已经执行时,若用户企图
再次执行该程序则只会激活那个已执行的程序,而不是又出现一个副本。
完成这个目的的核心就是要在程序启动时查找该程序是否已经运行,我曾
试过很多种方法,包括向“全局元素表”(Global ATOM Table)写特定字符串等
等,但最简单的方法还是下面这个:
在程序启动时将Application的Title特性字段的值暂时改变。
利用Windows API函数FindWindows()查找窗口
恢复Application的Title值
上述步骤一般在主Form的OnCreate事件中实现,示例如下:
procedure TForm1.FormCreate(Sender: TObject);
var
ZAppName: array[0..127] of char;
Hold: String;
Found: HWND;
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;
用该算法制作的构件请到“Delphi构件”页下载。
--
※ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.1.3]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店