No MFC 编程02 - 我要独一无二 !

类别:VC语言 点击:0 评论:0 推荐:

 

    记得我的一个朋友曾经来找我,问我怎样能够禁止自己的程序在 win95 里重叠运行。

    我给了他一段代码,他就欢天喜地的回去了。

    现在把那段代码拿出来,大家分享


  //  使用建立互斥量的方法来检测多个实例

 HANDLE hMyMutex = CreateMutex( NULL, false, "MyMutex"); // "MyMutex" 是你程序的标识, 可以改的
   DWORD  ErrCode  = GetLastError();

  if ( ErrCode == ERROR_ALREADY_EXISTS )
    { 
     MessageBox(NULL, "检测到旧实例,abort", "  - Notice ! ", MB_OK|MB_TOPMOST );
     ExitProcess( NULL);
     }
   // End of 互斥量检测  


   把它加到我昨天做的框架, WinMain 函数体开头就可以了。
   见《No MFC 编程01 - 最精简的 win32 程序》
     http://www.csdn.net/develop/Read_Article.asp?Id=15167

 

   浅析原理:( 本来想收工,但看到文章太短就不自在 )

   CreateMutex 函数创建了 叫 "MyMutex" 的互斥量 ( 不要问我有什么用 )

   GetLastError 函数取得创建过程的突发状况

   第一种情况:之前没有实例在运行,新建 "MyMutex" 的互斥量成功。( "MyMutex" 的生存期到本程序实例结束为止 )

   第二种情况:之前有一个实例在运行,发现已经有叫 "MyMutex" 的互斥量了,拿来就用。不过 GetLastError 还是知道了。

   第二种情况引起的处理:当然是退出程序的第二个实例了,见过同时运行两个同一版本 Winamp 吗?

   问:有第三种情况吗?(不告诉你)

    ( 有句广告词:" 我不认为我与众不同,因为我是独一无二的 " )

       不说废话了! 2002年9月28日 am 9:43          


——————————————————————————
附自我简介:

特    征:未到而立,刚到米七,语音略带磁性,性格开朗,有点顽皮,有点小聪明,准完美主义者 …
最 大 嗜 好 : 玩电子游戏 ( 梦想开发 Oni 连线版, 未玩过 Oni ? ohhh ! )
爱用的编译器: VC + DX_SDK + api ( 戏称VC++ )
近来常挂嘴边: 你相信吗?月球土壤样本证实月球在形成太阳系之前已经存在 …
目前喜欢的歌: 陈美 - 小提琴的升华 (CONTRADANZA)

本文地址:http://com.8s8s.com/it/it2265.htm