启动程序(第二次开启程序,显示第一次打开的程序)
2011-12-03 23:48
274 查看
很多时候我们会限制程序只能开启一个,一般我们会用全局命名互斥量来实现这个任务。
如果程序没有界面,这样做可以很好实现。但是如果程序有界面呢,用户在双点桌面的快捷方式时,程序不能开启,最多只能提示程序已开启。这样就算完事了。但对用户来说,还要在任务栏上找个半天(也许这时个任务栏已全部都排满了。所以这对用户是很大的不方便。
下面写的是我最近看到的一个方案,它在第二次启动时最就第一次打开的界面显示在最前面。用户操作很方便多
如果程序没有界面,这样做可以很好实现。但是如果程序有界面呢,用户在双点桌面的快捷方式时,程序不能开启,最多只能提示程序已开启。这样就算完事了。但对用户来说,还要在任务栏上找个半天(也许这时个任务栏已全部都排满了。所以这对用户是很大的不方便。
下面写的是我最近看到的一个方案,它在第二次启动时最就第一次打开的界面显示在最前面。用户操作很方便多
// CAtlFileMapping<HWND> m_mapping; map里放的时程序开启后的主界面窗口句柄 #define APP_OBJECT_NAME _T(“asfasdfadsfadsfasd”) if (m_mapping.GetHandle()) return TRUE; BOOL bAlreadExisted = FALSE; 标签: 程序启动 BOOL bRet = mapping.MapShareMem(sizeof(HWND), APP_OBJECT_NAME, &bAlreadExisted); if (FAILED(bRet)) return bRet; if (bAlreadyExisted) { HWND hWnd = *((HWND *)m_mapping); if (!::IsWindowVisible(hWnd)) ::ShowWindow(hWnd, SW_SHOW); if (::IsIconic(hWnd)) { ::SendMessage(hWnd, WM_SYSTEMCOMMAND, SC_RESTOR | HTCAPTION, 0); ::SetWindowPos(hWnd, HWND_TOP, 0, 0, 0, 0 SW_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW | SWP_NOACTIVATE); ::SetForegroundWindow(hWnd); ::SetFocus(hWnd); return FALSE }
相关文章推荐
- C# 只开启一个程序,如果第二次打开则自动将第一个程序显示到桌面
- 只开启一个程序,如果第二次打开则自动将第一个程序显示到桌面
- C# 只开启一个程序,如果第二次打开则自动将第一个程序显示到桌面
- C# 只开启一个程序,如果第二次打开则自动将第一个程序显示到桌面
- EasyUI使用百度编辑器,第一次打开没有问题,但是第二次打开不显示。
- android 程序第一次安装显示启动帮助页后,不再显示帮助页
- 关于eclipse依赖其他项目第一次依赖显示成功,第二次打开就变红叉的情况解决方案
- 标签:ios开发 界面启动 APP下载安装第一次使用一般会显示一个首次启动引导界面然后进入主界面,非首次开启APP也通常会显示一个启动界面然后进入主界面。 1、本例首次启动显示First
- 打开第二次VB程序时通知第一次运行的程序并自己关闭的方法
- IOS开发中如何判断程序第一次启动(根据判断结果决定是否显示新手操作引导)
- iOS开发 - 判断程序第一次开启 以及 应用升级后第一打开的判断
- WinForm 程序启动时不显示主窗体
- 背水一战 Windows 10 (98) - 关联启动: 使用外部程序打开一个文件, 使用外部程序打开一个 Uri
- VC 实现当拖动一个文件到程序的图标上时,程序自动启动并打开该文件
- iphone程序启动互相调用, 打开其他程序
- c# 程序只能运行一次(多次运行只能打开同一个程序) 并激活第一个实例,使其获得焦点,并在最前端显示.
- QT 界面添加时间显示后CPU占用25%,打开程序卡顿
- C# WinForm 如何实现启动系统程序、文件或打开新网页?
- 解决:VMWare虚拟机无法开启,显示模块“Disk”启动失败
- Android 中设置只是程序第一次运行才显示的界面