VC和Delphi程序只运行一个实例的方法(2)
我们在VC中以一个没有窗口,也不用MFC的Win32应用程序作例子。打开VC6,新建一个工程,类型选择Win32 Application,工程名为:OnlyOne,单击OK,选择一个空的工程,完成。为工程添加一个新的C++源代码文件,命名为:OnlyOne.c,并输入如下代码:
#include <Windows.h>
int
WINAPI
WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd
)
{
char strAppName[] = "OnlyOne";
HANDLE hMutex = NULL;
//创建互斥对象
hMutex = CreateMutex(NULL, FALSE, strAppName);
if (hMutex != NULL)
{
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
MessageBox(NULL,TEXT("不是第一次运行这个程序。"),TEXT("OnlyOne"),MB_OK | MB_ICONINFORMATION);
//关闭互斥对象,退出程序
CloseHandle(hMutex);
return (-1);
} else
{
MessageBox(NULL,TEXT("第一次运行这个程序。"),TEXT("OnlyOne"),MB_OK | MB_ICONINFORMATION);
}
} else
{
MessageBox(NULL,TEXT("创建互斥对象失败。"),TEXT("OnlyOne"),MB_OK | MB_ICONINFORMATION);
}
//关闭互斥对象
CloseHandle(hMutex);
return (-1);
}
同理,这个方法适用于所有的原生Win32应用程序,能够正常调用GreateMutex和GetLastError两个函数即可,Delphi程序(这次是一个带有窗口的程序)可以参考以下步骤和代码:
在Delphi中建立一个应用程序,然后单击菜单“Project”,单击“View Source”,这样就在代码编辑器中打开了工程文件,它的代码看起来像这样:
program OnlyOne;
uses
Forms,
uOnlyOneWindow in 'uOnlyOneWindow.pas' {OnlyOneWindow };
- 上一篇:使用VC6.0实现窗口的任意分割
- 下一篇:用VC++制作播放AVI视频流的动画按钮