Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
WpdServicesApiSample-programmet innehåller kod som visar hur ett program kan hämta de format som stöds av en viss kontakttjänst genom att anropa metoderna för gränssnitten i följande tabell.
Gränssnitt | Beskrivning |
---|---|
IPortableDeviceService | Används för att hämta gränssnittet IPortableDeviceServiceCapabilities för att komma åt de händelser som stöds. |
IPortableDeviceServiceCapabilities | Ger åtkomst till händelser och händelseattribut som stöds. |
IPortableDevicePropVariantCollection | Innehåller listan över format som stöds. |
IPortableDeviceValues | Innehåller attributen för ett visst format. |
När användaren väljer alternativet "3" på kommandoraden anropar programmet metoden ListSupportedFormats som finns i modulen ServiceCapabilities.cpp.
Observera att innan du hämtar listan över händelser öppnar exempelprogrammet en kontakttjänst på en ansluten enhet.
I WPD beskrivs ett format av attribut som anger namnet och (valfritt) MIME-typen för ett visst format. Dessa attribut definieras i rubrikfilenPortableDevice.h. En beskrivning av attribut som stöds finns i avsnittet Attribut.
Om WpdServiceSampleDriver är den enda installerade enheten returnerar drivrutinen två format som stöds för kontakttjänsten: "AbstractContactFormat" och "VCard2Format". Dessa format motsvarar WPD_OBJECT_FORMAT_ABSTRACT_CONTACT och de WPD_OBJECT_FORMAT_VCARD2 attribut som finns i PortableDevice.h.
Två metoder i modulen ServiceCapabilities.cpp stöder hämtning av format som stöds för tjänsten Kontakter: ListSupportedFormats och DisplayFormat. Den förra hämtar GUID-identifieraren för varje format som stöds. Det senare konverterar detta GUID till en användarvänlig sträng.
Metoden ListSupportedFormats anropar metoden IPortableDeviceService::Capabilities för att hämta ett IPortableDeviceServiceCapabilities--gränssnitt. Med det här gränssnittet hämtar det format som stöds genom att anropa metoden IPortableDeviceServiceCapabilities::GetSupportedFormats. Metoden GetSupportedFormats hämtar GUID för varje format som stöds av tjänsten och kopierar guid:t till ett IPortableDevicePropVariantCollection--objekt.
Följande kod använder metoden ListSupportedFormats.
// List all supported formats on the service
void ListSupportedFormats(
IPortableDeviceService* pService)
{
HRESULT hr = S_OK;
DWORD dwNumFormats = 0;
CComPtr<IPortableDeviceServiceCapabilities> pCapabilities;
CComPtr<IPortableDevicePropVariantCollection> pFormats;
if (pService == NULL)
{
printf("! A NULL IPortableDeviceService interface pointer was received\n");
return;
}
// Get an IPortableDeviceServiceCapabilities interface from the IPortableDeviceService interface to
// access the service capabilities-specific methods.
hr = pService->Capabilities(&pCapabilities);
if (FAILED(hr))
{
printf("! Failed to get IPortableDeviceServiceCapabilities from IPortableDeviceService, hr = 0x%lx\n",hr);
}
// Get all formats supported by the service.
if (SUCCEEDED(hr))
{
hr = pCapabilities->GetSupportedFormats(&pFormats);
if (FAILED(hr))
{
printf("! Failed to get supported formats from the service, hr = 0x%lx\n",hr);
}
}
// Get the number of supported formats found on the service.
if (SUCCEEDED(hr))
{
hr = pFormats->GetCount(&dwNumFormats);
if (FAILED(hr))
{
printf("! Failed to get number of supported formats, hr = 0x%lx\n",hr);
}
}
printf("\n%d Supported Formats Found on the service\n\n", dwNumFormats);
// Loop through each format and display it
if (SUCCEEDED(hr))
{
for (DWORD dwIndex = 0; dwIndex < dwNumFormats; dwIndex++)
{
PROPVARIANT pv = {0};
PropVariantInit(&pv);
hr = pFormats->GetAt(dwIndex, &pv);
if (SUCCEEDED(hr))
{
// We have a format. It is assumed that
// formats are returned as VT_CLSID VarTypes.
if (pv.puuid != NULL)
{
DisplayFormat(pCapabilities, *pv.puuid);
printf("\n");
}
}
PropVariantClear(&pv);
}
}
}
När metoden ListSupportedFormats hämtar GUID för varje format som stöds av den angivna tjänsten anropas metoden DisplayFormat för att visa skriptets egna namn för varje format. till exempel "VCard2".
Metoden DisplayFormat anropar metoden IPortableDeviceServiceCapabilities::GetFormatAttributes-metoden hämtar en samling attribut för det angivna formatet GUID. Den anropar sedan metoden IPortableDeviceValues::GetStringValue och begär att drivrutinen returnerar ett skriptvänligt namn för det angivna formatet.
Följande kod använder metoden DisplayFormat.
// Display basic information about a format
void DisplayFormat(
IPortableDeviceServiceCapabilities* pCapabilities,
REFGUID Format)
{
CComPtr<IPortableDeviceValues> pAttributes;
HRESULT hr = pCapabilities->GetFormatAttributes(Format, &pAttributes);
if (SUCCEEDED(hr))
{
PWSTR pszFormatName = NULL;
hr = pAttributes->GetStringValue(WPD_FORMAT_ATTRIBUTE_NAME, &pszFormatName);
// Display the name of the format if it is available, otherwise fall back to displaying the GUID.
if (SUCCEEDED(hr))
{
printf("%ws", pszFormatName);
}
else
{
printf("%ws", (PWSTR)CGuidToString(Format));
}
CoTaskMemFree(pszFormatName);
pszFormatName = NULL;
}
}
Relaterade ämnen