powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Доступ к HID устройствам
3 сообщений из 3, страница 1 из 1
Доступ к HID устройствам
    #38506949
Rudolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
//---------------------------------------------------------------------------

#include <vcl.h>
#include <windows.h>
#include <setupapi.h>
#include <winioctl.h>
 #include <ActiveX.hpp>
#include <ComObj.hpp>
#include <Sysutils.hpp>
#include <string>
#include <vector>
#include <map>


//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"


TForm1 *Form1;


  GUID m_hidguid;   
	HINSTANCE hDLL;
	HDEVINFO     DeviceInfoSet;
	

	SP_DEVINFO_DATA DeviceInfoData;
	   

	SP_DEVICE_INTERFACE_DETAIL_DATA DeviceInterfaceDetailData;

	typedef void (WINAPI* t_HidD_GetHidGuid)( OUT LPGUID );
		t_HidD_GetHidGuid HidD_GetHidGuid;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
	hDLL = LoadLibrary("HID.DLL");

	if(hDLL != NULL)
		{
		   HidD_GetHidGuid = (t_HidD_GetHidGuid)GetProcAddress(hDLL, "HidD_GetHidGuid");

		   if(HidD_GetHidGuid)
		   {
			// m_hidguid____определяем номер инрефеса
			//_____хид устройств в системе

			  HidD_GetHidGuid(&m_hidguid);
	  ShowMessage(Sysutils::GUIDToString(m_hidguid));
		   }
		}
	
	 DeviceInfoSet = SetupDiGetClassDevs(&m_hidguid,0,0,DIGCF_DEVICEINTERFACE |DIGCF_PRESENT);

	
	 if (DeviceInfoSet==INVALID_HANDLE_VALUE)
	
		
ShowMessage(IntToStr(DeviceInfoSet));

  SP_DEVICE_INTERFACE_DATA DeviceInterfaceData;
	

	DeviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);

	 ULONG RequiredLength = 0;
	  ListView1->Items->Clear();

	int i = 0;

 while(SetupDiEnumDeviceInterfaces(
   DeviceInfoSet,
	NULL,
	&m_hidguid,
	 i,
	 &DeviceInterfaceData)
	 )
	{


        i++;
   }

FreeLibrary(hDLL);       // hHID DllHandle

}
//------------------------------------------------------------------------



Код незавершенный, продолжаю программировать дальше, только тогда когда результат выполнения программы совподает с ожидаемым результатом.

Поясняю код:
функцией
Код: plaintext
HidD_GetHidGuid(&m_hidguid) 
получаю номер по GUID HID устройств зарегестрированных в системе, я убедился что номер правильный, сравнил его с номереом в реестре.
Функциеей
Код: plaintext
SetupDiGetClassDevs(&m_hidguid,0,0,DIGCF_DEVICEINTERFACE |DIGCF_PRESENT)
получаю информацию с интерфесами всех HID устройств зарегестрированных в системе в параметре
DeviceInfoSet, а затем функцией в цикле
Код: plaintext
SetupDiEnumDeviceInterfaces( DeviceInfoSet,NULL, &m_hidguid,	 i,&DeviceInterfaceData) 
я должен извлекать из параметра DeviceInfoSet интрефесы HID устройств уже поотдельности, эта функция возврашает false при зовершении списка, у меня проблема, функция уже при входе в цикл возврщает false, такое впячетление, что в параметре возврашаемом функцией SetupDiGetClassDevs никакой информации нет. Где у меня пошло не так либо с функции SetupDiGetClassDevs или SetupDiEnumDeviceInterfaces , кто знает о HID устройствах и как сними работать помогите пожалуста.
...
Рейтинг: 0 / 0
Доступ к HID устройствам
    #38507060
BlackEric
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rudolf,

How to enumerate hardware devices by using SetupDi calls - пример

if(hDLL != NULL) - должна быть проверка на INVALID_HANDLE_VALUE

и если она не пройдена, то выходим из функции
...
Рейтинг: 0 / 0
Доступ к HID устройствам
    #38507392
Rudolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackEric,
Поэкспериментировал с флагами в функции SetupDiGetClassDevs(&m_hidguid,0,0,DIGCF_DEVICEINTERFACE |DIGCF_PRESENT) поставил только флаг DIGCF_DEVICEINTERFACE и после этого зашел в цикл ""SetupDiEnumDeviceInterfaces( DeviceInfoSet,NULL, &m_hidguid, i,&DeviceInterfaceData) "" , крутанулся в нем 3 раза, ровно столько сколько у меня зарегистрировано HID устройств, сравнил с реестром, буду дальше программировать, сегодня нет времени.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Доступ к HID устройствам
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]