Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Использование Raw Input API для различения ввода с мыши и сенсорной панели в программах на Delphi

Delphi , Синтаксис , Справочник по API-функциям

Вопрос пользователя заключается в необходимости различения ввода с мыши и сенсорной панели в приложении, которое уже использует хуки для отслеживания мыши (WH_MOUSE_LL). Пользователь упоминает Raw Input API, но не знает, как его использовать вместе с хуками. В контексте обсуждения предложены различные альтернативные подходы, включая изучение работы драйверов сенсорных панелей, использование библиотеки для распознавания устройств и примеры кода для чтения данных из USB-устройств.

Статья:

Введение

В современных операционных системах пользователи часто сталкиваются с ситуацией, когда на одном компьютере одновременно активированы и мышь, и сенсорная панель. Это может вызвать проблемы для разработчиков программного обеспечения, особенно если требуется различать ввод с этих устройств. В данной статье мы рассмотрим, как использовать Raw Input API для решения этой задачи в программах, написанных на Delphi.

Основы Raw Input API

Raw Input API — это набор функций в Windows, который позволяет приложениям получать сырые данные ввода от различных устройств, включая мыши, клавиатуры, сенсорные панели и другие устройства, поддерживающие сырой ввод.

Пример кода на Object Pascal (Delphi)

Для регистрации устройств ввода с помощью Raw Input API, необходимо использовать функцию RegisterRawInputDevices. Вот пример кода, который регистрирует устройство для сбора сырого ввода:

var
  rid: TRawInputDevice = (0, 0, USAGE_PAGE_HID, USAGE_HID_GENERIC_DESKTOP);
begin
  RegisterRawInputDevices(rid, 1, SizeOf(TRawInputDevice));
end;

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

Различение мыши и сенсорной панели

Для различения ввода с мыши и сенсорной панели, необходимо обратить внимание на уникальные идентификаторы устройств. В Raw Input API каждая регистрация устройства возвращает уникальный идентификатор, который можно использовать для определения источника ввода.

Пример использования уникальных идентификаторов

var
  ridArray: array of TRawInputDevice[1];
  RawInputHeader: PRAWINPUTHEADER;
  RawInput: PRAWINPUT;
begin
  ridArray[0] := (0, 0, USAGE_PAGE_HID, USAGE_HID_GENERIC_DESKTOP);
  RegisterRawInputDevices(ridArray[0], 1, SizeOf(TRawInputDevice));
  // ...
  // Получаем сырой ввод
  repeat
    RawInputHeader := GetRawInputData(0, SizeOf(PRAWINPUTHEADER), nil, -SizeOf(PRAWINPUTHEADER));
    if RawInputHeader^.dwSize >= SizeOf(RAWINPUTHEADER) then
    begin
      SetLength(RawInput, RawInputHeader^.dwSize);
      if GetRawInputData(UInteger(RawInputHeader), SizeOf(RAWINPUT), @RawInput, RawInputHeader^.dwSize, RawInputHeader^.dwLength) then
      begin
        case RawInput^.header.dwType of
          RIM_TYPEHID:
          begin
            if RawInput^.data.hid.dwSizeHid >= SizeOf(THID) then
            begin
              // Здесь можно обработать уникальный идентификатор устройства
              case RawInput^.header.hDevice then
                // Обработка для каждого устройства
              end;
            end;
          end;
        // Другие типы устройств
        end;
      end;
    end;
  // ...
end;

Альтернативные подходы

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

Заключение

Использование Raw Input API позволяет разработчикам программ на Delphi различать ввод с мыши и сенсорной панели, что может быть критично для корректной работы приложений, требующих специфического поведения в зависимости от типа устройства ввода. Приведенные примеры кода демонстрируют базовые принципы работы с Raw Input API, которые могут быть расширены и адаптированы под конкретные задачи разработки.

Создано по материалам из источника по ссылке.

В статье рассматривается использование Raw Input API для различения ввода с мыши и сенсорной панели в программах на Delphi.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Справочник по API-функциям ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-13 18:59:48/0.0037469863891602/0