Test Foro de elhacker.net SMF 2.1

Programación => .NET (C#, VB.NET, ASP) => Programación General => Programación Visual Basic => Mensaje iniciado por: h0oke en 29 Junio 2009, 03:41 AM

Título: Duda GetCursorPos
Publicado por: h0oke en 29 Junio 2009, 03:41 AM
Hola... Estoy en un proyecto donde utilizo la función mencionada, con el fin de mostrar en una etiqueta la posición exacta del mouse a medida que se va moviendo. El problema es que lo utilizo de la siguiente manera:

Código (vb) [Seleccionar]
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
   GetCursorPos pt
   Label3.Caption = "X:" & Str$(pt.x) & " Y:" + Str$(pt.y)
End Sub


Ciertas veces, es medio "lenta" la letura y cuando muevo el mouse tarda un segundo y medio en refrescar. Será mejor colocar un timer?
Título: Re: Duda GetCursorPos
Publicado por: h0oke en 29 Junio 2009, 03:52 AM
Para no abrir otro thread... Utilizo este procedimiento para obtener una posicion guardada en un textfile para luego ubicar mi mouse en esa posición, pero resulta que la posición obtenida por mi getcursorpos la obtiene del formulario y no de la pantalla, ya que el setcursorpos difiere uno 10x X 10y  :-\

Código (vb) [Seleccionar]
Private Sub Command1_Click()
Open "C:\posicion.txt" For Input As #1
Dim s_linea As String, s_file As String
Do Until EOF(1)
Line Input #1, s_linea
s_file = s_file + s_linea + vbCrLf
Loop
Close #1
f_posx = Mid(s_file, 4, 3)
f_posy = Mid(s_file, 11, 3)
i_posx = Val(f_posx)
i_posy = Val(f_posy)
Dim RT_val As Long
RT_val = SetCursorPos(i_posy, i_posx)
End Sub
Título: Re: Duda GetCursorPos
Publicado por: BlackZeroX en 29 Junio 2009, 03:53 AM
Cita de: 嘇FSend嘇 en 29 Junio 2009, 03:41 AM
Hola... Estoy en un proyecto donde utilizo la función mencionada, con el fin de mostrar en una etiqueta la posición exacta del mouse a medida que se va moviendo. El problema es que lo utilizo de la siguiente manera:

Código (vb) [Seleccionar]
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
   GetCursorPos pt
   Label3.Caption = "X:" & Str$(pt.x) & " Y:" + Str$(pt.y)
End Sub


Ciertas veces, es medio "lenta" la letura y cuando muevo el mouse tarda un segundo y medio en refrescar. Será mejor colocar un timer?

Tu codigo se corre SOLO CUANDO SE PASA el Mouse sobre el FORM DIRECTAMENTE No aplica sobre controles.¡!, asi que no se ve la real utilidad del codigo si es que puedes usar las variables de X y Y de tal evento en lugar de la API,

Si lo que quieres es que en todo momento muestre la pos X y Y ponlo en un Timer de lo contrario solo seria el Switch en cada X evento (en este caso el MouseMove del Form).
Título: Re: Duda GetCursorPos
Publicado por: h0oke en 29 Junio 2009, 03:55 AM
Muchas gracias BlackZeroX... Eso explica tal vez mi otra duda
Citarpero resulta que la posición obtenida por mi getcursorpos la obtiene del formulario y no de la pantalla
Ahora lo pruebo.
Título: Re: Duda GetCursorPos
Publicado por: BlackZeroX en 29 Junio 2009, 03:57 AM
Cita de: 嘇FSend嘇 en 29 Junio 2009, 03:55 AM
Muchas gracias BlackZeroX... Eso explica tal vez mi otra duda
Citarpero resulta que la posición obtenida por mi getcursorpos la obtiene del formulario y no de la pantalla
Ahora lo pruebo.

GEtCursorPos (APi obtiene de la pantalla completa segun tu resoluciona ctual

los valores X y Y solo del Formualrio tomando en cuenta SOLO el tamaño del mismo)
Título: Re: Duda GetCursorPos
Publicado por: h0oke en 29 Junio 2009, 03:58 AM
Exactamente

Código (vb) [Seleccionar]
Private Sub Timer3_Timer()
   Dim x As Single
   Dim y As Single
   GetCursorPos pt
   Label3.Caption = "X:" & Str$(pt.x) & " Y:" + Str$(pt.y)
End Sub


Y ahora mi setcursorpos funciona para toda la pantalla y de manera correcta... La verdad no se si existirá una manera de sustituir mi timer con otra api...

Gracias  BlackZeroX
Título: Re: Duda GetCursorPos
Publicado por: el_c0c0 en 29 Junio 2009, 05:20 AM
Cita de: 嘇FSend嘇 en 29 Junio 2009, 03:58 AM
Exactamente

Código (vb) [Seleccionar]
Private Sub Timer3_Timer()
    Dim x As Single
    Dim y As Single
    GetCursorPos pt
    Label3.Caption = "X:" & Str$(pt.x) & " Y:" + Str$(pt.y)
End Sub


Y ahora mi setcursorpos funciona para toda la pantalla y de manera correcta... La verdad no se si existirá una manera de sustituir mi timer con otra api...

Gracias  BlackZeroX

SetTimer, KillTimer

Cobein hizo un modulo de clase para reemplazar al timer comun, usando las apis y subclass.
Pero con las apis solas va a funcionar igual!

saludos
Título: Re: Duda GetCursorPos
Publicado por: cobein en 29 Junio 2009, 08:14 AM
Podes usar un hook global (WH_MOUSE_LL) para obtener las coordenadas permanentemente y para posicionar la etiqueta correctamente podes usar ScreenToClient.
Título: Re: Duda GetCursorPos
Publicado por: h0oke en 29 Junio 2009, 20:55 PM
Citarhook global (WH_MOUSE_LL)
Exactamente cobein a eso me refería gracias. Ya estaré comentando.