Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: sergolga от 13-02-2018, 18:28:53

Название: Блокировка мыши
Отправлено: sergolga от 13-02-2018, 18:28:53
Всем добрый день. Существует ли способ заблокировать движение мыши? Задача собственно у меня в следующем: мне нужно чтобы при построении линии пользователем программно проставлялись зеленые крестики привязки (для возможности построения в последующем путей трэкинга - Alignment point).
Достигаю этого тем, что:
1. отключаю автоматическое проставление этих точек через системную переменную POLARMODE=8;
2. контролирую PointMonitorEventArgs и если e.Context.History&PointHistoryBits.ObjectSnapped) != 0, то запускаю таймер на зависание (System.Timers.ElapsedEventArgs), по истечении которого эмулируется нажатие Шифта (KeyImulate.SendKeyDown(KeyImulate.KeyCode.SHIFT)) и таймер на отжатие этого Шифта (KeyImulate.SendKeyUp(KeyImulate.KeyCode.SHIFT)). Сразу обмолвлюсь, что KeyImulate.SendKeyPress(KeyImulate.KeyCode.SHIFT) - для этих целей не срабатывает, автокаду нужны долисекунды разрыва между нажатием и отжатием шифта, чтобы проставился этот зеленый крестик. Поэтому у меня такие заморочки с двумя таймерами и нажатием/отжатием.
3. И все работает прекрасно, за небольшим исключением, что если пользователь резво двигает мышкой, и в эти долисекунды между нажатием и отжатием шифта выходит за область выбранной точки с Оснэпа, то все или часть зеленых крестиков Alignment point пропадают либо неверно подсчитываются. А мне их нужно считать и фиксировать в программе. Вывод - на долюсекунды до отжатия шифта, нужно мышку отключить, не дать ей двигаться, зафиксировать как-то в выбранной точке. Но как?
Пробовала: Blockinput; messagefilter (при message.Msg= 15  и 512 -  return true); GetCursorPos (ловлю значение в точке оснэпа) + ClipCursor (ограничиваю движение курсора этой точкой оснэпа) - не сработало, ноль реакции.
Название: Re: Блокировка мыши
Отправлено: Александр Ривилис от 13-02-2018, 19:22:44
Существует ли способ заблокировать движение мыши?
Это главный вопрос? Тогда что такое блокировка движения мыши?
Название: Re: Блокировка мыши
Отправлено: sergolga от 13-02-2018, 20:14:27
Боюсь сморозить глупость. Видимо какая-то тонкость от меня ускользает. Но для меня "способ заблокировать движение мыши" и "блокировка движения мыши" - одно и то же. Мне нужно, добиться, чтобы на долюсекунды, между программным нажатием и отжатием шифта, курсор не сдвигался с выбранной до нажатия шифта точки. Предполагаю, что автокад в этом случае не должен реагировать на движения мышки, совершаемые пользователем.
Название: Re: Блокировка мыши
Отправлено: Александр Ривилис от 13-02-2018, 20:24:25
Я не буду комментировать то, как Вы издеваетесь над AutoCAD. Это Ваше дело.
Из AutoCAD API только это может теоретически помочь: http://adn-cis.org/kak-realizovat-windows-xuk-s-ispolzovaniem-acedregisterfilterwinmsg-v-.net.html
Всё остальное - это хуки в Windows, часть из которых, как я понял Вы испробовали и они не работают. Хочу напомнить, что AutoCAD многопоточное приложение, так что блокировка мыши может быть крайне нетривиальным делом.
Название: Re: Блокировка мыши
Отправлено: Дмитрий Загорулькин от 13-02-2018, 21:01:18
Всем добрый день. Существует ли способ заблокировать движение мыши?
Off-Topic: показать

(https://s13.postimg.org/nlenoeig3/Game_Over.jpg) (https://postimg.org/image/nlenoeig3/)

 ::)
Название: Re: Блокировка мыши
Отправлено: sergolga от 14-02-2018, 13:06:48
Дмитрий, боюсь в моем случае - это не вариант  ;D.

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