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



Вопросы
  Компоненты ToolBar и PageScroller
   Категория: Компоненты
  Изменить пароль для Paradox
   Категория: Базы данных
  Тpансляция ошибок в BDE
   Категория: Базы данных
  Как соединить несколько файлов в один
   Категория: Файловая система
  Процедуры и функции для рабты с файлами
   Категория: Файловая система
  Создать *.mdb-файл и таблицу в ней
   Категория: Базы данных
  Определение размера файла
   Категория: Файловая система
  Загрузка файлов в THTMLViewer и TFrameBrowser
   Категория: Интернет и Сети

Delphi - База Знаний: Как получить список устройств, подключённых к компьютеру

  << Вернуться к Содержанию  

unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
const
  DIGCF_ALLCLASSES=$00000004;
  DIGCF_PRESENT=$00000002;
  DIGCF_PROFILE=$00000008;
  DIGCF_DEVICEINTERFACE=$00000010;
  SPDRP_DEVICEDESC=$00000000;
 
type
  SP_DEVINFO_DATA=record
   cbSize:DWord;
   ClassGuid:TGuid;
   DevInst:DWord;    // DEVINST handle
   Reserved:LongInt;
  end;
 
  PSP_DEVINFO_DATA=^SP_DEVINFO_DATA;
  PGuid=^TGuid;
 
function SetupDiCreateDeviceInfoList(ClassGuid:PGuid;
 hwndParent:cardinal):Pointer; stdcall; external 'setupapi.dll';
function SetupDiGetClassDevsExA(ClassGuid:PGuid; Enumerator:PChar;
 hwndParent:cardinal; Flags:DWord; DeviceInfoSet:Pointer;
 MachineName:PChar; Reserved:DWord):Pointer; stdcall; external 'setupapi.dll';
function SetupDiGetDeviceRegistryPropertyA(DeviceInfoSet:Pointer;
 DeviceInfoData:PSP_DEVINFO_DATA; Property_:DWord; PropertyRegDataType:Pointer;
 PropertyBuffer:Pointer; PropertyBufferSize:cardinal; RequiredSize:Pointer):longbool;
 stdcall; external 'setupapi.dll';
function SetupDiEnumDeviceInfo(DeviceInfoSet:Pointer; MemberIndex:DWord;
 var DeviceInfoData:SP_DEVINFO_DATA):longbool; stdcall; external 'setupapi.dll';
function SetupDiDestroyDeviceInfoList(DeviceInfoSet:Pointer):longbool; stdcall;
 external 'setupapi.dll';
 
procedure TForm1.Button1Click(Sender: TObject);
var
  dwRequired:cardinal;
  hDev, hAllDevices:Pointer;
  dwInfo:DWord;
  Data:SP_DEVINFO_DATA;
  buf:PChar;
  s:string;
begin
 hDev:=SetupDiCreateDeviceInfoList(nil, 0);
 If cardinal(hDev)=INVALID_HANDLE_VALUE then
 begin
  ShowMessage('Error in SetupDiCreateDeviceInfoList');
  exit;
 end;
 hAllDevices:=SetupDiGetClassDevsExA(nil, nil, 0, {DIGCF_PRESENT or} DIGCF_ALLCLASSES,
  hDev, nil, 0);
 If cardinal(hAllDevices)=INVALID_HANDLE_VALUE then
 begin
  ShowMessage('Error in SetupDiGetClassDevsExA');
  exit;
 end;
 FillChar(Data, SizeOf(SP_DEVINFO_DATA), 0);
 Data.cbSize:=SizeOf(SP_DEVINFO_DATA);
 dwInfo:=0;
 If not SetupDiEnumDeviceInfo(hAllDevices, dwInfo, Data) then
 begin
  ShowMessage('Error in SetupDiEnumDeviceInfo');
  exit;
 end;
 buf:=StrAlloc(100);
 While SetupDiEnumDeviceInfo(hAllDevices, dwInfo, Data) do
 begin
  dwRequired:=0;
  FillChar(buf^, 100, #0);
  If SetupDiGetDeviceRegistryPropertyA(hAllDevices, @Data, SPDRP_DEVICEDESC,
   nil, @buf^, 100, @dwRequired) then
  begin
   s:=string(buf);
   Memo1.Lines.Add(s);
  end;
  inc(dwInfo);
 end;
 StrDispose(buf);
 SetupDiDestroyDeviceInfoList(hAllDevices);
 SetupDiDestroyDeviceInfoList(hDev);
end;
 
end.





  << Вернуться к Содержанию