Я пытаюсь определить, какой тип моего WPD-устройства находится в Delphi.Определить тип устройства WPD в Delphi
В моем приложении мне нужно знать, является ли устройство телефоном или камерой или каким бы то ни было.
В соответствии с this MSDN article тип устройства WPD - это свойство устройства WPD, которое можно прочитать, прочитав свойства устройства.
В соответствии с this MSDN article свойствами и атрибутами являются структуры PROPERTYKEY с двумя частями: идентификатором категории и уникальным идентификатором для этой категории.
Я нашел GUID и Uinique ID для WPD_DEVICE_TYPE
которые WPD_DEVICE_TYPE_FMTID : TGuid = '{26D4979A-E643-4626-9E2B-736DC0C92FDC}';
WPD_DEVICE_TYPE_PID = 15;
Моя проблема, что у меня isses выяснить, как получить информацию.
Я ожидал, что IPortableDevice
будет иметь процедуру .Property
, как IPortableDeviceContent
, но это не так.
Однако IPortableDeviceManager
выполняет процедуру GetDeviceProperty
.
У меня есть пример кода, который может получить дружественное имя WPD-устройства (из устройства PortableDeviceApiLib_TLB.pas).
Код:
function GetDeviceFriendlyName(sDeviceId: WideString): WideString;
var iDevNameLen: LongWord;
iRes: Integer;
s: WideString;
begin
//get length of friendly name:
iDevNameLen := 0;
s := '';
iRes := My_IPortableDeviceManager.GetDeviceFriendlyName(PWideChar(sDeviceId), Word(nil^), iDevNameLen);
if iRes = S_OK then
if iDevNameLen>0 then
begin
SetLength(s, iDevNameLen);
ZeroMemory(PWideChar(s), iDevNameLen);
iRes := My_IPortableDevice.GetDeviceFriendlyName(PWideChar(sDeviceId), PWord(PWideChar(s))^, iDevNameLen);
s := Trim(s);
end;
result := s;
end;
Мой тестовый код для получения свойства устройства выглядит следующим образом (в основном то же самое ... почти ...):
function GetDeviceProperty(ADeviceID, APropertyName: WideString): WideString;
var iDevPropLen: LongWord;
iRes: Integer;
s: WideString;
t: cardinal;
begin
//get length of property name:
iDevPropLen := 0;
s := '';
iRes := My_IPortableDeviceManager.GetDeviceProperty(PWideChar(ADeviceID), PWideChar(APropertyName), Byte(nil^), iDevPropLen, t);
showmessage(inttostr(ires)+#13#10+inttostr(iDevPropLen)+#13#10+inttostr(t));
//just trying to get some useful information…
end;
Согласно this MSDN article,pData
должен быть установлен в NULL, а pcbData установлен на ноль, чтобы получить размер pcbData.
Что я делаю.
Не могли бы помочь объяснить, что мне нужно сделать, чтобы все исправить?
EDIT: I found this code which seems to be in python, который получает тип устройства.
Я пытаюсь отправить его в дельфий.
Просьба показать декларацию вашего интерфейса и сообщить нам значение 'iRes'. Кроме того, 'iRes' не является' Integer'. Это «HRESULT». –
@DavidHeffernan Не могли бы вы рассказать о том, что вы имеете в виду под «декларацией примера»? Я не совсем понимаю. iRes = -2147024894. О, я вижу это сейчас, спасибо. –
Я отредактировал вопрос. См. Править внизу. –