Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

USB!


Страницы:   1 2

Le! ©   (2004-07-21 12:54:00) 

Народ как можно получить список всех устройств подключенных к USB портам???


Le!   (2004-07-29 09:27:00) [1]

Ручками получается хуже! хотя я уже дошел и SetupDiGetClassDevs у меня заработал! а как теперь посмотреть устройства которые он нашел (то есть как я понимаю в примерах выше вот это: DeviceInfoSet)и вывести их в какой нибудь memo или куда нить еще?? или это нереально??


DC-AC   (2004-07-29 07:29:00) [2]

Тебе бы ручками научиться исправлять... Учебник по сям - и вперёд..


Le!   (2004-07-28 11:57:00) [3]

а что не так в этом коде? нашел прогу которая переделывает из с++ в pas! начинаю исправлять ошибки и совсем закапываюсь!

procedure DeleteAllDevices(hardware_id: AnsiString);
var
DeviceInfoSet: HDEVINFO;

DeviceInfoData: SP_DEVINFO_DATA;
{$ifdef _DEBUG}
msg: AnsiString;
{$endif}
i: integer;

deviceid: pUCHAR;

begin
 DeviceInfoSet:=SetupDiGetClassDevs(0{nil},0{nil},0{nil},DIGCF_PROFILE or DIGCF_ALLCLASSES);
 DeviceInfoData.cbSize:= sizeof(SP_DEVINFO_DATA);
 while{for}
 i:=0;
 {to} SetupDiEnumDeviceInfo(DeviceInfoSet,i, and DeviceInfoData)
 {;}
 inc(i);
 do
 begin
   (* Цикл перечисления устройств*)
   deviceid:=GetDeviceRegistryProperty(DeviceInfoSet, and DeviceInfoData,SPDRP_HARDWAREID,0{nil});
   if deviceid<>0{nil} {<= !!!9}
   then
   begin
     if 0=CompareStr(UpperCase(AnsiString({!!!a type cast? =>} {pchar(}deviceid)),UpperCase(hardware_id))
     then
     (* Наш Id!*)
     {$ifdef _DEBUG}
     begin
       msg:= (AnsiString('Found device: ')+AnsiString({!!!a type cast? =>} {pchar(}deviceid));
       OutputDebugString(msg.c_str());
       {$endif}
       if {not}0=SetupDiRemoveDevice(DeviceInfoSet, and DeviceInfoData)
       then
       {$ifdef _DEBUG}
       begin
         msg:= (AnsiString('SetupDiRemoveDevice() failed, code = ')+IntToStr(GetLastError()));
         OutputDebugString(msg.c_str());
         {$endif}
       end;
       else
       {$ifdef _DEBUG}
       begin
         msg:= (AnsiString('Устройство удалено'));
         OutputDebugString(msg.c_str());
         {$endif}
       end;
       ;
     end;
     ;
     free(deviceid);
   end;
   ;
 end;
 ;
 SetupDiDestroyDeviceInfoList(DeviceInfoSet);
end;


Le!   (2004-07-28 11:05:00) [4]

Я с API никогда не связывался! я не могу выполнить даже одну функцию! а тут сразу такой пример! спасибо! мне теперь забрираться пол года!
я спрашивал про тот код чтобы попататься выполнить хоть одну функцию а дальше я сам дойду!
у меня тот пример даже не запускается! а не то что ошибки выдает!


Они   (2004-07-27 18:25:00) [5]

Ну ладно. Вот примерчик. Для C++ Builder.

Следующий код перечисляет устройства и удаляет найденные в системе устройства, hardware id которых совпадает с указанным.

//---------------------------------------------------------------------------
// Удаляет все устройства с указанным id
void DeleteAllDevices(AnsiString hardware_id)
{
HDEVINFO DeviceInfoSet = SetupDiGetClassDevs(NULL,NULL,NULL,DIGCF_PROFILE|DIGCF_ALLCLASSES);
SP_DEVINFO_DATA DeviceInfoData;
#ifdef _DEBUG
AnsiString msg;
#endif
DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
for (int i=0; SetupDiEnumDeviceInfo(DeviceInfoSet,i,&DeviceInfoData); i++)
{ // Цикл перечисления устройств
 UCHAR *deviceid    = GetDeviceRegistryProperty(DeviceInfoSet,&DeviceInfoData,SPDRP_HARDWAREID,NULL);
 if (deviceid)
 {
  if (0==CompareStr(UpperCase(AnsiString((char *)deviceid)),UpperCase(hardware_id)))
  { // Наш Id!
   #ifdef _DEBUG
   msg = (AnsiString("Found device: ")+AnsiString((char *)deviceid));
   OutputDebugString(msg.c_str());
#endif
   if (!SetupDiRemoveDevice(DeviceInfoSet,&DeviceInfoData))
   {
    #ifdef _DEBUG
    msg = (AnsiString("SetupDiRemoveDevice() failed, code = ")+IntToStr(GetLastError()));
    OutputDebugString(msg.c_str());
 #endif
   } else
   {
    #ifdef _DEBUG
    msg = (AnsiString("Устройство удалено"));
    OutputDebugString(msg.c_str());
 #endif
   };
  };
  free(deviceid);
 };
};
SetupDiDestroyDeviceInfoList(DeviceInfoSet);
}

Для устройств USB hardware id выглядит как "USB\VID_vvvv&PID_pppp&REV_rrrr"
где vvvv - код производителя, pppp - код продукта, rrrr - код релиза.
Например: "USB\VID_0123&PID_4567&REV_0089"
Иногда rev id пропускают.


Они   (2004-07-27 18:00:00) [6]

>куда надо это впихнуть?

Ну, в параметр, наверно.

>вот что надо исправить в моем примере чтобы заработало!!

Всё, наверно. Это как варить суп из топора.
:)


Le!   (2004-07-27 14:46:00) [7]

то есть?
куда надо это впихнуть?
вот что надо исправить в моем примере чтобы заработало!!


Они   (2004-07-27 14:41:00) [8]

Наверно, переданы неверные параметры? Неинициализированный указатель, например.

HDEVINFO SetupDiGetClassDevs(
 const GUID* ClassGuid,
 PCTSTR Enumerator,
 HWND hwndParent,
 DWORD Flags
);


Le!   (2004-07-27 09:47:00) [9]

народ почему не запускается, пишет какую то хрень и я вообще так сделал? с API никогда не сталкивался!!!

unit Unit1;

interface

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

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

var

 Form1: TForm1;
 hInfo: pointer;
 pClassGuid: Pointer;

implementation
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
hInfo := SetupDiGetClassDevs(pClassGuid,NiL,0, cDIGCFPRESENT );
end;

end.


Le!   (2004-07-26 15:56:00) [10]

и кстати здесь:
www.delphi-jedi.org/APILIBRARY:694595
setupapi.pas!


Le!   (2004-07-26 15:52:00) [11]

А над ли делать для етой функции: external 'setupapi.dll' или нет?


DC-AC   (2004-07-23 16:58:00) [12]

>первое откуда скачать setupapi.pas
Епрст, ну писал же www.delphi-jedi.org , а если пораскинуть мозгами, то www.delphi-jedi.org/APILIBRARY:694595


Le!   (2004-07-23 13:30:00) [13]

вернее надо было ли писать вот так! как указано выше!


Le!   (2004-07-23 13:28:00) [14]

теперь след вопросы:
первое откуда скачать setupapi.pas, просто я какой то нашел у себя но не пошло выдало ошибку: Точка входа в процудуру SetupGetClassDevs не найдена в библиотеке DLL setupapi.dll!!!осюда следующий вопрос надо было писать так:
function SetupDiGetClassDevs(pClassGuid: Pointer;
                            Enumerator: PCHAR;
                            hwndParent: HWND;
                            Flags: DWORD):pointer;
                            stdcall; external 'setupapi.dll';


DC-AC   (2004-07-23 07:19:00) [15]

1. Скачиваем файл setupapi.pas
2. В нём видим
const
 DIGCF_DEFAULT         = $00000001; // only valid with DIGCF_DEVICEINTERFACE
 {$EXTERNALSYM DIGCF_DEFAULT}
 DIGCF_PRESENT         = $00000002;
 {$EXTERNALSYM DIGCF_PRESENT}
 DIGCF_ALLCLASSES      = $00000004;
 {$EXTERNALSYM DIGCF_ALLCLASSES}
 DIGCF_PROFILE         = $00000008;
 {$EXTERNALSYM DIGCF_PROFILE}
 DIGCF_DEVICEINTERFACE = $00000010;
 {$EXTERNALSYM DIGCF_DEVICEINTERFACE}
3. пишем
implementation

uses SetupApi;
4. Всё...


NorthMan   (2004-07-22 16:19:00) [16]

На мой взгляд можно попробовать WMI функции использовать. Они позволяют почти любую инфу получать. Теория есть на MSDN и на русском. Есть компоненты NTSet на http://www.online-admin.com, тоже могут помочь


Le!   (2004-07-22 15:36:00) [17]

слушайте может кто нить здесь код оставить! может я не так что делаю!


Le!   (2004-07-22 12:44:00) [18]

вот у него SetupDiGetClassDevs подключив библиотеку 'setupapi.dll' он его узнал а вот последнее его свойство(DIGCF_ALLCLASSES, DIGCF_DEVICEINTERFACE,
DIGCF_PRESENT, DIGCF_PROFILE) не одно не хочет воспринимать! что не так?? библиотеку пробовал подключать и статически и динамически, если это на чтото влияет!!


Le!   (2004-07-22 12:34:00) [19]

DIGCF_ALLCLASSES
DIGCF_DEVICEINTERFACE
DIGCF_PRESENT
DIGCF_PROFILE
почему он пишет что не знает ниодин из этих параметров????


DC-AC   (2004-07-22 12:13:00) [20]

www.delphi-jedi.org по-моему...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо