GetRawInputDeviceInfo
을 사용하여 USB HID 장치 이름의 장치 이름을 가져옵니다.GetRawInputDeviceInfo가 Windows XP에서 USB HID 장치 이름의 잘못된 구문을 반환합니다.
Windows XP에서 코드를 실행하면 \??\
으로 시작하고 \\?\
이 아닌 장치 이름이 나타납니다. 내가 예 "가 작동하지 않습니다에 대한 CreateFile
이 장치 이름을 (사용하려고하면. 내가 장치 이름을 편집하고 수동으로 \\?\
모든 것이 잘 작동 할 문제를 해결할 경우 있음을 물론 수단의
이.
이 없습니다. 모든 것이 잘 작동 Win7에에서 윈도우 7에
나는 또한 모든 API 호출 후에 GetLastError
테스트를 발생 않으며 오류가 발생하지 않습니다.
내 모든 운영 체제의 32 비트이며, 내 프로젝트는 유니 코드로 컴파일된다.
어떤 제안을 내 잘못하고 있습니까 ?? 다음은 장치 이름을 가져 오는 내 콘솔 응용 프로그램의 코드 조각입니다.
nResult = GetRawInputDeviceInfo(pDeviceList[i].hDevice, RIDI_DEVICENAME, NULL, &nBufferSize);
if(nResult < 0)
{
cout << "ERR: Unable to get Device Name character count.." << endl;
return false;
}
WCHAR* wcDeviceName = new WCHAR[ nBufferSize + 1 ];
if(wcDeviceName == NULL)
{
cout << "ERR: Unable to allocate memory for Device Name.." << endl;
return false;
}
nResult = GetRawInputDeviceInfo(pDeviceList[i].hDevice, RIDI_DEVICENAME, wcDeviceName, &nBufferSize);
if(nResult < 0)
{
cout << "ERR: Unable to get Device Name.." << endl;
delete [] wcDeviceName;
return false;
}
wcDeviceName[1]='\\';
//This is the manual fix for the device name in WinXP. How do I get rid of it????
pDesc->hHandle = CreateFile(wcDeviceName, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, NULL, NULL);
...
...
10x 많이 있습니다. 나는 제안 된 독서의 verison을 발견하고 이렇게 할 것이다 .... 그러나, 왜 winXP와 win7의 차이가 있니? – user1423622
@ user1423622 : 나는 * why *에서만 추측 할 수 있습니다. 블로그 작성자에게 질문을 던져야합니다 : The Old New Thing :) – 0xC0000022L