windows内核对象可以通过唯一命名空间的方式在进程之间共享,因此如果想要程序只能打开一个,可以通过内核对象的创建来判断
HANDLE handle = ::CreateMutex(NULL, FALSE, _T("Only One"));
if (GetLastError() == ERROR_ALREADY_EXISTS) {
//退出程序
}
此处创建互斥器时,内核会去判断同样命名的对象是否已经存在。注意,即使是同样的内核对象,句柄也可能不同
创建的句柄会在进程结束时回收,所以不用手动close