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

Обнаружение подключения/отключения USB-устройств в Delphi под Windows

Delphi , ОС и Железо , Драйвера

В данной статье мы рассмотрим, как обнаружить подключение или отключение USB-устройства в приложении, написанном на Delphi. Для этого мы будем использовать Winsock API, который предоставляет функции для работы с сетью и устройствами.

Шаг 1: Импортируем необходимые библиотеки

Сначала нам нужно импортировать необходимые библиотеки в нашем проекте. В нашем случае это Winsock2 и Iphlpapi.

uses
  Winsock2,
  Iphlpapi;

Шаг 2: Определяем тип устройства

Далее, нам нужно определить тип устройства, которое мы хотим обнаружить. В нашем случае это USB-устройство.

type
  TDeviceType = (dtUnknown, dtUSB);

Шаг 3: Создаем функцию для обнаружения устройства

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

function DetectDevice(deviceType: TDeviceType): Boolean;
var
  hDevInfo: THandle;
  deviceInfoSet: PDevInfoList;
  deviceInfoData: PDevInfoData;
  deviceDesc: PDevDesc;
  devicePath: string;
begin
  Result := False;

  // Получаем список устройств
  hDevInfo := SetupDiGetClassDevs(nil, nil, nil, DIGCF_PRESENT or DIGCF_DEVICEINTERFACE);
  if hDevInfo = INVALID_HANDLE_VALUE then
    Exit;

  // Получаем данные о устройствах
  deviceInfoSet := GetDevInfoList(hDevInfo);
  if deviceInfoSet = nil then
  begin
    SetupDiDestroyDeviceInfoList(hDevInfo);
    Exit;
  end;

  // Перебираем устройства
  deviceInfoData := GetDevInfoData(deviceInfoSet, 0);
  while Assigned(deviceInfoData) do
  begin
    // Получаем описание устройства
    deviceDesc := GetDevDesc(deviceInfoData);
    if Assigned(deviceDesc) then
    begin
      // Получаем путь к устройству
      devicePath := deviceDesc^.DevDesc.MultiSzID;
      if devicePath <> '' then
      begin
        // Проверяем тип устройства
        if (deviceType = dtUSB) and (devicePath[1] = '\') then
        begin
          // Устройство обнаружено
          Result := True;
          Break;
        end;
      end;
    end;

    // Переходим к следующему устройству
    deviceInfoData := GetDevInfoData(deviceInfoSet, GetDevInfoData(deviceInfoSet, 0).Next);
  end;

  // Освобождаем ресурсы
  FreeDevInfoList(deviceInfoSet);
  SetupDiDestroyDeviceInfoList(hDevInfo);
end;

Шаг 4: Используем функцию для обнаружения устройства

Теперь мы можем использовать созданную функцию для обнаружения подключения или отключения USB-устройства.

procedure TForm1.FormCreate(Sender: TObject);
begin
  if DetectDevice(dtUSB) then
    ShowMessage('USB device connected');
end;

В данном примере мы вызываем функцию DetectDevice с параметром dtUSB в обработчике события FormCreate. Если функция возвращает True, то мы показываем сообщение об обнаружении USB-устройства.

Заключение

В данной статье мы рассмотрели, как обнаружить подключение или отключение USB-устройства в приложении, написанном на Delphi. Для этого мы использовали Winsock API, который предоставляет функции для работы с сетью и устройствами. Надеемся, что данная статья поможет вам в решении подобных задач.

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

В статье рассматривается процесс обнаружения подключения или отключения USB-устройств в приложении, созданном на Delphi под Windows, с использованием Winsock API.


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

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




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


:: Главная :: Драйвера ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-01-28 06:25:51/0.0033190250396729/0