程序运行初期检查是否已经有一个自身的进程在运行,保证一台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
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
相关文章推荐
- 保证一个程序在同一台PC中只运行一个实例的两种方法
- c#检查程序是否已经运行,如何防止多次运行同一个程序?
- C# WinForm 判断程序是否已经在运行,且只允许运行一个实例,附源码
- java判断一个程序是否已经运行
- C#检测是否已经运行了一个当前的程序【搜藏】
- 一台机器只能运行一个程序
- 保证系统中只运行当前程序的一个进程
- c#检查启动的程序是否已经在运行
- 在VC中实现一次执行一个进程,如果同时打开两个,则报该程序已经运行
- WinForm判断程序是否已经在运行,且只允许运行一个实例
- winform 判断程序是否已经运行,提示“只允许运行一个程序”
- 检查是否本程序已经在运行
- Linux文件锁flock,检查程序是否已经运行
- C# WinForm 判断程序是否已经在运行,且只允许运行一个实例,附源码
- Linux 判断进程是否已经运行的程序
- shell练习之检查一个程序是否运行并给出提示的方法
- 检测系统是否已经运行了相同的程序
- 在同一个进程空间运行两个程序
- alert7写的检测linux是否运行在VMWARE中的一个程序
- 如何检测系统是否已经运行了相同的程序。