Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Определение кода (ID) оборудования 
:(
    Опции темы
CTPAX
  Дата 27.12.2008, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 27.12.2008
Где: Слоним

Репутация: нет
Всего: нет



Подскажите, пожалуйста, как программными средствами Delphi можно определить коды (ID) оборудования, установленного в ПК...
PM MAIL ICQ   Вверх
ama_kid
Дата 28.12.2008, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 19
Всего: 95



Поиск по слову "AllLib".
Цитата
чтение идентификатора и серийного номера CPU из оборудования, корректное определение тактовой частота процессора (модуль GGlbUtil.pas функции CPUInfo, GetCPUSpeed, CPUSpeed); чтение версии, даты, производителя и серийного номера BIOS из оборудования, пробуются один или несколько из 6 альтернативных способов в зависимости от операционной системы и прав пользователя, поддерживаются Windows 95/NT+, включая специальное сканирование памяти BIOS для определения параметров неизвестных моделей BIOS (модуль GDifUtil.pas функция BIOSInfo); чтение модели, версии и серийного номера для четырех первых контроллеров HDD, используется один или несколько из 7 альтернативных способов в зависимости от операционной системы и прав пользователя, поддерживаются Windows 95/98/ME/NT/2000/XP/2003 (модуль GDifUtil.pas функция HDDInfo); получение сводного идентификатора системы для привязки к компьютеру (модуль GDifUtil.pas функция SystemInfoStr)



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
CTPAX
Дата 29.12.2008, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 27.12.2008
Где: Слоним

Репутация: нет
Всего: нет



Спасибо, но это не совсем то что мне нужно... А нужно следующее: в Диспетчере устройств есть список устройств (извиняюсь за каламбур). Для каждого устройства в свойствах на вкладке Сведения можно увидеть Код экземпляра устройства и код (ID) оборудования и много всего прочего и интересного... так вот, нужно чтобы программка выдавала список этих самых устройств и их коды (ID)... Тыкните меня, пожалуйста, носом в название функции (если такая есть) или хотя бы идеи как это можно реализовать...
PM MAIL ICQ   Вверх
Rrader
  Дата 29.12.2008, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 29
Всего: 191





--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
CTPAX
Дата 29.12.2008, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 27.12.2008
Где: Слоним

Репутация: нет
Всего: нет



и как это все заставить работать на делфи?
PM MAIL ICQ   Вверх
Rrader
  Дата 1.1.2009, 18:09 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 29
Всего: 191



CTPAX, Google столько примеров и статей выдал, даже SetupAPI.pas переведенный smile Попробуй самостоятельно разобраться, а по ходу если возникнут вопросы, поможем.


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
CTPAX
Дата 5.1.2009, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 27.12.2008
Где: Слоним

Репутация: нет
Всего: нет



мне нужен список ID устройств в виде 
PCI\VEN_1002&DEV_5B62&SUBSYS_1B621002&REV_00 из диспетчера устройств,
а не 
{C06136A2-43EA-4F43-AF06-7413D07E28B7} из реестра

PM MAIL ICQ   Вверх
THandle
  Дата 7.1.2009, 01:18 (ссылка) |  (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 7
Всего: 372



CTPAX, вот примерчик:

Кусок SetupAPI, который нам потребуется(потырен с нета, позже обрезан, более полные, если надо есть в googl'е):

Код

interface

uses Windows;

const
  CfgMgrDllName = 'cfgmgr32.dll';
  SetupApiModuleName = 'SETUPAPI.DLL';

  CR_NO_SUCH_VALUE            = $00000025;
  DIGCF_PRESENT               = $00000002;
  SPDRP_HARDWAREID            = $00000001;

type
  PSPDevInfoData = ^TSPDevInfoData;
  SP_DEVINFO_DATA = packed record
    cbSize: DWORD;
    ClassGuid: TGUID;
    DevInst: THandle;
    Reserved: DWORD;
  end;
  TSPDevInfoData = SP_DEVINFO_DATA;

function CM_Enumerate_Classes(ulClassIndex: DWORD; var ClassGuid: TGUID;
  ulFlags: DWORD): DWORD; stdcall; external CfgMgrDllName name 'CM_Enumerate_Classes';

function SetupDiGetClassDescription(var ClassGuid: TGUID; ClassDescription: PWideChar;
  ClassDescriptionSize: DWORD; var RequiredSize: DWORD): BOOL; stdcall;
  external SetupApiModuleName name 'SetupDiGetClassDescriptionW';

function SetupDiGetClassDevs(ClassGuid: PGUID; const Enumerator: PWideChar;
   hwndParent: HWND; Flags: DWORD): THandle; stdcall; external SetupApiModuleName
   name 'SetupDiGetClassDevsW';

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

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

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

implementation

end.



Код примера:
Код


unit MainUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, SetupAPI;

type
  TForm1 = class(TForm)
    Button1: TButton;
    TreeView1: TTreeView;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function GetDeviceHardwareID(DeviceHandle: THandle;
  const DeviceData: TSPDevInfoData): WideString;
const
  BUFFER_SIZE = 256;
var
  Buffer: PWideChar;
  RequiredSize: DWORD;
begin
  Result := '';
  RequiredSize := BUFFER_SIZE;
  GetMem(Buffer, RequiredSize);
  try
    repeat
      ReallocMem(Buffer, RequiredSize);
      if SetupDiGetDeviceRegistryProperty(DeviceHandle, DeviceData, SPDRP_HARDWAREID,
        PDWORD(Nil)^, PByte(Buffer), RequiredSize, RequiredSize) then
      begin
        Result := Buffer;
        Break;
      end;
    until GetLastError <> ERROR_INSUFFICIENT_BUFFER;
  finally
    FreeMem(Buffer);
  end;
end;

procedure EnumDevices(DeviceGUID: PGUID; ANode: TTreeNode);
var
  I: DWORD;
  DeviceHandle: THandle;
  DeviceData: TSPDevInfoData;
  HardwareID: WideString;
begin
  DeviceHandle := SetupDiGetClassDevs(DeviceGUID, Nil, 0, DIGCF_PRESENT);
  if DeviceHandle <> INVALID_HANDLE_VALUE then
  try
    I := 0;
    DeviceData.cbSize := SizeOf(TSPDevInfoData);
    repeat
      if not SetupDiEnumDeviceInfo(DeviceHandle, I, DeviceData) then
        Break;
      HardwareID := GetDeviceHardwareID(DeviceHandle, DeviceData);
      if HardwareID <> '' then
        Form1.TreeView1.Items.AddChild(ANode, HardwareID);
      Inc(I);
    until False;
  finally
    SetupDiDestroyDeviceInfoList(DeviceHandle);
  end;
end;

procedure ListDevices;
const
  LINE_LEN = 256;
var
  I: ULONG;
  Res: DWORD;
  Node: TTreeNode;
  GUID: TGUID;
  Buffer: array [0..LINE_LEN - 1] of WideChar;
begin
  I := 0;
  repeat
    Res := CM_Enumerate_Classes(I, GUID, 0);
    if Res <> CR_NO_SUCH_VALUE then
    begin
      if SetupDiGetClassDescription(GUID, @Buffer[0],
        LINE_LEN, PDWORD(Nil)^) then
      begin
        Node := Form1.TreeView1.Items.AddChild(Nil, Buffer);
        Application.ProcessMessages;
        EnumDevices(@GUID, Node);
      end;
    end;
    Inc(I);
  until RES = CR_NO_SUCH_VALUE;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ListDevices;
end;

end.



Ну и на всякий случай прикрепляю архив с исходниками.
Проверено в не очень лицензионной Delphi 2009.

Это сообщение отредактировал(а) THandle - 7.1.2009, 12:17

Присоединённый файл ( Кол-во скачиваний: 133 )
Присоединённый файл  Example.rar 10,51 Kb
PM   Вверх
CTPAX
Дата 8.1.2009, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 27.12.2008
Где: Слоним

Репутация: нет
Всего: нет



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

Это сообщение отредактировал(а) CTPAX - 9.1.2009, 16:32
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0535 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.