, 장치에 파일을 복사 할 때 파일이 이미 존재하는 경우이며, 그것은 확장 dup0
, dup1
과 중복을 얻는다 이름을 바꿀하지만 ...
__declspec(dllexport) HRESULT __cdecl supportsCommand(CComPtr<IPortableDevice>& device, PROPERTYKEY theKey) {
HRESULT err = S_OK;
CComPtr<IPortableDeviceCapabilities> capabilities;
CComPtr<IPortableDeviceKeyCollection> commands;
uint numCommands = 0;
device->Capabilities(&capabilities);
err = capabilities->GetSupportedCommands(&commands);
err = commands->GetCount(&numCommands);
PROPERTYKEY key = WPD_PROPERTY_NULL;
for(uint index = 0; index < numCommands; index++) {
err = commands->GetAt(index, &key);
if(IsEqualPropertyKey(theKey, key))
return true;
}
return false;
}
__declspec(dllexport) HRESULT __cdecl renameObject(CComPtr<IPortableDevice>& device, LPWCSTR objectId, LPWCSTR newName) {
HRESULT err = S_OK;
if (supportsCommand(device, WPD_COMMAND_OBJECT_PROPERTIES_SET) == false)
return (HRESULT)-1;
CComPtr<IPortableDeviceValues> properties, values, results;
err = CoCreateInstance(CLSID_PortableDeviceValues, NULL, CLSCTX_INPROC_SERVER, IID_IPortableDeviceValues, (VOID**) &properties);
err = CoCreateInstance(CLSID_PortableDeviceValues, NULL, CLSCTX_INPROC_SERVER, IID_IPortableDeviceValues, (VOID**) &values);<br>
// Mount the command.
err = properties->SetGuidValue(WPD_PROPERTY_COMMON_COMMAND_CATEGORY
, WPD_COMMAND_OBJECT_PROPERTIES_SET.fmtid);
err = properties->SetUnsignedIntegerValue(WPD_PROPERTY_COMMON_COMMAND_ID
, WPD_COMMAND_OBJECT_PROPERTIES_SET.pid);<br>
// Set the values
err = properties->SetStringValue(WPD_PROPERTY_OBJECT_PROPERTIES_OBJECT_ID, objectId);
err = values->SetStringValue(WPD_OBJECT_ORIGINAL_FILE_NAME, newName);
err = properties->SetIPortableDeviceValuesValue(WPD_PROPERTY_OBJECT_PROPERTIES_PROPERTY_VALUES, values);
err = device->SendCommand(0, properties, &results);<br>
// Show the results
uint count = 0;
results->GetCount(&count);
PROPERTYKEY key;
PROPVARIANT var;
for(uint i = 0; i < count; i++) {
results->GetAt(i, &key, &var);
// ...show key and var...
}
return err;
}
이것은 단지 부분적인 대답이지만, https://github.com/notpod/Notpod2 및 HTTPS와 결합 : // GitHub의
아래 내가 WPD 장치 개체의 이름을 변경하는 데 사용하는 코드입니다 .com/derekwilson/PodcastUtilities 그리고 약간의 파기 후에 나는 해결책을 발견했다. –