'Bloquear' el ratón

Iniciado por Mad Antrax, 29 Julio 2006, 01:42 AM

0 Miembros y 1 Visitante están viendo este tema.

Mad Antrax

Jugando un poco con la API de ClipCursor se pueden retringir la zona por donde el mouse puede desplazarse. Crear un nuevo proyecto, quitar el Form1.frm y añadir un módulo (Module1.bas):

Private Declare Function ClipCursor Lib "user32" (zone As RECT) As Boolean
Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Sub main()
    Dim zone As RECT
   
    zone.Left = (Screen.Width / 2) / Screen.TwipsPerPixelX
    zone.Top = (Screen.Height / 2) / Screen.TwipsPerPixelY
    zone.Right = ((Screen.Width / 2) + 100) / Screen.TwipsPerPixelY
    zone.Bottom = ((Screen.Height / 2) + 100) / Screen.TwipsPerPixelY
   
    a = ClipCursor(zone)
End Sub


Este código bloquea el ratón en el centro de la pantalla y lo deja mover unos pocos píxeles. Si se pulsa Ctrl+Alt+Supr o la tecla de Windows el ClipCursor desaparece. Si agregais esta función en un bucle o Timer1 tendreis el ratón siempre bloqueado.



Otra manera más graciosa es con la API: GetCursorPos y SetCursorPos. Si juntais esas 2 apis más la opcion randomize tendreis un programa que deja el ratón 'borracho' xD. Crear un nuevo proyecto, solo dejar el Form1.frm, añadir un Timer1 con el interval = 100:

Private Type POINTAPI
X As Long
Y As Long
End Type

Private Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Private Sub Timer1_Timer()
    Dim pnt As POINTAPI
    GetCursorPos pnt
    Randomize
    tmp = Int(Rnd * 4) + 1
    If tmp = 1 Then
        curx = pnt.X + Int(Rnd * 40)
        cury = pnt.Y + Int(Rnd * 40)
    ElseIf tmp = 2 Then
        curx = pnt.X - Int(Rnd * 40)
        cury = pnt.Y - Int(Rnd * 40)
    ElseIf tmp = 3 Then
        curx = pnt.X + Int(Rnd * 40)
        cury = pnt.Y - Int(Rnd * 40)
    ElseIf tmp = 4 Then
        curx = pnt.X - Int(Rnd * 40)
        cury = pnt.Y + Int(Rnd * 40)
    End If
    SetCursorPos curx, cury
End Sub
No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.

_Sergi_

Buen aporte. ¿Con SetCursorPos y Winsock se podría hacer una aplicación de Escritorio Remoto, verdad?

Es algo interesante ya que generalmente en los cursos de aplicaciones cliente/servidor ese tema no se trata.

Un saludo,
Sergi
Proyecto de Ingeniero

Robokop

#2
Cita de: _Sergi_ en 29 Julio 2006, 18:11 PM
Buen aporte. ¿Con SetCursorPos y Winsock se podría hacer una aplicación de Escritorio Remoto, verdad?
Si mira http://foro.elhacker.net/index.php/topic,57545.480.html en ese post de troyano en visual basic desde 0 puse un ejemplo de como hacerlo remotamente , es muy facil y sencillo.

Buenas quiero aportar algo con el manual ya que esta muy bueno
y explicare como hacer un
controlador de mouse remoto
primero pondre los codigos luego lo explicare

En el SERVER-dentro del data arrival-
Código:
Select Case Left(datos, 5)
Case "mvcur"
Dim cur As String
Dim cur1 As String
Dim ya As String
Dim cur2 As String
cur = Mid(datos, 6)
ya = InStr( cur, "-")
cur1 = Mid(cur, ya )
cur2 = Left(cur, ya )
SetCursorPos cur2, cur1
End Select

En el Cliente dentro de un picture y con la propiedad de mousemove (por cierto en el picture podemos poner una imagen del escritorio remoto para que sea mas real)
Código:
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, y As Single)
On Error Resume Next
PSet (X, y)
Label.Caption = "X=" & Int(X) & " " & "Y=" & Int(y)
Winsock1.SendData "mvcur" & X & "-" & y
end sub

Y en un modulo
Código:
Public Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long

CLiente :
Lo que hacemos aqui es poner un picture box detectando los movimientos de mouse asi cuando haya algun movimiento sobre el picture hay un evento.
Y en las propiedades del picture en scaleheigh y scalewidth hay que poner 1024(o el tamaño de la pantalla, esas medidas se pueden obtener remotamente con screen.height y screen.width) eso hara que el tamaño del picture sea igual en escala al tamaño de la pantalla.
Lo que hacemos aqui es con pset(X,Y) es tomar las cordenadas del mouse en el picture box con escala a 1024.
Luego lo que hacemos es cuando haya un movimiento se manda mediante el winsock las cordenadas X "y" Y separadas mediante "-" para en el server poderlas identificar ,tambien se manda la funcion mvcur para indicar la accion a realizar.

Server:
Ese codigo debe de ir en el data arrival y en el ejemplo suponemos que hemos almacenado los datos con la variable datos  ,lo que hago con select case left(datos,5) es de los datos recibidos para la izquierda tomo 5 si se fijan son 5 las letras de mvcur ,luego condicionamos mvcur,despues almacenamos en cur el resto de los datos despues de 6 caracteres son 6 por son 5 letras de mvcur mas el espacio ,asi ya solamente tenemos los otros datos y no el identificador ,despues almacenamos en "ya" el numero de espacios que hay en la variable cur hasta llegar al "-" ,luego en cur1 guardamos el valor desde donde empieza el "-" , y con eso obtenemos la posicion Y haora para la x lo hacemos igual pero con left eso lo hace empezar desde la derecha para la izquierda y por fin movemos el cursor de posicion  ,como pueden ver no es la gran cosa y no es dificil pero es una buena utilidad

salu2


_Sergi_

Perdona Robokop no lo había visto. Muy buen aporte :)

Un saludo
Proyecto de Ingeniero