win应用只允许单个实例运行,并将已运行实例窗口置顶
2015-02-03 16:30
246 查看
关键词:windows,c++,桌面应用,单个实例,窗口置顶
目标:1.判断本程序是否已有一个实例在运行。2.若有,则激活已在运行的实例(将其窗口置顶),并退出当前运行。
1.使用semaphore来检测是否已有实例在运行(也可以用mutex,文件等其他方式)
2.使用FindWindow()来得到已运行实例的窗口句柄
这里我们已经知道ClassName,所以可以直接用ClassName来找到已有的窗口。
然后使用SetForegroundWindow()来激活已运行实例:
3.最后程序退出时记得ReleaseSemaphore()并关闭句柄。
参考:
1.http://xbi847ux.iteye.com/blog/1361639
2.http://blog.csdn.net/starlee/article/details/1534489
目标:1.判断本程序是否已有一个实例在运行。2.若有,则激活已在运行的实例(将其窗口置顶),并退出当前运行。
1.使用semaphore来检测是否已有实例在运行(也可以用mutex,文件等其他方式)
HANDLE g_hSingleSema = ::CreateSemaphore(NULL, 1, 1, _T("single_myapp_sema")); if (g_hSingleSema && ERROR_ALREADY_EXISTS == GetLastError()) { // 查找窗口,激活已运行实例,并退出当前运行 }
2.使用FindWindow()来得到已运行实例的窗口句柄
HWND WINAPI FindWindow( _In_opt_ LPCTSTR lpClassName, _In_opt_ LPCTSTR lpWindowName );
这里我们已经知道ClassName,所以可以直接用ClassName来找到已有的窗口。
HWND hWnd = ::FindWindow(_T("MyAppClassName"), NULL);
然后使用SetForegroundWindow()来激活已运行实例:
::SetForegroundWindow(hWnd);
3.最后程序退出时记得ReleaseSemaphore()并关闭句柄。
参考:
1.http://xbi847ux.iteye.com/blog/1361639
2.http://blog.csdn.net/starlee/article/details/1534489
相关文章推荐
- linux下c/c++实例之三只允许单个程序运行
- 使应用程序只能运行单个实例。
- 只允许创建一个实例的VB.NET窗口
- 利用c#制作托盘程序,并禁止多个应用实例运行
- C# Windows 桌面应用只运行一个实例(总结)
- 允许单一实例运行的方法
- 用C#给程序加启动画面并只允许一个应用程序实例运行
- 修改主窗口的类名来防止程序运行多个实例
- 只允许一个进程运行的实例
- Visual Studio 2005(C#)中只允许一个实例运行的一种方法
- C# Windows 桌面应用只运行一个实例(总结)
- 用C#给程序加启动画面并只允许一个应用程序实例运行[转]
- Visual Studio 2005(C#)中只允许一个实例运行的一种方法
- 最小化win窗口或隐藏之后再启动实例则打开前面的实例窗口
- 只允许程序运行一个实例
- 使应用程序只能运行单个实例。
- 如何确保应用只有一个实例运行
- Visual Studio 2005(C#)中只允许一个实例运行的一种方法
- 只允许运行一个实例
- VC程序只运行一个实例,并在打开多个时激活原窗口