VC和Delphi程序只运行一个实例的方法
在Delphi中建立一个应用程序,然后单击菜单“Project”,单击“View Source”,这样就在代码编辑器中打开了工程文件,它的代码看起来像这样:
program OnlyOne; uses Forms, uOnlyOneWindow in 'uOnlyOneWindow.pas' {OnlyOneWindow }; {$R *.res} begin Application.Initialize; Application.CreateForm(TOnlyOneWindow, OnlyOneWindow); Application.Run; end. |
我将其代码更改如下:
program OnlyOne; uses Windows, Forms, uOnlyOneWindow in 'uOnlyOneWindow.pas' {OnlyOneWindow}; {$R *.res} var hAppMutex: THandle; begin Application.Initialize; //创建互斥对象 hAppMutex := CreateMutex(nil, false, PChar('OnlyOne')); if (hAppMutex = 0) then begin MessageBox(0,PChar('创建互斥对象失败!'),PChar('Error'),MB_OK + MB_ICONINFORMATION); exit; end; //查看是否是第一次运行程序 if ((hAppMutex <> 0) and (GetLastError() = ERROR_ALREADY_EXISTS)) then begin MessageBox(0,PChar('不是第一次运行这个程序!'),PChar('OK'),MB_OK + MB_ICONINFORMATION); //关闭互斥对象,退出程序 CloseHandle(hAppMutex); exit; end; Application.CreateForm(TOnlyOneWindow, OnlyOneWindow); Application.Run; //关闭互斥对象 CloseHandle(hAppMutex); end. |
注意:
1.在User中,要把Windows放在Form前头;
2.开始创建互斥对象的代码要在Application.Initialize之后;
3.关闭互斥对象操作要放在Application.Run之后;
这样,我们只用了较少的代码和较少的系统资源消耗就实现了应用程序检测自己是否被多次运行,从而保证只运行一个示例这样的效果。
以上程序在Visual C++ 6.0(SP6)、Delphi 7(Build 8.1)中编译,在Windows XP SP2中测试通过。
注1:当某调用者所请求创建的互斥对象已经被命名了并且存在,这时这个调用者为“第二个调用者”。
Tags:
作者:佚名评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论