用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心编程技巧Visual C++

VC和Delphi程序只运行一个实例的方法

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-03-16 20:37:07


  在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:当某调用者所请求创建的互斥对象已经被命名了并且存在,这时这个调用者为“第二个调用者”。

上一页  [1] [2] 

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:4,453.12500 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号