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