我想编个程序同时只能运行一个此程序的实例再运行只是激活当前程序.
我现在不知道怎么样能激活这个程序,请指点下哈谢谢!
我现在不知道怎么样能激活这个程序,请指点下哈谢谢!
解决方案 »
- 显示指定路径的图片
- 急求:通讯为9600.n.8.1的硬件通过串口发送数据,用delphi如何接收,并转化为10进制存如SQL
- 鄙视CC新婚-BSCC新婚-BSCC新婚-BSCC新婚-BSCC新婚-BSCC新婚-BSCC新婚-BSCC新婚-BSCC新婚
- 如何动态创建进度条?
- 简单问题EDIT哪一个属性是允许多行显示的哟
- 怎样恢复SQL2000数据库,给出原代码(要求用ADO),在线等
- 急急,十万火急,是高手的话一定要进来看看,关于Oracle图片数据处理
- 控制台程序中怎样清空键盘缓冲区?
- 谁能给我两个例子,关于ereport和creport连接表(db或dbf)的,谢谢。
- 我想用delphi调用一个动画文件,比如Flash动画,我该怎么做呢?
- 用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.