Conseguí una nueva unidad e instalé ventanas nuevas.

Antes, en el sistema operativo antiguo, podía usar "Sleep" para hacer que "MoveMouseRelative" funcionara como si fuera un movimiento natural.

He creado una función en la que puedo mover el mouse llamándolo con cuántas veces quiero que se "mueva"

Y con los milisegundos entre cada "movimiento" Ejemplo: (funciona bien)

function _move(x, range, time, range2)
    for i = 1, x do
    MoveMouseRelative(range,range2)
    Sleep(time)
    end
end 

Norte

Si configuro "Dormir (1)" entre cada "MoveMouseRelative" se mueve como si tuviera como "Dormir (50)", no podría entender por qué.

Si lo llamo con 50 movimientos de 1 ms, tarda 2,5 segundos en terminar en lugar de 50 ms

En mi unidad anterior con la instalación del sistema operativo anterior (la misma PC), puedo usarla normalmente toma 50 ms

Es como si el software no me dejara usar ms pequeños como 1 ms.

Intentó

Reinstalar LGHUB

Desactivando AV

Deshabilitar cosas en Windows,

Copiando la carpeta LGHUB del sistema operativo que está funcionando bien

Copiando la carpeta LGHUB con las configuraciones (LocalAppdata)

Mi mouse es el G502 SE

¿Ayuda?

0
Salles 28 oct. 2020 a las 02:22

1 respuesta

La mejor respuesta

TL; DR:
El comportamiento de Sleep(1) es inestable y no debe usarse.
Sleep() tiene una precisión mucho peor de la que crees.


Respuesta larga:

Sleep() en el script LGHUB invoca internamente la función WinAPI Sleep.

Un extracto de la documentación:

Una vez transcurrido el intervalo de suspensión, el subproceso está listo para ejecutarse. Tenga en cuenta que no se garantiza que un hilo listo se ejecute inmediatamente. En consecuencia, es posible que el subproceso no se ejecute hasta algún tiempo después de que transcurra el intervalo de suspensión.

El reloj del sistema "marca" a una velocidad constante. Si dwMilliseconds es menor que la resolución del reloj del sistema, el subproceso puede dormir por menos tiempo que el especificado. Si dwMilliseconds es mayor que un tic pero menos de dos, la espera puede ser entre uno y dos tics, y así sucesivamente.

El "tic" aquí es la longitud del "intervalo de tiempo", que es de 15 ms en mi Windows (pero podría ser de 10 ms en otras versiones de Windows).

Como puede ver en la documentación anterior, la función Sleep() tiene una precisión de un "tic", por lo que el comportamiento de Sleep(1) es inestable por diseño.

0
Egor Skriptunoff 28 oct. 2020 a las 19:36