Mover cursor con visual basic

Iniciado por daviddavo, 4 Abril 2015, 03:23 AM

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

daviddavo

Hola, no tengo ni idea de Visual Basic, pero estoy haciendo un script. Y necesito hacer que el cursor se mueva 100 px hacia abajo (-100x) y 100 pixeles hacia la derecha (+100y)
¿Sabeis como podría hacer esto?

Gracias de antemano

iUDEX

Con:

Código (vbnet) [Seleccionar]
Windows.Forms.Cursor.Position = New Point(X, Y)

Saludines.
Namasté, criatura.

Eleкtro

#2
Estamos en la sección Scripting, ¿te refieres a VBS, VBA, VB, o VB.Net?, acláralo.

El código que te han mostrado es para VisualBasic.Net

En caso de referirte a VBS (VisualBasicScript) no es posible realizar esa tarea, para ello necesitarías llamar a la API de Windows y solo puedes hacerlo mediante librerías de terceros que añaden soporte adicional a VBS, una alternativa sería utilizar la aplicación RunDll32 desde VBS, pero solo funcionaría con funciones que tuviesen una firma específica, no es el caso de la función SetCursorPos.

Saludos








daviddavo

Cita de: Eleкtro en  4 Abril 2015, 15:50 PM
Estamos en la sección Scripting, ¿te refieres a VBS, VBA, VB, o VB.Net?, acláralo.

El código que te han mostrado es para VisualBasic.Net

En caso de referirte a VBS (VisualBasicScript) no es posible realizar esa tarea, para ello necesitarías llamar a la API de Windows y solo puedes hacerlo mediante librerías de terceros que añaden soporte adicional a VBS, una alternativa sería utilizar la aplicación RunDll32 desde VBS, pero solo funcionaría con funciones que tuviesen una firma específica, no es el caso de la función SetCursorPos.

Saludos

Me refiero a vbs, perdón por no haberlo aclarado

daviddavo

Cita de: bubble1 en  4 Abril 2015, 05:39 AM
Con:

Código (vbnet) [Seleccionar]
Windows.Forms.Cursor.Position = New Point(X, Y)

Saludines.

Ya, pero me refiero de forma relativa.
Que lo meuva 50 pixeles abajo y 50 pixeles hacia la derecha

iUDEX

#5
Bueno, ya te lo dijo Elektro.

CitarEn caso de referirte a VBS (VisualBasicScript) no es posible realizar esa tarea, para ello necesitarías llamar a la API de Windows y solo puedes hacerlo mediante librerías de terceros que añaden soporte adicional a VBS, una alternativa sería utilizar la aplicación RunDll32 desde VBS, pero solo funcionaría con funciones que tuviesen una firma específica, no es el caso de la función SetCursorPos.

Pero igual te dejo un código que usé hace años...

Código (vbnet) [Seleccionar]
RunDll32.SetCursorPos 50, 50

No veo una etiqueta para VBS, Lol.

La verdad que no me acuerdo mucho de esto, sólo experimenté con SetCursorPos un par de veces. Puede que me equivoque.
Edito. Para usar la función necesitas importar la DLL, no sé como será en VBS. En VB.NET sería:

Código (vbnet) [Seleccionar]
Dim RunDll32 = GetObject("C:\Windows\System32\user32.dll")

¡Saludines!
Namasté, criatura.

Eleкtro

#6
Buenas

Cómo ya expliqué, por mucho que pueda costar de "creer", VBS es un lenguaje simple e inutil, no hay modo alguno de importar una función de la WinAPI en VBS, no sin componentes COM de terceros que añadan soporte adicional para esa característica, cómo por ejemplo WSHDynaCall.

Cómo también expliqué, no se puede utilizar la función 'SetCursorPos' desde la aplicación RunDll32.exe, ya que dicha función tiene dos parámetros (x, y) que no concuerdan con la firma necesaria que debe tener una función compatible con la interfáz RunDll32:
INFO: Windows Rundll and Rundll32 Interface

Por ende, al intentar llamar la función 'SetCursorPos' desde RunDll32, los valores que se pasan a los parámetros (x, y) serán valores aleatorios, igual que sucede por ejemplo con la función 'SwapMouseButton' donde el valor que se le pasa siempre será positivo ...por mucho que le pases un "0" para revertir el cambio.

La solución más eficiente en estas circunstancias sería utilizar un lenguaje capacitado para dicha tarea,
una solución muy sencilla sería utilizando VB.Net/C# siguiendo el primer ejemplo mostrado por @bubble1 ya que ni siquiera necesitas importar la WinAPI para posicionar el mouse.


Saludos!