T
Vielen Dank dafür, das hat mir schon ein wenig geholfen.
Allerdings weiß ich wei gesagt leider noch nicht annähernd wie C++ funktioniert, ich brauch das ganze nur zu testzwecken.
Unten ist das Programm, welches natürlich noch nicht funktioniert.
Was fehlt, bzw was hab ich falsch gemacht?
Müssen die Methoden wie in Java in eine Klasse?
#include <cstdlib>
#include <iostream>
#include <windows.h>
#include <winable.h>
#include <stdio.h>
#include <hidclass.h>
#include <setupapi.h>
#include <hidsdi.h>
#include <ddk/hidpi.h>
#include <ddk/hidusage.h>
using namespace std;
int main(int argc, char *argv[])
{
//GetRawInputDeviceList;
// Tatstatur und Maus ausschalten!!!
//bool ret;
// ret = BlockInput( TRUE );
system("PAUSE");
return EXIT_SUCCESS;
}
CString GetSerialNumber(HANDLE handle)
{
WCHAR sn[32];
CString serial;
memset(&sn, 0, 32);
HidD_GetSerialNumberString(handle, &sn, 32);
serial.Format(_T("%s"), &sn[0]);
return serial;
}
int EnumHidDevices(CString devSerial[32])
{
HIDD_ATTRIBUTES Attributes;
SP_DEVICE_INTERFACE_DATA devInfoData;
PSP_DEVICE_INTERFACE_DETAIL_DATA detailData;
HDEVINFO hDevInfo;
int MemberIndex = 0;
LONG DevInfo;
ULONG Length = 0;
ULONG Required;
GUID HidGuid;
HANDLE devHandle;
CString serial;
int counter = 0;
ZeroMemory(&devInfoData, sizeof(devInfoData));
devInfoData.cbSize = sizeof(devInfoData);
HidD_GetHidGuid(&HidGuid);
hDevInfo = SetupDiGetClassDevsW(&HidGuid, NULL, NULL, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT);
do{
DevInfo = SetupDiEnumDeviceInterfaces (hDevInfo, NULL, &HidGuid, MemberIndex, &devInfoData);
if (DevInfo != 0)
{
SetupDiGetDeviceInterfaceDetailW(hDevInfo, &devInfoData, NULL, 0, &Length, NULL);
detailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA) malloc(Length);
detailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
SetupDiGetDeviceInterfaceDetailW(hDevInfo, &devInfoData, detailData, Length, &Required, NULL);
devHandle = CreateFileW(detailData->DevicePath, 0, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_NO_BUFFERING, NULL);
//Atributes enthält die VendorID und ProductID und andere evtl. relevante Daten
//Attributes.Size = sizeof(Attributes);
//HidD_GetAttributes (devHandle, &Attributes);
/*Generate list of serials*/
/*****************************************************************************/
serial.SetString(GetSerialNumber(devHandle));
devSerial[MemberIndex].SetString(serial);
/*****************************************************************************/
CloseHandle(devHandle);
free(detailData);
}
MemberIndex++;
}while (DevInfo != NULL);
SetupDiDestroyDeviceInfoList(hDevInfo);
return 0;
}