您的位置:首页 > 其它

程序运行初期检查是否已经有一个自身的进程在运行,保证一台PC机器只运行一个程序

2015-03-04 11:13 621 查看
如何保证一个程序在一台机器上只能同时存在一个进程?下面给出解决方案

1.在VS2010/MFC中创建一个基于对话框的工程MutexRun。

2.在BOOL CMutexRunDlg::OnInitDialog()最下面添加如下代码:

::SetProp( this->m_hWnd, L"MutexRun", (HANDLE)1 );

3.在BOOL CMutexRunApp::InitInstance()中最前面添加如下代码

HANDLE dlgHandle = ::CreateMutex( NULL, FALSE, m_pszExeName); //CWinApp中的成员函数,数值是程序本身的名字。

if( GetLastError() == ERROR_ALREADY_EXISTS )

{

CloseHandle( dlgHandle );

AfxMessageBox(L"该应用程序已经存在!");

dlgHandle= NULL;

HWND hWndPrevious = ::GetWindow(::GetDesktopWindow(), GW_CHILD);

while (::IsWindow(hWndPrevious))

{

// 检查窗口是否有预设的标记

// 有,则是我们寻找的主窗

if (::GetProp(hWndPrevious, m_pszExeName)) //要想成功显示出来下面的缺一不可

{

// 主窗口已最小化,则恢复其大小

if (::IsIconic(hWndPrevious))

::ShowWindow(hWndPrevious,SW_SHOWNORMAL);

::ShowWindow(hWndPrevious, SW_RESTORE);

// 将主窗激活

::SetForegroundWindow(hWndPrevious);

// 将主窗的对话框激活

::SetForegroundWindow(::GetLastActivePopup(hWndPrevious));

// 退出本实例

return FALSE;

}

// 继续寻找下一个窗口

hWndPrevious = ::GetWindow(hWndPrevious, GW_HWNDNEXT);

}

return FALSE;

}

编译运行,点击最小化按钮,最小化后,重新打开MutexRun.exe即看到效果。

具体代码见:http://download.csdn.net/detail/xiaxiaojing/8471257
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: