首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

怎么程序互斥,只打开一次

2012-02-04 
如何程序互斥,只打开一次?我是这样写的。varmyMutex:HWNDbeginmyMutex:CreateMutex(nil,false, myCopy )

如何程序互斥,只打开一次?
我是这样写的。
var

  myMutex:HWND;

begin

    myMutex:=CreateMutex(nil,false, 'myCopy ');//   CreateMutex建立互斥对象,并且给互斥对象起一个唯一的名字。

    if   WaitForSingleObject(myMutex,0) <> wait_TimeOut   then//程序没有被运行过


但程序打开后自动关闭了。

[解决办法]
CreateMutex(nil,False, 'Proj_Plant.exe ');
if GetLastError = ERROR_ALREADY_EXISTS then
Application.Terminate;
[解决办法]
在工程文件的
“ Application.Initialize;” 之前加入如下代码:

RvHandle := FindWindow(MYAPPNAME, NIL);
if RvHandle > 0 then
begin
PostMessage(RvHandle, CM_RESTORE, 0, 0);
Exit;
end;

RvHandle : hWnd;

MYAPPNAME为一个常量,在主界面中定义,是你自定义的文件名!

在主界面中自定义一个public过程
procedure CreateParams(var Params: TCreateParams); override;

在过程中写入代码:
inherited CreateParams(Params);
Params.WinClassName := MYAPPNAME;



[解决办法]
Application.Initialize;
application.title:= 'HighSoftClient ';
tmp:=createmutex(nil,false, 'HighSoftClient ');
if getlasterror <> error_already_exists then
begin
Application.CreateForm(TMainFrm, MainFrm);
Application.Run;
end;
这样可以使你的程序只运行一次
[解决办法]
友情提醒: 不可以用 FindWindow。FindWindow是不能完全避免重复运行的。

热点排行