GetRawInputDeviceInfo
USB HID デバイス名のデバイス名を取得するために使用しています。
\??\
何らかの理由で、Windows XP でコードを実行すると、 ではなくで始まるデバイス名が表示されます\\?\
。
もちろん、これは、このデバイス名を使用しようとしても機能しないことを意味します (CreateFile
たとえば、「機能しません。デバイス名を編集して手動で修正すると、\\?\
すべてがうまく機能します。
これは、Windows 7 では発生しません。Win7 では、すべてがうまく機能します。
また、すべての API 呼び出しの後にテストを行いGetLastError
ますが、エラーは発生しません。
私の OS はすべて 32 ビットで、私のプロジェクトは Unicode でコンパイルしています。
私が間違っていることは何ですか?? デバイス名を取得するコンソール アプリケーションのコード スニペットを次に示します。
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);
...
...