第一步:得到鼠标所在坐标 声明: 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)
调用“User32”中的GetCapture(),具体声明如下: Declare Function GetCapture Lib "user32" Alias "GetCapture" () As Long 就可以获得一个窗口的句柄,且鼠标可以接收它。
To bjseaman: 当鼠标在自己创建的窗口移动时,用do loop就能完成并最终得到窗口句柄(如果是控件,就调用GetParent API,直到其返回值为窗口句柄; 但是,如果鼠标移出窗体,He he,用do loop你再试试?恐怕不行。 所以,还是Hook鼠标移动消息吧。
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
Declare Function GetParent Lib "user32" Alias "GetParent" (ByVal hwnd As Long) As Long有windowfrompoint获得句柄后 用GetParent后会返回它的父窗口的句柄 若没有则返回0
声明:
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)
如果所指的控件的所属不是窗体,而是其他的容器,比如picturebox
那麽getparent得到的是窗体的还是容器的?
指向菜单了,又会如何?
能否详细一些?
中文可以吗?
hwnd是否是其中某一个Form的hwnd,有就是窗体,否则不是
我所说的不是仅限于一个程序,
而是所有在桌面上的窗口。
olo,请问"听听"是什麽意思?
你会听?
i am sorry !
windowfrompoint得到的是任何有hwnd的control的hwnd.
比如你把mouse移到一个textbox上,就得到这个textbox的hwnd.
普通菜单应该不可以吧,如果是98,得到会是一个toolbar window的hwnd
而我想知道的是窗体的hwnd,也就是说所指control的所属窗体的hwnd.hook的方法太麻烦,而且判断mouse移动用不着hook,用do loop就能完成希望有人能给我满意的答复。
感谢各位给小弟帮助!
控件也是窗体。
窗体不也是控件吗?
我需要得到窗体的hwnd,然后对该窗体操作
对控件不管用的
Declare Function GetCapture Lib "user32" Alias "GetCapture" () As Long
就可以获得一个窗口的句柄,且鼠标可以接收它。
当鼠标在自己创建的窗口移动时,用do loop就能完成并最终得到窗口句柄(如果是控件,就调用GetParent API,直到其返回值为窗口句柄;
但是,如果鼠标移出窗体,He he,用do loop你再试试?恐怕不行。
所以,还是Hook鼠标移动消息吧。
可以的,你看看这个。
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
用GetParent后会返回它的父窗口的句柄
若没有则返回0