elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  WM_NCHITTEST
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: WM_NCHITTEST  (Leído 968 veces)
Hasseds

Desconectado Desconectado

Mensajes: 145



Ver Perfil
WM_NCHITTEST
« en: 16 Agosto 2011, 23:10 pm »

Hola, para el q le interese el Mensaje WM_NCHITTEST puede detectar en que lugar de una ventana o control está pasando el puntero del mouse o combinado con un hook al mouse tambien se puede saber donde se está haciendo un click (entre otras cosas)... Abarca el area-cliente, botones de cerrar, maximizar y minimizar, barra de titulo, icono de la barra, bordes derecho, izquierdo, angulos, bordes bixed, etc.

No se trata de un código optimizado, solo un simple concepto para el q no la conoce, saludos

Form

Código
  1.  
  2.  
  3. Option Explicit
  4.  
  5. Private Sub Form_Load()
  6. Call SetWindowPos(Me.hwnd, &HFFFF, &H0, &H0, &H0, &H0, &H2 Or &H1) 'on top (opcional)
  7. Call StartHook
  8. End Sub
  9. Private Sub Form_Unload(Cancel As Integer)
  10.  StopHook
  11. End Sub
  12.  
  13.  
  14.  



Module

Código
  1.  
  2.  
  3. Option Explicit
  4.  
  5. 'Modulo: NCHITTEST
  6. 'Autor   : Sergio Desanti (Hasseds)
  7. 'Test    : XP (32 BIT)
  8.  
  9.  
  10. Public Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
  11.  
  12. Private Declare Function SetWindowsHookEx Lib "user32.dll" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
  13. Private Declare Function UnhookWindowsHookEx Lib "user32.dll" (ByVal hHook As Long) As Long
  14. Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
  15. Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
  16. Private Type POINTAPI: x As Long: y As Long: End Type
  17. Private Const WM_NCHITTEST = &H84
  18.  
  19. Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal Msg As Long, wParam As Any, lParam As Any) As Long
  20. Private Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long
  21.  
  22. Dim hHook As Long
  23.  
  24. Function Make_lParam(ByVal x As Integer, ByVal y As Integer) As Long
  25.  Make_lParam = x Or (y * &H10000)
  26. End Function
  27.  
  28. Public Sub StartHook()
  29.     hHook = SetWindowsHookEx(&HE, AddressOf MouseProc, App.hInstance, &H0)
  30. End Sub
  31.  
  32. Public Sub StopHook()
  33.    Call UnhookWindowsHookEx(hHook)
  34.    hHook = 0
  35. End Sub
  36.  
  37. Private Function MouseProc(ByVal ncode As Long, ByVal wParam As Long, lParam As POINTAPI) As Long
  38.  
  39.  Dim hwndl As Long
  40.  hwndl = WindowFromPoint(lParam.x, lParam.y)
  41.  
  42.  Dim retNCHITTEST As Long
  43.  retNCHITTEST = SendMessage(hwndl, WM_NCHITTEST, &H0&, ByVal Make_lParam(lParam.x, lParam.y))
  44.  
  45.  
  46.  'If wParam = &H201 Then
  47.    If hwndl = Form1.hwnd Then
  48.      Select Case retNCHITTEST
  49.        Case 1:  Form1.Caption = "AREA CLIENTE"
  50.        Case 2:  Form1.Caption = "BARRA DE TITULO"
  51.        Case 3:  Form1.Caption = "ICONO LA BARRA DE TITULO"
  52.        Case 6:  Form1.Caption = "SCROLL HORIZONTAL"
  53.        Case 7:  Form1.Caption = "SCROLL VERTICAL"
  54.        Case 8:  Form1.Caption = "BOTON MINIMIZAR"
  55.        Case 9:  Form1.Caption = "BOTON MAXIMIZAR"
  56.        Case 10: Form1.Caption = "BORDE IZQUIERDO"
  57.        Case 11: Form1.Caption = "BORDE DERECHO"
  58.        Case 12: Form1.Caption = "BORDE SUPERIOR"
  59.        Case 13: Form1.Caption = "BORDE SUPERIOR IZQUIERDO"
  60.        Case 14: Form1.Caption = "BORDE SUPERIOR DERECHO"
  61.        Case 15: Form1.Caption = "BORDE INFERIOR"
  62.        Case 16: Form1.Caption = "BORDE INFERIOR IZQUIERDO"
  63.        Case 17: Form1.Caption = "BORDE INFERIOR DERECHO"
  64.        Case 18: Form1.Caption = "BORDE FIXED"
  65.        Case 20: Form1.Caption = "BOTON CERRAR"
  66.        Case 21: Form1.Caption = "BOTON AYUDA"
  67.        Case Else: Form1.Caption = retNCHITTEST
  68.      End Select
  69.    Else
  70.      Form1.Caption = "FUERA DE VENTANA"
  71.    End If
  72.  'End If
  73.  
  74.  '.......................................................................
  75.   Dim PT As POINTAPI
  76.   Call ClientToScreen(hwndl, PT)
  77.  
  78.   Form1.Cls
  79.   Form1.Print "Coordenada Screen X " & lParam.x
  80.   Form1.Print "Coordenada Screen Y " & lParam.y
  81.  
  82.   If hwndl = Form1.hwnd Then
  83.     Form1.Print
  84.     Form1.Print "Coordenada Control X " & lParam.x - PT.x
  85.     Form1.Print "Coordenada Control Y " & lParam.y - PT.y
  86.   End If
  87.  '.......................................................................
  88.  
  89.  MouseProc = CallNextHookEx(hHook, ncode, wParam, lParam)
  90.  
  91. End Function
  92.  
  93.  
  94.  









« Última modificación: 17 Agosto 2011, 19:57 pm por Hasseds » En línea

Sergio Desanti
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines