Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Имитация мышиных и клавиатурных действий из лога  (Прочитано 7676 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
smalltim
Гость
« : 23-06-2008 23:00 » 

Доброго времени суток, гуру!

Получил со стороны такую вот задачу: нужно заставить приложения считать, что юзер двигает мышью и жмет клавиши в нужное время и в нужном месте.
Подробнее: имея все необходимые права в системе, я хочу иметь возможность запустить свое приложение, которое читает файл с заранее скомпонованными мышино-клавиатурными действиями и симулирует для системы весь этот инпут.

Сейчас для этого используется AutoIt! (http://www.autoitscript.com/autoit3/), который, насколько я понимаю, для симуляции нажатия клавиш и движения мыши работает не более чем на уровне вмешательства в обработчики сообщений. Это работает не всегда, не везде, и не всегда так, как хочется.

Имеет ли сысл попробовать написать свои fake-драйвера клавиатуры и мыши, которые не делают ничего, кроме генерации нужного мне мышино-клавиатурного инпута в нужное мне время?
Возможно ли это для человека, в принципе, знакомого с Си Ага?
Сейчас на борту у меня WinXP SP3 и VS2003. Требуется поддержка как минимум WinXP SP3 и WinVista SP1, желательно, плюс 64-битные версии.

В какую сторону начинать копать, что скачивать к VS2003, что читать? Заранее огромное спасибо, гуру!
Записан
zubr
Гость
« Ответ #1 : 24-06-2008 03:48 » 

Хмм... Функция SendInput решит твои проблемы - драйвер здесь ни к чему.
Записан
Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 24-06-2008 08:03 » 

smalltim, если вы уверены что вам необходим именно драйвер, и другим путем решить вашу проблемму нельзя:
закупаете книг, качаете DDK, ставите отладчик ядра. (хотя можно и без него попробовать)
далее читаете книги, смотрите примеры DDK, разбираетесь. за пару месяцев оно у вас оживет)
а лучше - поищите в нете - я думаю таких приложений - вагон и маленькая тележка. в том числе - с драйверами, и прочим и прочим.
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
smalltim
Гость
« Ответ #3 : 25-06-2008 00:00 » new

Сделал всё через SendInput, пока работает, и в Vista, и в VP.
Только заметил одну вещь: если отсылать подряд несколько одинаковых клавиатурных событий типа unicode char с обинаковым чаром, то приложениям приходит только одно событие. С отсылкой сканкодов клавиш, кодов виртуальных клавиш, и с мышиными событиями такого не происходит.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 25-06-2008 03:40 » 

для событий WM_CHAR в lParam имеется счётчик повторов
Цитата
lParam
Specifies the repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag, as shown in the following table.
0-15
Specifies the repeat count for the current message. The value is the number of times the keystroke is autorepeated as a result of the user holding down the key. If the keystroke is held long enough, multiple messages are sent. However, the repeat count is not cumulative.
16-23
Specifies the scan code. The value depends on the OEM.
24
Specifies whether the key is an extended key, such as the right-hand ALT and CTRL keys that appear on an enhanced 101- or 102-key keyboard. The value is 1 if it is an extended key; otherwise, it is 0.
25-28
Reserved; do not use.
29
Specifies the context code. The value is 1 if the ALT key is held down while the key is pressed; otherwise, the value is 0.
30
Specifies the previous key state. The value is 1 if the key is down before the message is sent, or it is 0 if the key is up.
31
Specifies the transition state. The value is 1 if the key is being released, or it is 0 if the key is being pressed.

Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines