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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать наличие устройств, мышь, клава, монитор 
:(
    Опции темы
c00per
Дата 12.1.2009, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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




Я знаю вопрос легкий, но я все перерыл и немогу найти:

Необходимо узнать в Delphi 7 подключена ли мышь, клава и монитор к компу?

ЗЫ: если сто сорри за оффтоп
ЗЫЫ: можно и на асме
PM MAIL   Вверх
hkdkest
Дата 13.1.2009, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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


Новичок



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

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



hkdkest

Эта фишка  не проканывает... Здесь на момент загрузки комп определяет наличие устройств и записывает их в реестр, а эти API функции берут данные из него
PM MAIL   Вверх
RinOSpro
Дата 2.2.2009, 15:32 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Можно через SetupAPI.

Код

const
  SetupApiModuleName = 'SetupApi.dll';

  DIGCF_DEFAULT         = $00000001; // only valid with DIGCF_DEVICEINTERFACE
  DIGCF_PRESENT         = $00000002;
  DIGCF_ALLCLASSES      = $00000004;
  DIGCF_PROFILE         = $00000008;
  DIGCF_DEVICEINTERFACE = $00000010;

  SPDRP_DEVICEDESC                  = $00000000; // DeviceDesc (R/W)
  SPDRP_HARDWAREID                  = $00000001; // HardwareID (R/W)
  SPDRP_COMPATIBLEIDS               = $00000002; // CompatibleIDs (R/W)
  SPDRP_UNUSED0                     = $00000003; // unused
  SPDRP_SERVICE                     = $00000004; // Service (R/W)
  SPDRP_UNUSED1                     = $00000005; // unused
  SPDRP_UNUSED2                     = $00000006; // unused
  SPDRP_CLASS                       = $00000007; // Class (R--tied to ClassGUID)
  SPDRP_CLASSGUID                   = $00000008; // ClassGUID (R/W)
  SPDRP_DRIVER                      = $00000009; // Driver (R/W)
  SPDRP_CONFIGFLAGS                 = $0000000A; // ConfigFlags (R/W)
  SPDRP_MFG                         = $0000000B; // Mfg (R/W)
  SPDRP_FRIENDLYNAME                = $0000000C; // FriendlyName (R/W)
  SPDRP_LOCATION_INFORMATION        = $0000000D; // LocationInformation (R/W)
  SPDRP_PHYSICAL_DEVICE_OBJECT_NAME = $0000000E; // PhysicalDeviceObjectName (R)
  SPDRP_CAPABILITIES                = $0000000F; // Capabilities (R)
  SPDRP_UI_NUMBER                   = $00000010; // UiNumber (R)
  SPDRP_UPPERFILTERS                = $00000011; // UpperFilters (R/W)
  SPDRP_LOWERFILTERS                = $00000012; // LowerFilters (R/W)
  SPDRP_BUSTYPEGUID                 = $00000013; // BusTypeGUID (R)
  SPDRP_LEGACYBUSTYPE               = $00000014; // LegacyBusType (R)
  SPDRP_BUSNUMBER                   = $00000015; // BusNumber (R)
  SPDRP_ENUMERATOR_NAME             = $00000016; // Enumerator Name (R)
  SPDRP_SECURITY                    = $00000017; // Security (R/W, binary form)
  SPDRP_SECURITY_SDS                = $00000018; // Security (W, SDS form)
  SPDRP_DEVTYPE                     = $00000019; // Device Type (R/W)
  SPDRP_EXCLUSIVE                   = $0000001A; // Device is exclusive-access (R/W)
  SPDRP_CHARACTERISTICS             = $0000001B; // Device Characteristics (R/W)
  SPDRP_ADDRESS                     = $0000001C; // Device Address (R)
  SPDRP_UI_NUMBER_DESC_FORMAT       = $0000001E; // UiNumberDescFormat (R/W)
  SPDRP_MAXIMUM_PROPERTY            = $0000001F; // Upper bound on ordinals

type
  HDEVINFO = Pointer;
  SP_DEVINFO_DATA = packed record
    cbSize: DWORD;
    ClassGuid: TGUID;
    DevInst: DWORD; // DEVINST handle
    Reserved: WORD;
  end;


function SetupDiClassGuidsFromNameEx(const ClassName: PAnsiChar; ClassGuidList: PGUID;
  ClassGuidListSize: DWORD; var RequiredSize: DWORD; const MachineName: PAnsiChar;
  Reserved: Pointer): LongBool; stdcall;

function SetupDiGetClassDevs(ClassGuid: PGUID; const Enumerator: PChar;
  hwndParent: HWND; Flags: DWORD): HDEVINFO; stdcall;

function SetupDiEnumDeviceInfo(DeviceInfoSet: HDEVINFO;
  MemberIndex: DWORD; var DeviceInfoData: SP_DEVINFO_DATA): LongBool; stdcall;

function SetupDiGetDeviceRegistryProperty(DeviceInfoSet: HDEVINFO;
  var DeviceInfoData: SP_DEVINFO_DATA; Property_: DWORD;
  PropertyRegDataType: PDWORD; PropertyBuffer: PBYTE; PropertyBufferSize: DWORD;
  RequiredSize: PDWORD): LongBool; stdcall;

function SetupDiDestroyDeviceInfoList(DeviceInfoSet: HDEVINFO): LongBool; stdcall;

implementation

function SetupDiClassGuidsFromNameEx; external SetupApiModuleName name 'SetupDiClassGuidsFromNameExA';
function SetupDiGetClassDevs; external SetupApiModuleName name 'SetupDiGetClassDevsA';
function SetupDiEnumDeviceInfo; external SetupApiModuleName name 'SetupDiEnumDeviceInfo';
function SetupDiGetDeviceRegistryProperty; external SetupApiModuleName name 'SetupDiGetDeviceRegistryPropertyA';
function SetupDiDestroyDeviceInfoList; external SetupApiModuleName name 'SetupDiDestroyDeviceInfoList';

function FindDeviceByName(ADevName: string; APropertyFlags,
  AFlags: Cardinal; AStringList: TStrings): Boolean;
var
  DevInfoData: SP_DEVINFO_DATA;
  hDevInfo1:  Pointer;
  I, DataT, Buffersize: DWORD;
  Buffer: PAnsiChar;
  LGUID: TGUID;
begin
  Result := False;

  SetupDiClassGuidsFromNameEx(PChar(ADevName), @LGUID, 1, Buffersize, '', nil);

  hDevInfo1 := SetupDiGetClassDevs(@LGUID, nil, HWND(nil), AFlags);

  try
    DevInfoData.cbSize := SizeOf(SP_DEVINFO_DATA);
    I := 0;
    Buffersize := 500;
    GetMem(Buffer, Buffersize);
    try
      while SetupDiEnumDeviceInfo(hDevInfo1, I, DevInfoData) do
      begin
        SetupDiGetDeviceRegistryProperty(hDevInfo1, DevInfoData,
          APropertyFlags, @DataT, PByte(Buffer), Buffersize, nil);

        AStringList.Add(Buffer);

        Inc(I);
      end;
    finally
      FreeMem(Buffer);
    end;
  finally
    SetupDiDestroyDeviceInfoList(hDevInfo1);
  end;
end;



Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  FindDeviceByName('display', SPDRP_DEVICEDESC, DIGCF_PRESENT, Memo1.Lines);

    {первый параметр имя устройства в твоем случае mouse, keyboard, display}
    {второй параметр, какие устройства выводить, если к примеру написать DIGCF_PRESENT or DIGCF_ALLCLASSES то получишь все девайсы, а не только тот что запросил}
    {Третий параметр, что из описания данного устройства получить сейчас выводится название.}

end;

  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0547 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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