本帖最后由 xxcpsdht 于 2010-05-06 23:43:17 编辑

解决方案 »

  1.   

    WindowFromPoint得到的顶级窗口,查找窗口中的空间需要再调用ChildWindowFromPoint。
      

  2.   

    但是我发现所指向的的按钮的确是灰化的按钮
    类名和标题名都正确
    但是却不能对其进行操作
    比如EnableWindow
    PostMessage也不行我用遍历子窗口的办法来取得这个灰化按钮的句柄 类名 标题名
    和我用鼠标取得的句柄 类名 标题名来进行比对
    完全一样
    但是用鼠标取得的办法不能对其进行操作
    但是用遍历子窗口的就可以
    不知道这是什么原因
    还请教各位大大
      

  3.   


        WindowFromPoint函数不获取隐藏或禁止的窗口句柄,即使点在该窗口内    帮你找到的资料:    函数功能:该函数确定属于父窗口的哪一个子窗口(如果存在的话)包含着指定的点。该函数可以忽略不可见的、禁止的和透明的子窗口。    函数原型:HWND ChidWindowFromaPointEx(HWND hwndParent,POINT pt,UNIT uFlags);    参数:    hWndParent:父窗口句柄。    pt:指定一个POINT结构,该结构定义了被检查的点的坐标。    uFlags:指明忽略的子窗口的类型。该参数可以是下列参数的组合。    CWP_ALL:不忽略任一子窗口。CWP_SKIPINVISIBLE:忽略不可见的子窗口。    CWP_SKIPDISABLE:忽略禁止的子窗口。CWP_SKIPTRABSPARENT:忽略透明子窗口。    返回值:返回值为包含该点并且满足由uFlags定义的规则的第一个子窗口的句柄。如果该点在父窗口内,但在任一满足条件的子窗口外,则返回值为父窗口句柄。如果该点在父窗口之外或函数失败,则返回值为NULL。
      

  4.   

    Handle正确就能操作,一般Disable的按钮,用WindowFromPoint是取不到句柄的
      

  5.   

      GetCursorPos(pMouse);
      hWindow       :=  WindowFromPoint(pMouse);
      Windows.ScreenToClient(hWindow, pMouse);
      hClientWindow :=  ChildWindowFromPoint(hWindow, pMouse);
      if hClientWindow  <> 0 then hWindow :=  hClientWindow;