(решено)Графический планшет - получить integer силы нажатия

Модератор: Модераторы

(решено)Графический планшет - получить integer силы нажатия

Сообщение vitaly_l » 29.12.2016 00:09:14

Графический планшет := работает как обычная мышка,
но имеет ещё один дополнительный параметр: СИЛА НАЖАТИЯ.

Сила нажатия, в системе, передаётся как-то стандартно, т.к. многие программы его считывают,
скорее всего это число от 0 до 1024, но нужно знать, как к переменной обратиться в системе.

:?: Быть может кто-нить знает, как отловить эту переменную: СИЛУ - НАЖАТИЯ ?
:?: Может в драйверах, как-то можно вычислить название переменной или функцию Windows ?
:?: Или например в программе для теста, графического планшета, отловить как-то можно, куда она обращается, за информацией о силе нажатия ?
:?: Или быть может, есть какой-то юнит, возвращающий вместе с координатами пера ( равно координаты мышки ), ещё и силу нажатия ?

Если кто чего слышал или знает, поделитесь, пожалуйста.

.
Последний раз редактировалось vitaly_l 30.12.2016 22:37:26, всего редактировалось 1 раз.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Графический планшет - получить integer силы нажатия

Сообщение runewalsh » 29.12.2016 03:28:31

Гуглится Wintab32.dll (она даже используется в SDL, вроде очень простой интерфейс).
Возможно, есть в DirectInput.

Сложный способ — WM_INPUT. Не очень красивый, но рабочий пример с джойстиком: https://www.codeproject.com/Articles/18 ... tick-Input — приложил файлы, т. к. сайт просит регистрацию. Суть такова: подготавливаешь всю эту магию (RegisterRawInputDevices, GetRawInputDeviceInfo...) и в ответ на WM_INPUT'ы делаешь GetRawInputData. Эта функция читает информацию о мгновенном состоянии устройства в буфер (формат специфичен для устройства, тебе сообщают только размер). Затем парсишь интересующие тебя показатели с помощью HidP_GetUsages/HidP_GetUsageValue. «Usages» — это кнопки с двумя состояниями (нажата-отпущена), а «UsageValues» — дискретные значения в некотором интервале (границы сообщает HidP_GetValueCaps). Например, конкретный планшет может возвращать X и Y от 0 до 65535 и давление от 0 до 999. Номера UsagePages и Usages более-менее стандартизованы, так, у джойстиков это всякие HID_USAGE_GENERIC_X, HID_USAGE_GENERIC_Y, etc., а у планшетов... хз, посмотри сам, что оно там возвращает. Вообще документировано очень плохо, может, и не стоит юзать. Вроде и видел спецификацию номеров этих Usages вплоть до медоборудования, но не могу найти.

Ещё планшет должен подхватиться Stylus API (InkObj.dll или как-то так), но там тоже сложновато и COM.

Добавлено спустя 22 часа 48 секунд:
Попробовал реализовать через WM_INPUT (алсо, нашёл спецификацию: http://www.usb.org/developers/hidpage/Hut1_12v2.pdf).
У меня странно работает, а именно: через стандартные Digitizers (Page = $D, Usage = $1) отзывается, только если работает «Служба ввода планшетного ПК» (я обычно выключаю, т. к. не знаю другого способа убрать этот дурацкий кружочек после клика), кроме того, сообщает LogicalMax = 32767, хотя реальные значения давления возвращаются от 0 до 2047. В других программах нет проблем ни с выключенной службой, ни с давлением. Ну и hid.dll они не используют, да.

WinTab, по ходу, специфичен для Wacom, но должен работать: http://www.wacomeng.com/windows/.
Я бы реализовал так: WinTab, если есть, иначе WM_INPUT хд.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
runewalsh
энтузиаст
 
Сообщения: 578
Зарегистрирован: 27.04.2010 00:15:25

Re: Графический планшет - получить integer силы нажатия

Сообщение vitaly_l » 30.12.2016 18:44:26

runewalsh писал(а):WinTab, по ходу, специфичен для Wacom, но должен работать: http://www.wacomeng.com/windows/.

Юнит, Wintab32.pas, взятый вот здесь: viewtopic.php?t=6213&view=unread#unread, действительно работает с Wacom и передаёт силу нажатия. А например с планшетом, Genius, начинаются странные ГЛЮКИ. В частности, как только программа активируется, то сразу же планшет перестаёт реагировать на нажатия. Но перемещение видно. Нажатие не работает и на территории вне программы. При этом, если нажатием кнопок Alt+Tab поменять активную программу, то работа планшета Genius - восстанавливается! И самое прикольное, при активации после этого снова "этой программы", ровно 1-2 секунды, планшет начинает на Canvas программы - рисовать как мышка...

Но самое прикольное, начинается здесь: всё это перестаёт глючить, если запустить код,
ДОБРОГО И МУЛЬТИ-ПУЛЬТИ-УВАЖАЕМОГО: runewalsh!!!

СПАСИБО БОЛЬШУЩЕЕ ПРИБОЛЬШУЩЕЕ, ДОБРЫЙ ПРИДОБРЫЙ RUNEWALSH ==> tablet код работает !!!

САМЫЕ ПРЕД-ПРЕД-НОВОГОДНИЕ - МУЛЬТИ-ПУЛЬТИ-ПОЗДРАВЛЕНИЯ С НАСТУПАЮЩИМ НОВЫМ ГОДОМ!!!, И ХОРОШЕЕ НАСТРОЕНИЕ - НЕ ПОКИНЕТ БОЛЬШЕ ВАС :roll: !!!... И НАС :wink:

Сейчас раскурочу, изучу, чтобы понять как оно устроено!
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41


Вернуться в Графика

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Рейтинг@Mail.ru