我的程序是单实例的
这个程序已经启动,如果我再去启动这个程序
那么这个程序的窗口应该被激活(就像开始菜单里面的我的电脑)请问我能在别的程序里面截获这个消息吗

解决方案 »

  1.   

    可以。下WH_CBT钩子。在nCode==HCBT_ACTIVATE的时候激活
    LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
     if(nCode < 0)
     {
      return CallNextHookEx(g_hHook, nCode, wParam, lParam);
     } switch(nCode)
     {
     case HCBT_ACTIVATE:
      HWND hWnd = (HWND)wParam;
      char szTitle[256];
      GetWindowText(hWnd, szTitle, sizeof(szTitle));   return 0;
      } }
     // 调用下一个Hook
     return CallNextHookEx(g_hHook, nCode, wParam, lParam);
    }
      

  2.   

    HWND hWndPrevious = ::GetWindow(::GetDesktopWindow(),GW_CHILD); while (::IsWindow(hWndPrevious))
    {
    if (::GetProp(hWndPrevious,AfxGetAppName()))
    {
    //主窗口已最小化,恢复
    if (::IsIconic(hWndPrevious))
    {
    ::ShowWindow(hWndPrevious,SW_RESTORE);
    } //将主窗口激活
    ::SetForegroundWindow(hWndPrevious); //将主窗口的对话框激活
    ::SetForegroundWindow(
    ::GetLastActivePopup(hWndPrevious));
    //退出本实例
    return FALSE;
    } //继续寻找下一窗口
    hWndPrevious = ::GetWindow(hWndPrevious,GW_HWNDNEXT);
    }