如何列举当前桌面上运行的所有可见窗口?注意,是可见窗口,不是所有窗口

解决方案 »

  1.   

    获得每一个窗口后判断该窗口是否有WS_VISIBLE风格...
    if(GetWindowLong(hwnd,GWL_STYLE) & WS_VISIBLE)
    {
        //该窗口是可见的;
        //做爱做的事...
    }
      

  2.   

    我想思路应该是这样,
    首先罗列出所有窗口,
    然后对每一个窗口的可见性进行检查(不能凭WS_VISIBLE来判定,因为这样的话,那如果在程序中调用了ShowWindow(SW_HIDE)就会出问题)
    源程序正在写
      

  3.   

    HWND hWnd=::GetWindow(::GetDesktopWindow(),GW_CHILD); 
    while (hWnd)

      // 处理排除不可见窗口
      hWnd=::GetWindow(::GetWindow(hWnd,GW_HWNDNEXT)); 
    }
    另外,EnumWindow()也可以。我没用过,谁来讲讲吧
      

  4.   

    ShowWindow(SW_HIDE)就会出问题????????
    为什么???调用这个API后WS_VISIBLE就去掉了...
    除了这样做还有别的方法???????
      

  5.   

    如果你知道窗口名,不如用FindWindow.
      

  6.   

    在枚举窗口的过程中再加一些条件进行判断
    BOOL CALLBACK MyEnumWindowsProc(HWND hwnd, LPARAM lParam)
    {
         if(IsWindowVisible(hwnd)&&!GetParent(hwnd))//窗口可见并且没用父窗口
         {
          ......
         }
    }
      

  7.   

    http://www.codeproject.com/threads/enumprocess.asp
    http://www.codeproject.com/tools/minispy.asp