如何判断一个程序是否有其他副本在执行?(10分)

  • 主题发起人 主题发起人 pickup
  • 开始时间 开始时间
P

pickup

Unregistered / Unconfirmed
GUEST, unregistred user!
请教了。
 
有个FINDWINDOW()函数
你可以去查一下帮助,看具体怎么用
 
这个程序是自编的,还是其它的程序。[?]
 
程序开始的时候建立一个文件判断冲突可以
 
begin
AHand:=FindWindow(nil,'ControCD'); //查找以名称为'Application.Title'的窗体
if AHand=0 then //如果AHand=0,则无本程序正在Running...
begin
Application.Initialize;
Application.ShowMainForm:=false;
Application.Title := 'ControCD';
Application.CreateForm(TForm1, Form1);
Application.Run;
end
else
Application.MessageBox('程序已经运行!','提示',mb_ok+mb_iconinformation);
end;
 
在某些情况下,我们编写的应用程序同时只能有一个实例在内存中运行,例如服务器程序、需要独占某设备的程序,甚至我们仅仅是让程序同时只有一个实例运行(如UltraEdit就是这样做的,让你不能同时运行多个UltraEdit)。要实现此功能,需要在程序中加一点判断的代码,在Windows 95或Win32环境下的Delphi版本中实现的程序如下:

按Ctrl+F12键,选择Project1,加入下列语句
program Project1;
uses
windows, {加入该句才能调用函数}
Forms,
Unit1 in 'Unit1.pas'{Form1};

{$R *.RES}

const classname='TForm1'; {声明为主窗体的类名}
var handle:integer; {变量}
begin
{----------主要为该判断部分-------------}
handle:=findwindow(classname,nil);{查找是否有此类的窗体}
if handle<>0 then {不为0则程序已运行}
begin
messagebox(0,'该程序已经有一个在运行中!','运行',0);
{提示程序已运行}
halt; {退出程序}
end;
{---------------------------------}
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

该程序在测试时由于Delphi也生成了此类实例窗体,所以会出现提示框,只有关闭Delphi后单独运行程序才能实现。
 
多人接受答案了。
 
后退
顶部