让程序单例程运行

1.  使用Mutex内核对象

 

 

bool IsHaveAnotherProcess()
{
        HANDLE hMutex = CreateMutex( NULL, FALSE, "ProcessA" );
        if ( GetLastError() == ERROR_ALREADY_EXISTS )
        {
                CloseHandle( hMutex );
                AfxMessageBox( "程序已经启动" );
                return false;
        }
        return true;
}

 

 

         先用 CreateMutex 来创建一个具名互斥量,若是创建成功返回一个互斥量对象的句柄; 反之,函数返回这个已经存在的互斥量的句柄,并 GetLastError() 返回错误代码 ERROR_ALREADY_EXISTS。
   

事实上,这是利用了windows内核对象的知识。命名的内核对象属于全局可访问的,唯一的,当创建一个命名的内核对象时 ( Create* ),系统会先检查内核里是否有这个对象,有则返回这个对象的句柄,无则创建一个。

 

 

 

 

MFC Comments(0) 2009年7月25日 14:58

MFC 置窗口最前端

  

         

    ::SetWindowPos( GetSafeHwnd(), HWND_TOPMOST , 0,0,0,0,SWP_NOMOVE | SWP_NOSIZE );


          第二个参数设成 : HWND_NOTOPMOST , 就可以取消前端显示了

MFC Comments(0) 2009年7月24日 18:57