只能运行一个程序的实例 我想编个程序同时只能运行一个此程序的实例再运行只是激活当前程序.我现在不知道怎么样能激活这个程序,请指点下哈谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, CheckLst;type TForm1 = class(TForm) private { Private declarations } public { Public declarations } end;var Form1: TForm1; //保存Mutex句柄 mHandle:THandle; PreviousInstanceWindow:HWnd; Project:String; AppName:String;implementation{$R *.dfm}initialization //定义自己的项目名称,作为要创建的互斥区名,最好有自己的特点以防止重复 Project:='RunOnlyOnce_MyProject'; //将lpMutexAttributes设为nil,bInitialOwner设为True(即本程序拥有该互斥区) mHandle:=CreateMutex(nil,True,PChar(Project)); if GetLastError=ERROR_ALREADY_EXISTS then //该互斥区已存在则表明已有本程序的另一个实例在运行 begin ShowMessage('已经有该程序在运行'); //保存程序标题 AppName:=Application.Title; //不显示本窗口 Application.ShowMainForm:=False; //改变程序标题,以使函数FindWindow找到的是前一个实例窗口 Application.Title:='destroy me'; //寻找前一个实例窗口句柄 PreviousInstanceWindow:=FindWindow(nil,PChar(AppName)); //已经找到 if PreviousInstanceWindow<>0 then //如果该窗口最小化则恢复 if IsIconic(PreviousInstanceWindow) then ShowWindow(PreviousInstanceWindow,SW_RESTORE) else //如果程序在后台则将其放到前台 SetForegroundWindow(PreviousInstanceWindow); //中止本实例 Application.Terminate; end; finalization //该互斥区对象仍存在则关闭对象 if mHandle<>0 then CloseHandle(mHandle);end. 你可以去《Delphi开发人员指南》里面有这个例子,非常好的,我推荐你看这本书! 在Project里用FindWindow查找,如果查找结果为nil,则运行应用程序,如果不为nil,则表示已经运行了一个一样的程序. 关于一个panel嵌套一个form的问题 ~ 又急又汗 问个很简单的问题。。。如何调用那个一个文本的字体设置 急急急,高手请指教!BDE打包问题 关于Delphi2005的问题,请兄弟姐妹们解答,100分 关于TIdTCPClient连接问题 菜鸟问题! dll里的form的释放问题 为什么,我用ACCESS2000导出数据库为DB或DBF后,用DESKTOP打开时,中文无法正常显示? Delph5下的dcu文件怎么在Delphi6下使用呀 給您送分啦!!! 用ADO连接Oracle能自动弹出输入密码的对话框吗? 在表中字段类型是integer,用edit控件的时候要转换吗??!
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, CheckLst;type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
//保存Mutex句柄
mHandle:THandle;
PreviousInstanceWindow:HWnd;
Project:String;
AppName:String;
implementation{$R *.dfm}
initialization
//定义自己的项目名称,作为要创建的互斥区名,最好有自己的特点以防止重复
Project:='RunOnlyOnce_MyProject';
//将lpMutexAttributes设为nil,bInitialOwner设为True(即本程序拥有该互斥区)
mHandle:=CreateMutex(nil,True,PChar(Project));
if GetLastError=ERROR_ALREADY_EXISTS then
//该互斥区已存在则表明已有本程序的另一个实例在运行
begin
ShowMessage('已经有该程序在运行');
//保存程序标题
AppName:=Application.Title;
//不显示本窗口
Application.ShowMainForm:=False;
//改变程序标题,以使函数FindWindow找到的是前一个实例窗口
Application.Title:='destroy me';
//寻找前一个实例窗口句柄
PreviousInstanceWindow:=FindWindow(nil,PChar(AppName));
//已经找到
if PreviousInstanceWindow<>0 then
//如果该窗口最小化则恢复
if IsIconic(PreviousInstanceWindow) then
ShowWindow(PreviousInstanceWindow,SW_RESTORE)
else
//如果程序在后台则将其放到前台
SetForegroundWindow(PreviousInstanceWindow);
//中止本实例
Application.Terminate;
end;
finalization
//该互斥区对象仍存在则关闭对象
if mHandle<>0 then
CloseHandle(mHandle);
end.