浪漫之城

嵌入式、LINUX、WINCE
  博客园  :: 首页  :: 新随笔  :: 订阅 订阅  :: 管理

编程禁止程序多次运行

Posted on 2010-05-18 11:23  wengd  阅读(262)  评论(0)    收藏  举报

代码
// 枚举窗口的回调函数
BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam)
{
char title[256];
::GetWindowText(hWnd, title,
256);
if(strcmp(title, "SampleApp V1.0") == 0)
{
// 检查窗口标题,如果找到对应窗口,在前端显示该窗口
ShowWindow(hWnd, SW_SHOWNORMAL);
SetForegroundWindow(hWnd);
}

return TRUE;
}

BOOL CSampleApp::InitInstance()
{
// 建立进程互斥量
HANDLE m_hMutex = CreateMutex(NULL, FALSE, "Sample_01");

// 检查错误代码,如果互斥量已存在,显示旧程序主窗口并退出本程序
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
// 如果已有互斥量存在则释放句柄并复位互斥量
CloseHandle(m_hMutex);
m_hMutex
= NULL;

// 枚举窗口
EnumWindows(EnumWindowsProc, NULL);
return FALSE;
}

// 其他程序代码...

CloseHandle(m_hMutex);
}