启动程序(第二次开启程序,显示第一次打开的程序)

来源:互联网 发布:暗黑破坏神3 mac 卡吗 编辑:程序博客网 时间:2024/05/17 06:43

     很多时候我们会限制程序只能开启一个,一般我们会用全局命名互斥量来实现这个任务。

如果程序没有界面,这样做可以很好实现。但是如果程序有界面呢,用户在双点桌面的快捷方式时,程序不能开启,最多只能提示程序已开启。这样就算完事了。但对用户来说,还要在任务栏上找个半天(也许这时个任务栏已全部都排满了。所以这对用户是很大的不方便。

下面写的是我最近看到的一个方案,它在第二次启动时最就第一次打开的界面显示在最前面。用户操作很方便多

// 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}

原创粉丝点击