Use getparent ,if parrent is null,
the handle is Window's handle,not child 

解决方案 »

  1.   

    第一步:得到鼠标所在坐标
    声明:
        Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
    Private Type POINTAPI
            x As Long
            y As Long
    End Type程序:   
       Dim Cur As POINTAPI
       GetCursorPos Cur
    第二步:获得该坐标的窗体hwnd
    声明:
       Private Declare Function WindowFromPoint Lib "user32" (ByVal x As Long, yVal y As Long) As Long
    程序:
      dim hwnd1 as long
      hwnd1=WindowFromPoint(Cur.x, Cur.y)
      

  2.   

    jiangtao 老兄
    如果所指的控件的所属不是窗体,而是其他的容器,比如picturebox
    那麽getparent得到的是窗体的还是容器的?
    指向菜单了,又会如何?
    能否详细一些?
    中文可以吗?
      

  3.   

    VB下的全局对象集Forms包括你的程序所打开的所有窗体(包括MDI),遍历一遍Forms看看你得到的
    hwnd是否是其中某一个Form的hwnd,有就是窗体,否则不是
      

  4.   

    各位可能误会了,
    我所说的不是仅限于一个程序,
    而是所有在桌面上的窗口。
    olo,请问"听听"是什麽意思?
    你会听?
      

  5.   

    对不起,是我误会了
    i am sorry !
      

  6.   

    这问题有意思,若是VC,一定很好解决,用VB,可能会用到SendMessage这个API函数,因为你的问题涉及到消息传送,具体......我还没找到这方面的资料
      

  7.   

    huijp is right
    windowfrompoint得到的是任何有hwnd的control的hwnd.
    比如你把mouse移到一个textbox上,就得到这个textbox的hwnd.
    普通菜单应该不可以吧,如果是98,得到会是一个toolbar window的hwnd
      

  8.   

    bjseaman,我猜测你的意思,除非Hook鼠标移动消息,再调用WindowFromPoint就差不多行了。但说起容易做起难,在戴妃或VC中比较容易,在VB中嘛,太难。当然也可以,具体可参照SetWindowHookEx API和AddressOf操作符号。
      

  9.   

    bjseaman,我猜测你的意思,除非Hook鼠标移动消息,再调用WindowFromPoint就差不多行了。但说起容易做起难,在戴妃或VC中比较容易,在VB中嘛,太难。当然也可以,具体可参照SetWindowHookEx API和AddressOf操作符号。
      

  10.   

    huijp的方法我试过,如果移动到control是会得到control的hwnd
    而我想知道的是窗体的hwnd,也就是说所指control的所属窗体的hwnd.hook的方法太麻烦,而且判断mouse移动用不着hook,用do loop就能完成希望有人能给我满意的答复。
    感谢各位给小弟帮助!
      

  11.   

    在Windows中窗体的定义很广。
    控件也是窗体。
    窗体不也是控件吗?
      

  12.   

    huijp
    我需要得到窗体的hwnd,然后对该窗体操作
    对控件不管用的
      

  13.   

    你去看一下那些查看密码程序的源代码,好象是有用WindowFromPoint然后再判断所获得的hwnd所指窗体的类别。
      

  14.   

    调用“User32”中的GetCapture(),具体声明如下:
    Declare Function GetCapture Lib "user32" Alias "GetCapture" () As Long
    就可以获得一个窗口的句柄,且鼠标可以接收它。
      

  15.   

    To bjseaman:
    当鼠标在自己创建的窗口移动时,用do loop就能完成并最终得到窗口句柄(如果是控件,就调用GetParent API,直到其返回值为窗口句柄;
    但是,如果鼠标移出窗体,He he,用do loop你再试试?恐怕不行。
    所以,还是Hook鼠标移动消息吧。
      

  16.   

    To Lin:
    可以的,你看看这个。
    Dim TimeToEnd As Boolean
    Private Sub MouseMove()
      Do
        GetCursorPos MousePoint
        frmMain.Caption = "X:" & MousePoint.x & " Y:" & MousePoint.y
        DoEvents
      Loop Until GetPosEnd
    End Sub
    Private Sub Form_Load()
        frmMain.Show
        MouseMove
    End Sub
    Private Sub Form_Unload(Cancel As Integer)
        GetPosEnd = True
    End Sub
      

  17.   

    Declare Function GetParent Lib "user32" Alias "GetParent" (ByVal hwnd As Long) As Long有windowfrompoint获得句柄后
    用GetParent后会返回它的父窗口的句柄
    若没有则返回0