Foro de elhacker.net

Programación => 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
  1. Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
  2.    GetCursorPos pt
  3.    Label3.Caption = "X:" & Str$(pt.x) & " Y:" + Str$(pt.y)
  4. 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
  1. Private Sub Command1_Click()
  2. Open "C:\posicion.txt" For Input As #1
  3. Dim s_linea As String, s_file As String
  4. Do Until EOF(1)
  5. Line Input #1, s_linea
  6. s_file = s_file + s_linea + vbCrLf
  7. Loop
  8. Close #1
  9. f_posx = Mid(s_file, 4, 3)
  10. f_posy = Mid(s_file, 11, 3)
  11. i_posx = Val(f_posx)
  12. i_posy = Val(f_posy)
  13. Dim RT_val As Long
  14. RT_val = SetCursorPos(i_posy, i_posx)
  15. End Sub


Título: Re: Duda GetCursorPos
Publicado por: BlackZeroX en 29 Junio 2009, 03:53 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
  1. Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
  2.    GetCursorPos pt
  3.    Label3.Caption = "X:" & Str$(pt.x) & " Y:" + Str$(pt.y)
  4. 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
Citar
pero 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
Muchas gracias BlackZeroX... Eso explica tal vez mi otra duda
Citar
pero 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
  1. Private Sub Timer3_Timer()
  2.    Dim x As Single
  3.    Dim y As Single
  4.    GetCursorPos pt
  5.    Label3.Caption = "X:" & Str$(pt.x) & " Y:" + Str$(pt.y)
  6. 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
Exactamente

Código
  1. Private Sub Timer3_Timer()
  2.    Dim x As Single
  3.    Dim y As Single
  4.    GetCursorPos pt
  5.    Label3.Caption = "X:" & Str$(pt.x) & " Y:" + Str$(pt.y)
  6. 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
Citar
hook global (WH_MOUSE_LL)
Exactamente cobein a eso me refería gracias. Ya estaré comentando.