Что нового

Считывание координат курсора мыши

Сообщения
75
Репутация
-2
Для считывания координат я использую MouseGetPos, но когда я передвигаю мышь очень быстро, успевают считываться не все координаты, некоторые пропускаются. Каким образов можно получить координаты более быстрее. Мне посоветовали разбираться с DirectX или Direct3d. В autoit возможно это реализовать?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Стандартная частота опроса USB-порта составляет 125 Герц. Следовательно, как бы быстро вы не перемещали мышь, максимум, что вы получите, это 125 изменений координат за секунду. Другими словами, на сколько вы переместите курсор за 8 миллисекунд, такие координаты и запишутся.
 
Автор
W
Сообщения
75
Репутация
-2
InnI сказал(а):
Стандартная частота опроса USB-порта составляет 125 Герц. Следовательно, как бы быстро вы не перемещали мышь, максимум, что вы получите, это 125 изменений координат за секунду. Другими словами, на сколько вы переместите курсор за 8 миллисекунд, такие координаты и запишутся.
В том то и дело, когда я передвигаю мышь очень быстро, некоторые координаты на успевают записаться, может потому MouseGetPos работает не так быстро, чтобы успеть все считывать?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
wasd
некоторые координаты на успевают записаться
Если вы пишете в файл, да ещё и каждый раз открывая/закрывая этот файл, то, может, и не успевают.

может потому MouseGetPos работает не так быстро
Вот скрипт для проверки. Запустите, настройтесь :smile:, и начинайте быстро двигать мышь в течение секунды. Через секунду в консоли смотрите результаты
Код:
Global $pos = MouseGetPos()
Global $p0 = $pos[0], $p1 = $pos[1]
Global $i = 0, $j = 0

Do
  $pos = MouseGetPos()
  If $pos[0] <> $p0 Or $pos[1] <> $p1 Then
    AdlibRegister("stop", 1000)
    ExitLoop
  EndIf
Until 0

Do
  $i += 1
  $pos = MouseGetPos()
  If $pos[0] <> $p0 Or $pos[1] <> $p1 Then
    $p0 = $pos[0]
    $p1 = $pos[1]
    $j += 1
  EndIf
Until 0

Func stop()
  ConsoleWrite("Количество вызовов функции MouseGetPos : " & $i & @CRLF)
  ConsoleWrite("Количество изменений координат : " & $j & @CRLF)
  Exit
EndFunc
 
Автор
W
Сообщения
75
Репутация
-2
Если вы пишете в файл, да ещё и каждый раз открывая/закрывая этот файл, то, может, и не успевают.


Нет, координаты записываются в массив, а после записи я уже сохраняю. А вообще я проверяю в paint. Рисую кривые линии, а потом включаю воспроизведение записанных координат


Добавлено:
Сообщение автоматически объединено:

InnI сказал(а):
wasd
некоторые координаты на успевают записаться
Если вы пишете в файл, да ещё и каждый раз открывая/закрывая этот файл, то, может, и не успевают.

может потому MouseGetPos работает не так быстро
Вот скрипт для проверки. Запустите, настройтесь :smile:, и начинайте быстро двигать мышь в течение секунды. Через секунду в консоли смотрите результаты
Код:
Global $pos = MouseGetPos()
Global $p0 = $pos[0], $p1 = $pos[1]
Global $i = 0, $j = 0

Do
  $pos = MouseGetPos()
  If $pos[0] <> $p0 Or $pos[1] <> $p1 Then
    AdlibRegister("stop", 1000)
    ExitLoop
  EndIf
Until 0

Do
  $i += 1
  $pos = MouseGetPos()
  If $pos[0] <> $p0 Or $pos[1] <> $p1 Then
    $p0 = $pos[0]
    $p1 = $pos[1]
    $j += 1
  EndIf
Until 0

Func stop()
  ConsoleWrite("Количество вызовов функции MouseGetPos : " & $i & @CRLF)
  ConsoleWrite("Количество изменений координат : " & $j & @CRLF)
  Exit
EndFunc

65979 я мышь немного передвинул, и это количество изменений координат?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
В консоль выводятся две строки
Код:
Количество вызовов функции MouseGetPos : 471518
Количество изменений координат : 127
Какая фраза вам не понятна?
 
Автор
W
Сообщения
75
Репутация
-2
InnI сказал(а):
В консоль выводятся две строки
Код:
Количество вызовов функции MouseGetPos : 471518
Количество изменений координат : 127
Какая фраза вам не понятна?
В консоль выводятся две строки
Код:
Количество вызовов функции MouseGetPos : 471518 почему так много


Добавлено:
Сообщение автоматически объединено:

InnI сказал(а):
В консоль выводятся две строки
Код:
Количество вызовов функции MouseGetPos : 471518
Количество изменений координат : 127
Какая фраза вам не понятна?

Все теперь понял, читал не внимательно(( И код не читал.... За секунду получается, что функция вызывается 100к раз, это много... И все дело тут в порте USB? так?
 
Верх