实际上是两个问题:
1、获取窗口句柄。这个不想要子窗口的。
2、通过句柄获取窗口TITLE。

解决方案 »

  1.   

    对不起,实际情况是这样:1、获取所有窗口名字。(不包括子窗口)
    2、关闭不是特定窗口的其他所有窗口。我需要知道的是能使些以上功能的WIN32 API.
      

  2.   

    1.在什么情况下获取//this.Handle
    2.Form f=(Form)Form.FromHandle(Handle);
    string a=f.Text;
      

  3.   

    call api
    GetWindowText
      

  4.   

    /// <summary>
            /// 返回包含了指定点的窗口的句柄。忽略屏蔽、隐藏以及透明窗口
            /// </summary>
            /// <param name="Point">点的坐标,以像素为单位</param>
            /// <returns>
            /// 包含了指定点的窗口的句柄。
            /// 如指定的点处没有窗口存在,则返回 IntPtr.Zero
            /// </returns>
    [DllImport("user32.dll")]
    private static extern IntPtr WindowFromPoint(POINT Point);/// <summary>
            /// 取得一个窗体的标题(caption)文字,或者一个控件的内容
            /// </summary>
            /// <param name="hwnd">欲获取文字的那个窗口的句柄</param>
            /// <param name="buffer">预定义的一个缓冲区</param>
            /// <param name="bufferLen">缓冲区的长度</param>
            /// <returns>复制到buffer的字串长度;不包括空中止字符</returns>
    [DllImport("user32.dll")]
    public static extern int GetWindowText(IntPtr hwnd, StringBuilder buffer, int bufferLen);
      

  5.   

    答非所问啊,大哥们。
    莫非你们觉得这几个API就可以实现?
      

  6.   

    调用api可以啊
    贴个c++的,lz可以转成C#用char szHello[100];
    char* szHello1;
    HWND hWndPrevious;
    hWndPrevious   =   ::GetWindow(::GetDesktopWindow(),GW_CHILD);
    LPTSTR m_pszExeName;
    while   (::IsWindow(hWndPrevious))    
    {
    int i=::GetWindowTextLength(hWndPrevious);
    int j=::GetWindowText(hWndPrevious,szHello,10);//获取窗口标题

      do your action
    hWndPrevious   =  ::GetWindow(hWndPrevious,GW_HWNDNEXT);
    }