Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2016, 13:40   #1
Larboss
Недо
Участник клуба
 
Регистрация: 11.08.2011
Сообщений: 1,394
По умолчанию Самая быстрая эмуляция нажатий клавиш

Доброго дня.

Имеется мышь с поддержкой макросов. На ней написал макрос, который выполняет клик (нажимает ЛКМ и отпускает ЛКМ). Кликается до тех пор, пока я не отпущу клавишу мыши, к которой этот макрос привязан.

Я попробовал написать эмуляцию ЛКМ на Delphi, но скорость(кол-во кликов в секунду) получилась меньшей, чем при использовании мышки. Использовал грубый способ: SendInput + Timer с интервалом 1 мс.

Так вот, возник вопрос: а вообще можно эмулировать клики программно с одинаковой/быстрой скоростью, чем это делает аппаратно мышь? Нужна более грамотная реализация с SendInput?
С помощью программирования можно разбогатеть и изменить мир к лучшему (с) Бьерн Страуструп
Larboss вне форума Ответить с цитированием
Старый 22.04.2016, 14:13   #2
tsar_
Форумчанин
 
Аватар для tsar_
 
Регистрация: 06.01.2011
Сообщений: 369
По умолчанию

Цитата:
Использовал грубый способ: SendInput + Timer с интервалом 1 мс.
Это в смысле VCL-таймер? И шо он таки позволяет отмерить 1мс?
Программирую по необходимости
tsar_ вне форума Ответить с цитированием
Старый 22.04.2016, 14:27   #3
Larboss
Недо
Участник клуба
 
Регистрация: 11.08.2011
Сообщений: 1,394
По умолчанию

Цитата:
Сообщение от tsar_ Посмотреть сообщение
Это в смысле VCL-таймер? И шо он таки позволяет отмерить 1мс?
Да, VCL. Конечно, позволяет, почему бы и нет?
С помощью программирования можно разбогатеть и изменить мир к лучшему (с) Бьерн Страуструп
Larboss вне форума Ответить с цитированием
Старый 22.04.2016, 14:58   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

таймер имеет точность чуть выше нуля. Он нормально работает только если в системе ничего не происходит. Чуть какой задачей комп загрузил - там уже погрешность на секунды может идти. Лучше уж зациклить и в цикле проверять сколько времени прошло с предыдущего клика и если 1мс или больше, то кликать.
pu4koff вне форума Ответить с цитированием
Старый 22.04.2016, 15:48   #5
tsar_
Форумчанин
 
Аватар для tsar_
 
Регистрация: 06.01.2011
Сообщений: 369
По умолчанию

Я бы еще попробовал бы вынести все это подальше от VCL в отдельный поток.
Программирую по необходимости
tsar_ вне форума Ответить с цитированием
Старый 22.04.2016, 23:27   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Так вот, возник вопрос: а вообще можно эмулировать клики программно с одинаковой/быстрой скоростью, чем это делает аппаратно мышь? Нужна более грамотная реализация с SendInput?
Нет, не можете. У мыши своя атмосфера в виде микросхемы, где исполнятся компилированный код скрипта макроса для мыши, прямо на железе мыши, без посредников. Потому и работает быстро.

В случае с ОС тут целая цепочка посредников от курсора до железа, которые и генерят эту самую задержку, докучи ещё сама ОС доставляет задержкой во времени в пару МС (это не ОС реального времени же )

Последний раз редактировалось Человек_Борща; 22.04.2016 в 23:29.
Человек_Борща вне форума Ответить с цитированием
Старый 23.04.2016, 00:54   #7
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

А я не понял, зачем вообще нужен интервал в 1мс?
Что мешает вызывать SendInput вообще без задержек?
waleri вне форума Ответить с цитированием
Старый 29.04.2016, 08:59   #8
Larboss
Недо
Участник клуба
 
Регистрация: 11.08.2011
Сообщений: 1,394
По умолчанию

Человек_Борща, в целом так и мыслил.

waleri, да интервал есть в таймере, так-то он, конечно, не нужен при использовании бесконечного цикла.
С помощью программирования можно разбогатеть и изменить мир к лучшему (с) Бьерн Страуструп
Larboss вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Эмуляция нажатий мыши AnshaDobro Общие вопросы Delphi 1 20.02.2016 22:41
эмуляция нажатий клавиш Host-2013 Общие вопросы Delphi 2 10.03.2013 00:52
Эмуляция нажатий клавиш в играх Boris-Britva Общие вопросы Delphi 6 24.06.2011 15:20
Самая быстрая сортировка динамической структуры данных Mixim Общие вопросы .NET 1 28.11.2010 10:02
Эмуляция нажатий клавиш BorisBritva Общие вопросы Delphi 1 01.11.2010 13:09