В данной статье мы рассмотрим, как обнаружить подключение или отключение 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