Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

О виртуальной мыши   Найти похожие ветки 

 
Сергей М. ©   (2010-04-14 13:39) [0]

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

При воспроизведении ранее записанной последовательности рассматривается вариант инжектирования эмулируемых событий с использованием интерфейса mouse_event().

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

Возникает довольно очевидная идея - на момент воспроизведения программно инсталлировать в систему некий дополнительный виртуальный мышиный дивайс и дать возможность "плейеру" управлять им программно, тем самым никак не затрагивая очереди ввода-вывода основного мышиного дивайса.

Подкиньте, пож., толковые идеи на эту тему ?

Изобретать велосипед с собственной разработкой этого слоя, полагаю, нет резона - наверняка существуют готовые фриварные реализации ..

А может все гораздо проще и я полез в дебри ?)


 
Игорь Шевченко ©   (2010-04-14 13:42) [1]


> А может все гораздо проще


WH_JOURNALHOOK/WH_JOURNALPLAYBACK ?


 
Сергей М. ©   (2010-04-14 13:46) [2]


> Игорь Шевченко ©   (14.04.10 13:42) [1]


И как журнальный плейбэк может помочь в вопросе о "невыхватывании мыши" из рук юзера ?

Ведь требуется не только инжектировать мышиный ввод, но и визуализировать положение курсора ..


 
Anatoly Podgoretsky ©   (2010-04-14 13:47) [3]


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

Не вправе, фокус ввода один на все мышки и функции.


 
brother ©   (2010-04-14 13:50) [4]

я так понимаю, это надо для того, чтобы юзверь не помешал действиям? Если да, то как вариант - отключить драйвер мыши на момент работы...


 
Сергей М. ©   (2010-04-14 13:55) [5]


> brother ©   (14.04.10 13:50) [4]


Это равносильно выхватыванию мыши из его рук ..


> Anatoly Podgoretsky ©   (14.04.10 13:47) [3]


> Не вправе


Почему не вправе ?
Юзер вправе как минимум подвести мышь к кнопуле "Stop playback" и клацнцть ее, не так ли ?
Варианты про хоткей как костыль пока не рассматриваю)


 
Сергей М. ©   (2010-04-14 13:58) [6]


> Anatoly Podgoretsky ©   (14.04.10 13:47) [3]


Ты разве никогда не тыкал вторую физическую мышь в комп ?
Катастрофы же нет - обе мыши чудесно уживаются, у каждой свой курсор и обе не мешают (с определенными ограничениями) друг другу жить своей мышиной жизнью ..
)


 
brother ©   (2010-04-14 13:58) [7]

> Это равносильно выхватыванию мыши из его рук ..

правильно, ибо если он кликнет или еще что, то твой "плеер" - "пролетает")


 
Anatoly Podgoretsky ©   (2010-04-14 14:00) [8]

> Сергей М.  (14.04.2010 13:55:05)  [5]

Вот это вправе, но подвести одной мышкой к одной кнопке и в тоже время другой мышкой к кнопке два не получится.


 
Сергей М. ©   (2010-04-14 14:00) [9]


> brother ©   (14.04.10 13:58) [7]


А это уже проблемы юзера: не елозь и не тыкай когда и куда не следует, пока идет плейбэк ..
Детали ограничений - в справке к программулине)


 
brother ©   (2010-04-14 14:01) [10]

> у каждой свой курсор и обе не мешают

О_О подрубил вотрую мышь ща... один курсор...


 
Anatoly Podgoretsky ©   (2010-04-14 14:01) [11]

> Сергей М.  (14.04.2010 13:58:06)  [6]

Ну не надо про свой курсор, как раз наоборот курсор общий.


 
brother ©   (2010-04-14 14:01) [12]

винда - однопользовательская система, так что, либо автоматика, либо юзветь...


 
Сергей М. ©   (2010-04-14 14:06) [13]


> Anatoly Podgoretsky ©   (14.04.10 14:01) [11]


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


 
brother ©   (2010-04-14 14:06) [14]

> что развести юзера и плейер по разным углам таким образом
> не удастся ?

[12]


 
brother ©   (2010-04-14 14:09) [15]

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


 
brother ©   (2010-04-14 14:10) [16]

> Изобретать велосипед с собственной разработкой этого слоя,
> полагаю, нет резона

похоже самое время ;)


 
Anatoly Podgoretsky ©   (2010-04-14 14:11) [17]

[3]
В виндоус одна логическая мышка, независимо от количества физических. Развести можно если написать свои драйвера и все необходимое для рисования и обработки от разных мышей, такое есть в некоторых играх.


 
Сергей М. ©   (2010-04-14 14:11) [18]


> brother ©   (14.04.10 14:09) [15]


> но это пиииии


Вот именно.
Так же как имитировать изображение отдельного курсора там где в дан.момент требует плейер ..


 
Сергей М. ©   (2010-04-14 14:13) [19]


> Anatoly Podgoretsky ©   (14.04.10 14:11) [17]


> Развести можно если написать свои драйвера


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


 
brother ©   (2010-04-14 14:15) [20]

> Вот это меня и интересует,

нет не то... в винде может быть только один актиный контрл? думаем далее...


 
Игорь Шевченко ©   (2010-04-14 14:16) [21]

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


 
brother ©   (2010-04-14 14:19) [22]

> такое есть в некоторых играх.

заметье учитывая [20] у игры одно ативное окно ;)


 
Сергей М. ©   (2010-04-14 14:23) [23]


> Игорь Шевченко ©   (14.04.10 14:16) [21]


Тогда остается только извращаться с отрисовкой собственного курсора "поверх всех окон", что в условиях прикладного уровня не возможно - в любой секунд найдется окно, потенциально возжелавшее быть сверху, так ?)


 
brother ©   (2010-04-14 14:24) [24]

> в любой секунд найдется окно, потенциально возжелавшее быть
> сверху

блин...(


 
Игорь Шевченко ©   (2010-04-14 14:32) [25]

Сергей М. ©   (14.04.10 14:23) [23]

А кто курсор рисует ? Мне казалось, что RIT, обрабатывая очередь системных событий


 
brother ©   (2010-04-14 14:34) [26]

Скажите мне, а как Вы 2а активных окна делать будете?


 
Сергей М. ©   (2010-04-14 14:35) [27]


> Игорь Шевченко ©   (14.04.10 14:32) [25]


Так я и не возражаю что он самый и рисует ..
Но от этого ж не легче)
Или ты намекаешь на гипотетическую возможность внедриться в RIT-механизм и изменить его поведение нужным образом ?


 
Eraser ©   (2010-04-14 14:36) [28]

> [23] Сергей М. ©   (14.04.10 14:23)


> потенциально возжелавшее быть сверху, так ?)

по таймеру делат окно выше других каждую секунду. для данной ситуации этого хватит через глаза, imho.


 
brother ©   (2010-04-14 14:38) [29]

меня не слышно?


 
Сергей М. ©   (2010-04-14 14:39) [30]


> Eraser ©   (14.04.10 14:36) [28]


Ну с таймером понятно - костыль он и есть костыль)


 
Сергей М. ©   (2010-04-14 14:40) [31]


> brother ©   (14.04.10 14:38) [29]


А оно зачем - два активных окна ?


 
brother ©   (2010-04-14 14:42) [32]

в общем если:
> А это уже проблемы юзера: не елозь и не тыкай когда и куда
> не следует, пока идет плейбэк ..
> Детали ограничений - в справке к программулине)

то лучше [4] это гарантирует правильный реплей...


 
brother ©   (2010-04-14 14:44) [33]

> А оно зачем - два активных окна ?


> Не вправе, фокус ввода один на все мышки и функции.

те если юзверь потенциально может нарушить работу реплея, лучше его исключить из уровнения вообще и работать с виндомым курсором... имхо


 
Anatoly Podgoretsky ©   (2010-04-14 14:46) [34]

> brother  (14.04.2010 14:19:22)  [22]

В играх часто используются свои курсоры и прямой доступ к оборудованию DirectPlay


 
Сергей М. ©   (2010-04-14 14:47) [35]


> brother ©   (14.04.10 14:44) [33]


> если юзверь потенциально может нарушить работу реплея


Говорю же - это его, юзверя, проблемы) ..
Об этом он, очевидно, должен быть предупрежден в сопровод.док-ции к программулине)


 
brother ©   (2010-04-14 14:51) [36]

> и прямой доступ к оборудованию DirectPlay

не есть суть, главное

> фокус ввода один


 
Anatoly Podgoretsky ©   (2010-04-14 14:52) [37]

> Сергей М.  (14.04.2010 14:47:35)  [35]

Не обязательно, пусть на своей шкуре изучает, как работать.


 
Anatoly Podgoretsky ©   (2010-04-14 14:54) [38]

> brother  (14.04.2010 14:51:36)  [36]

Так в игре так и есть, одна картинка на весь экран и фокус ввода тоже один, на весь экран, плюс координаты тыканья и известно от какого устройства пришел тык или движение.


 
Сергей М. ©   (2010-04-14 14:54) [39]


> Anatoly Podgoretsky ©   (14.04.10 14:52) [37]


Нет ну я, конечно, согласен что проблемы индейцев шерифа не волнуют, но ..


 
Anatoly Podgoretsky ©   (2010-04-14 15:00) [40]

Вот пусть и канает.


 
Дмитрий Белькевич   (2010-04-14 15:16) [41]


> обе мыши чудесно уживаются, у каждой свой курсор и обе не
> мешают (


Гм, никогда не видел такого поведения. Видел: курсор - один, но управляется обоими мышами (проверил ради интереса :)). Фокус ввода таки один.


 
Юрий Зотов ©   (2010-04-14 15:38) [42]

Демку сделать в виде ролика (то есть, со своим собственным "рисованным" курсором, а вместо mouseevent использовать его эмуляцию). Рядом с окном демки поместить обычное окно - плейер с кнопками Пуск, Пауза, Стоп.

Есть куча программ для создания таких демо-роликов. Например, Microsoft Camcorder пишет ролик в виде AVI или EXE, по выбору. AVI проигрывается обычным плейером, EXE показывает свой собственный.


 
Anatoly Podgoretsky ©   (2010-04-14 15:46) [43]

Так и делают нормальные, надежные демо, независящие от мышей


 
12 ©   (2010-04-14 15:59) [44]

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


 
Сергей М. ©   (2010-04-14 16:49) [45]


> Юрий Зотов ©   (14.04.10 15:38) [42]


И как же "демка" кореллирует с текущим реальным положением дел на раб.столе ?


 
Anatoly Podgoretsky ©   (2010-04-14 16:52) [46]

> Сергей М.  (14.04.2010 16:49:45)  [45]

У нее свой рабочий стол, точно также записаный, не говоря уже об SilverLight


 
Сергей М. ©   (2010-04-14 16:56) [47]


> Anatoly Podgoretsky ©   (14.04.10 16:52) [46]


Ах вон оно что ..

Т.е. мышиные телодвижения, изображаемые в виде демки в окне тек.десктопа, фактически приводят к эмуляции соотв.событий на другом десктопе, я правильно понял ?


 
Anatoly Podgoretsky ©   (2010-04-14 16:59) [48]

> Сергей М.  (14.04.2010 16:56:47)  [47]

Этого я не знаю. Может быть это другой класс демок, более сложный.


 
TIF ©   (2010-04-14 19:43) [49]

http://www.microsoft.com/Rus/Education/MultiPointMouse.aspx

MultiPoint Mouse SDK – бесплатно распространяемый набор библиотек для разработчиков, позволяющий создавать приложения, поддерживающие одновременную работу нескольких мышек.

Технология поддерживает одновременную работу от 2 до 50 мышек


http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=f851122a-4925-4788-bc39-409644ce0f9b


 
Сергей М. ©   (2010-04-14 22:28) [50]


> TIF ©   (14.04.10 19:43) [49]


Э-э-э..

Оно, конечно, крайне любопытно было бы поглядеть, но тащить  60 Мб хрен знает чего, зная при этом что для этого явно требуется .NET-"нахлобучка" - это выше моего понимания)


 
TIF ©   (2010-04-14 22:51) [51]

> но тащить  60 Мб хрен знает чего

)))
Наше дело предложить, ваше дело отказаться ©

PS: вспоминал и вспомнил-таки сейчас, где видел описанную в сабже "живую" демонстрацию с движением курсора. В Sony Vegas 8. Вот только самое-то главное не помню, можно было там
> подвести мышь к кнопуле "Stop playback" и клацнуть ее
или всё-таки нет

:(


 
Anatoly Podgoretsky ©   (2010-04-14 22:57) [52]

> TIF  (14.04.2010 22:51:51)  [51]

Ну это как раз просто, точно известен класс окна и название. В отличии от того как кликнуть по X,Y а его там нет или не оно. Но это обычно не демо, как таковое, а обучающая система, Микрософт любит подобное делать.


 
SergeyIT ©   (2010-04-15 00:11) [53]

Когда-то, еще в Вин3.11, делал демонстрашку на выставку для трех одновременно запущенных программ. Использовал, естественно, хуки. Но вот мышой баловаться нельзя вроде было (а  может и можно, ограниченно, не помню).


 
Германн ©   (2010-04-15 00:24) [54]

Вот это
http://www.eurekalog.com/tutorial1_delphi.php
похоже на сабж?


 
Демо ©   (2010-04-15 00:55) [55]


> Сергей М. ©   (14.04.10 13:39) 


А точно ли нужен реальный повтор действий, а не показ записи, как в

> Германн ©   (15.04.10 00:24) [54]
> Вот этоhttp://www.eurekalog.com/tutorial1_delphi.phpпохоже
> на сабж?

?


 
Сергей М. ©   (2010-04-15 10:01) [56]


> Демо ©   (15.04.10 00:55) [55]


Ну точный или не точный - это как звезды расположатся)
Главное чтобы плейер позиционировал курсор туда куда надо и клацнул тем чем надо там где надо.. Ну или колесом поелозил-пощелкал ..

А уж как на это отреагирует система или некое окно под курсором - это для плейера д.б. фиолетово


 
Демо ©   (2010-04-15 11:26) [57]


> Сергей М. ©   (14.04.10 13:46) [2]
> > Игорь Шевченко ©   (14.04.10 13:42) [1]И как журнальный
> плейбэк может помочь в вопросе о "невыхватывании мыши" из
> рук юзера ?Ведь требуется не только инжектировать мышиный
> ввод, но и визуализировать положение курсора ..


На время, пока пользователь перехватывает управление мышью во время проигрывания, приостанавливать плейер.


 
Anatoly Podgoretsky ©   (2010-04-15 11:34) [58]

За это морду бить будут, я ткнул курсором в edit, пока все нормально, затем снова плейер получил управление и установил курсор в другое место, допустим на другой edit, а я между прочим вводил пароль!


 
han_malign   (2010-04-15 14:25) [59]

ааа... MMPORG бот...
нынче клиенты пользовательскую активность проверяют...


 
Демо ©   (2010-04-15 22:36) [60]


> Anatoly Podgoretsky ©   (15.04.10 11:34) [58]
> За это морду бить будут, я ткнул курсором в edit, пока все
> нормально, затем снова плейер получил управление и установил
> курсор в другое место, допустим на другой edit, а я между
> прочим вводил пароль!


Можно же запоминать позицию, в которой пользователь последний раз был активен, и возвращать курсор туда.


 
Германн ©   (2010-04-16 02:19) [61]


> Сергей М. ©   (15.04.10 10:01) [56]
>
>
> > Демо ©   (15.04.10 00:55) [55]
>
>
> Ну точный или не точный - это как звезды расположатся)
> Главное чтобы плейер позиционировал курсор туда куда надо
> и клацнул тем чем надо там где надо.. Ну или колесом поелозил-
> пощелкал ..
>
> А уж как на это отреагирует система или некое окно под курсором
> - это для плейера д.б. фиолетово
>

А я всё равно не понял.
Так ли уж нужно в демке двигать реальный указатель мышки?


 
Anatoly Podgoretsky ©   (2010-04-16 07:36) [62]

> Демо  (15.04.2010 22:36:00)  [60]

Так я про это и говорю, ужас


 
Anatoly Podgoretsky ©   (2010-04-16 07:36) [63]

> Германн  (16.04.2010 02:19:01)  [61]

Так или кинофильм или иммитация.



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.62 MB
Время: 0.063 c
3-1238700292
Tonich
2009-04-02 23:24
2010.08.27
Привязка FireBird к часовому поясу.


2-1274330451
viktooor
2010-05-20 08:40
2010.08.27
Организация печати Grid с помощью PrintGridEh


6-1223119251
Booo))
2008-10-04 15:20
2010.08.27
tcpserver/client


2-1274443627
istok
2010-05-21 16:07
2010.08.27
проблема подключения к скл2005...


2-1265978961
pavelkq
2010-02-12 15:49
2010.08.27
Поразрядная сортировка списка слов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский