只启动一个程序实例,如果已运行则调到前端
2014-01-14 16:39
274 查看
1. 设置互斥量,并查找窗口,在InitInstance()函数中实现
TCHAR szMuteName[] = _T("MySignleApp"); HANDLE hSingleTon = CreateMutex(NULL, FALSE, szMutexName); if(GetLastError() == ERROR_ALREADY_EXISTS) { HWND hwndPrevious = ::GetWindow(::GetDesktopWindow(), GW_CHILD); //查找先前实例的主窗口 while(::IsWindow(hwndPrevious)) { //检查窗口是否有预设的标记 //有,则是要查找的主窗口 if(::GetProp(hwndPrevious, m_pszExeName)//要用SetProp来设定标记,可在MainFrm的OnCreate函数中调用SetProp {
//窗口已经最小化,则恢复其大小
if(::IsIconic(hwndPrevious))
{
::ShowWindow(hwndPrevious, SW_RESTORE);
}
::SetForegroundWindow(hwndPrevious);//激活主窗口
::SetForegroundWindow(::GetLastActivePopup(hwndPrevious));//激活主窗口的对话框
return FALSE;//退出本实例
}
hwndPrevious = ::GetWindow(hwndPrevious, GW_HWNDNEXT);//查找下一个窗口}
return FALSE;//前一个实例已经存在,但找不到其主窗口,退出实例}
2. 设置标记,在MainFrame的OnCreate()函数中
::SetProp(m_hWnd, theApp.m_pszExeName, (HANDLE)1);
3. 在程序关闭时去掉标记,可在OnClose()函数中实现
::RemoveProp(m_hWnd, theApp.m_pszExeName);
相关文章推荐
- 用C#给程序加启动画面并只允许一个应用程序实例运行
- C# 实现程序只启动一次(多次运行激活第一个实例,使其获得焦点,并在最前端显示)
- c# 程序只能运行一次(多次运行只能打开同一个程序) 并激活第一个实例,使其获得焦点,并在最前端显示.
- C# 实现程序只启动一次(多次运行激活第一个实例,使其获得焦点,并在最前端显示)
- C# 实现程序只启动一次(多次运行激活第一个实例,使其获得焦点,并在最前端显示)
- 用C#给程序加启动画面并只允许一个应用程序实例运行
- 用C#给程序加启动画面并只允许一个应用程序实例运行
- C# 程序只能运行一次(多次运行只能打开同一个程序) 并激活第一个实例,使其获得焦点,并在最前端显示.
- 用C#给程序加启动画面并只允许一个应用程序实例运行
- C# 实现程序只启动一次(多次运行激活第一个实例,使其获得焦点,并在最前端显示)
- C# 实现程序只启动一次(多次运行激活第一个实例,使其获得焦点,并在最前端显示)
- VC 对话框 只允许运行一个实例 ,如果有就激活到前端
- c# 程序只能运行一次(多次运行只能打开同一个程序) 并激活第一个实例,使其获得焦点,并在最前端显示.
- C# 实现程序只启动一次(多次运行激活第一个实例,使其获得焦点,并在最前端显示)
- c# 程序只能运行一次(多次运行只能打开同一个程序) 并激活第一个实例,使其获得焦点,并在最前端显示.
- c# 程序只能运行一次(多次运行只能打开同一个程序) 并激活第一个实例,使其获得焦点,并在最前端显示.
- c# 程序只能运行一次(多次运行只能打开同一个程序) 并激活第一个实例,使其获得焦点,并在最前端显示.
- 用C#给程序加启动画面并只允许一个应用程序实例运行
- c# 程序只能运行一次(多次运行只能打开同一个程序) 并激活第一个实例,使其获得焦点,并在最前端显示.
- 用C#给程序加启动画面并只允许一个应用程序实例运行