Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2017, 14:54   #1
Morphey
Новичок
Джуниор
 
Регистрация: 31.03.2017
Сообщений: 1
По умолчанию ХЕ4. получаю инфу об устройствах (SetupDiEnumDeviceInfo) на китайском, что не так посмотрите плиз

Приветствую всех.
Вот кусок рабочего кода, но
получаю инфу об устройствах на китайском, что не так посмотрите плиз.
Работаю на ХЕ4
Вот кусок кода:


Код:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;


const
  SetupApiModuleName = 'SETUPAPI.DLL';

type
  HDEVINFO = THandle;
  ULONG_PTR = ^ ULONG;

const
  GUID_DEVCLASS_DISKDRIVE: TGUID = '{4D36E967-E325-11CE-BFC1-08002BE10318}';
//  GUID_DEVCLASS_DISKDRIVE: TGUID = '{4D36E96F-E325-11CE-BFC1-08002BE10318}';

const
  DIGCF_PRESENT         = $00000002;
  SPDRP_FRIENDLYNAME    = $0000000C;
  SPDRP_DEVICEDESC      = $00000000;

type
  PSPDevInfoData = ^TSPDevInfoData;
  SP_DEVINFO_DATA = packed record
    cbSize: DWORD;
    ClassGuid: TGUID;
    DevInst: DWORD; // DEVINST handle
    Reserved: ULONG_PTR;
  end;
  TSPDevInfoData = SP_DEVINFO_DATA;

  PSPDeviceInterfaceData = ^TSPDeviceInterfaceData;
  SP_DEVICE_INTERFACE_DATA = packed record
    cbSize: DWORD;
    InterfaceClassGuid: TGUID;
    Flags: DWORD;
    Reserved: ULONG_PTR;
  end;
  TSPDeviceInterfaceData = SP_DEVICE_INTERFACE_DATA;

  function SetupDiGetClassDevs(ClassGuid: PGUID; const Enumerator: PAnsiChar;
  hwndParent: HWND; Flags: DWORD): HDEVINFO; stdcall; external SetupApiModuleName
  name 'SetupDiGetClassDevsA';

  function SetupDiEnumDeviceInfo(DeviceInfoSet: HDEVINFO; MemberIndex: DWORD;
  var DeviceInfoData: TSPDevInfoData): BOOL; stdcall; external SetupApiModuleName name 'SetupDiEnumDeviceInfo';

  function SetupDiGetDeviceRegistryProperty(DeviceInfoSet: HDEVINFO;
  const DeviceInfoData: TSPDevInfoData; Property_: DWORD;
  var PropertyRegDataType: DWORD; PropertyBuffer: PBYTE; PropertyBufferSize: DWORD;
  var RequiredSize: DWORD): BOOL; stdcall; external SetupApiModuleName name 'SetupDiGetDeviceRegistryPropertyA';

  function SetupDiDestroyDeviceInfoList(DeviceInfoSet: HDEVINFO): BOOL; stdcall;
  external SetupApiModuleName name 'SetupDiDestroyDeviceInfoList';

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function GetDeviceName(PnPHandle: HDEVINFO; const DevData: TSPDevInfoData): string;
var
  BytesReturned: DWORD;
  RegDataType: DWORD;
  Buffer: array [0..256] of CHAR;
begin
  BytesReturned := 0;
  RegDataType := 0;
  Buffer[0] := #0;
  SetupDiGetDeviceRegistryProperty(PnPHandle, DevData, SPDRP_FRIENDLYNAME,
    RegDataType, PByte(@Buffer[0]), SizeOf(Buffer), BytesReturned);
  Result := Buffer;
  if Result<>'' then exit;
  BytesReturned := 0;
  RegDataType := 0;
  Buffer[0] := #0;
  SetupDiGetDeviceRegistryProperty(PnPHandle, DevData, SPDRP_DEVICEDESC,
    RegDataType, PByte(@Buffer[0]), SizeOf(Buffer), BytesReturned);
  Result:=Buffer;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  DrivePnPHandle: HDEVINFO;
  DeviceNumber:DWORD;
  DevData: TSPDevInfoData;
  DeviceInterfaceData: TSPDeviceInterfaceData;
  RES:BOOL;
begin
  form1.ListBox1.Clear;
  DrivePnPHandle := SetupDiGetClassDevs(@GUID_DEVCLASS_DISKDRIVE, nil, 0, DIGCF_PRESENT {or DIGCF_PROFILE});

  if DrivePnPHandle = INVALID_HANDLE_VALUE then  Exit;

  DeviceNumber := 0;
  repeat
    DeviceInterfaceData.cbSize := SizeOf(TSPDeviceInterfaceData);
    DevData.cbSize := SizeOf(TSPDevInfoData);
    RES := SetupDiEnumDeviceInfo(DrivePnPHandle, DeviceNumber, DevData);
    if (RES) then
    begin
      form1.ListBox1.Items.Add(GetDeviceName(DrivePnPHandle, DevData));
      Memo1.Lines.Add(GetDeviceName(DrivePnPHandle, DevData));
      Inc(DeviceNumber);
    end;
  until not RES;

  SetupDiDestroyDeviceInfoList(DrivePnPHandle);
end;

end.

Последний раз редактировалось Аватар; 24.05.2017 в 15:01.
Morphey вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
посмотрите пожалуйста, что не так ? Конь Антон Паскаль, Turbo Pascal, PascalABC.NET 2 03.06.2015 14:44
Посмотрите что не так в программе lalalalala Microsoft Office Excel 2 28.05.2012 22:31
посмотрите что не так alex_sande Microsoft Office Excel 4 17.06.2010 00:32
Посмотрите что не так, я весь мозг сломал... Devil55 Помощь студентам 3 18.02.2009 18:31
плиз форумчане посмотрите что здесь не правильно _Solomon_ Помощь студентам 6 07.06.2007 13:54