C++Windows下如何让窗口进程只运行一个实例

本文介绍如何在C++的Windows环境下,通过修改MFC对话框项目的CMFCTestApp::InitInstance()函数,实现确保应用程序仅有一个运行实例的功能。
摘要由CSDN通过智能技术生成

为了方便我们新建一个名为MFCTest的MFC对话框项目然后打开找到CMFCTestApp::InitInstance()函数添加单实例检测代码:

BOOL CMFCTestApp::InitInstance()
{
    //
    //单实例检测
    try
    {
        //方式一根据ClassName和窗口标题找窗口句柄( MFC默认CLASSNAME为#32770 )
        //非MFC窗口则填写自己设置的ClassName
        HWND hWnd = FindWindow( TEXT( "#32770" ), TEXT( "MyMFCTest" ) );

        //找到句柄说明在运行
        if( NULL != hWnd )
        {
            throw TEXT( "程序已运行!" );
        }
        //一般情况下使用方式一即可为了安全防止在方式一失效的情况下
        //还有其他的方式来检测所以提供了方式二:

        //方式二创建一个互斥量,由于互斥量在进程中共享创建同名互斥量
        //GetLastError()会返回ERROR_ALREADY_EXISTS
        HANDLE hMutex = CreateMutex( NULL, TRUE, TEXT( "MyMFCTest_Mutex" ) );

        //出错
        if( NULL == hMutex )
        {
            throw TEXT( "运行时出错!" );
        }

        //已存在互斥量说明在运行
        if( ERROR_ALREADY_EXISTS == GetLastError() )
        {
            CloseHandle( hMutex );
            hM
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值