为了防止程序多次运行,需要
使用findWindow得到应用程序的进程,如果发现已经运行,则退出,否则运行,我使用的是FindWindow(nil,'应用程序名'),可是不行
使用findWindow得到应用程序的进程,如果发现已经运行,则退出,否则运行,我使用的是FindWindow(nil,'应用程序名'),可是不行
解决方案 »
- delphi中有没有保存窗口控件属性的控件啊?
- 如何让QRimage里显示的图片变为黑白的?
- 如何利用DEPHI做一个用户登录窗口
- TListView的问题
- 请问有没有是Delphi开发Web Service的?
- socket中为什么在clientsocket中执行了socket.sendbuf之后,服务端的SocketClientRead事件不被激发?
- for i:=0 to 100 do 求解
- 一个弱弱的问题:如何计算datetime1与datetime2之间的时间间隔是多少分钟。
- 怎样用Delphi 制作MDI窗口程序 ?
- 在Delphi中怎样用SQL查询语句对子表求和?
- 线程占用CPU100%的问题
- Invalid pointer operation
findWindow是得不到应用程序的进程id的,只能得到应用程序内某窗口的句柄,因此一般用应用程序的主窗口来进行判断程序是否运行!!这种方法虽然有它的局限性,但一般情况下都是可行的!!
1、对主窗口程序的改动:
在主窗口(即程序创建的第一个窗口)中interface节加入
const
CM_RESTORE = WM_USER + $1000; {自定义的“恢复”消息}
MYAPPNAME = "My Delphi Program";
并在Form的定义的public节中加入
procedure CreateParams(var Params: TCreateParams); override;
Procedure RestoreRequest(var message: TMessage); message CM_RESTORE;
在implementation节中加入
{指定窗口名称}
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.WinClassName := MYAPPNAME;
end;
{处理“恢复”消息}
procedure TForm1.RestoreRequest(var message: TMessage);
procedure TForm1.RestoreRequest(var message: TMessage);
begin
if IsIconic(Application.Handle) = TRUE then
Application.Restore
else
Application.BringToFront;
end;
经过以上修改,程序的主窗口的类名已经被指定了,这是进行判断的基础。一般在程序刚开始运行的时候进行判断,所以还要对DPR文件进行修改。
2、对DPR文件的改动
在 uses 节中添加 windows、messages这两个单元加入下列语句,注意两个文件中常量CM_RESTORE和MYAPPNAME的定义必须一致
const
CM_RESTORE = WM_USER + $1000; {自定义的“恢复”消息}
MYAPPNAME = "My Delphi Program";
var
RvHandle : hWnd;
将下列语句插到程序最前部(在Application.Initialize之前)
RvHandle := FindWindow(MYAPPNAME, NIL);
if RvHandle > 0 then
begin
PostMessage(RvHandle, CM_RESTORE, 0, 0);
Exit;
end;
这段程序的意思是如果找到一个类名相同的窗口,则向该窗口发送一个消息,并退出,而本例中原窗口收到该消息后会自动激活或从图标还原,从而达到了避免二次运行且能自动调出前一例程的目的。
CreateMutex(Nil, true, ‘DGTSrun‘);//‘DGTSrun‘随便,作标志
if GetLastError < > ERROR_ALREADY_EXISTS then
begin
Application.Initialize;
Application.CreateForm(TTeach_Main, Teach_Main);
//............
Application.Run;
end;
http://community.csdn.net/Expert/topic/3154/3154736.xml?temp=.4693415
接点分