记得我的一个朋友曾经来找我,问我怎样能够禁止自己的程序在 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)