Поделиться через


Изменение версий системного профиля

[Функция, связанная с этой страницей, Windows Media Format 11 SDK, является устаревшей функцией. Он был заменен средством чтения исходного кода и модуля записи приемника. Средство чтения исходного кода и модуль записи приемника оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код по возможности использовал средство чтения исходного кода и модуль записи приемника вместо пакета SDK для Windows Media Format 11. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]

Каждый раз, когда вы создаете объект диспетчера профилей, он анализирует системные профили. Вы можете выполнить итерацию системных профилей с помощью методов IWMProfileManager::GetSystemProfileCount и IWMProfileManager::LoadSystemProfile , но диспетчер профилей будет подсчитывать и перечислять профили только одной версии за раз. Если вы хотите использовать этот метод поиска системных профилей, необходимо убедиться, что диспетчер профилей работает с нужной версией. Используйте методы интерфейса IWMProfileManager2 , чтобы задать и получить версию системного профиля, используемую диспетчером профилей.

Версии задаются с помощью членов типа перечисления WMT_VERSION . Если для версии системного профиля задано значение WMT_VER_9_0, вызов будет выполнен успешно, но число системных профилей будет равно нулю. Это связано с тем, что стандартные системные профили не используют кодеки windows Media Audio и Video 9 Series. Дополнительные сведения об обновлении профилей для использования новейших кодеков см. в разделе Повторное использование конфигураций потоков.

При загрузке системного профиля по идентификатору GUID не имеет значения, какую версию системного профиля использует диспетчер профилей. Дополнительные сведения о загрузке системных профилей см. в статье Загрузка системного профиля.

В следующем примере кода показано, как задать и получить версию системного профиля. В этом примере для выходных данных консоли используется printf и требуется включить stdio.h. Дополнительные сведения об использовании этого кода см. в разделе Использование примеров кода.

int main(void)
{
    HRESULT hr = S_OK;

    IWMProfileManager*  pProfileMgr  = NULL;
    IWMProfileManager2* pProfileMgr2 = NULL;

    WMT_VERSION         profileVersion;

    // Initialize COM.
    hr = CoInitialize(NULL);
    if(FAILED(hr))
    {
        printf("Could not initialize COM.");
        return 0;
    }

    // Create a profile manager object.
    hr = WMCreateProfileManager(&pProfileMgr);
    if(FAILED(hr))
    {
        printf("Could not create a profile manager object.");
        return 0;
    }

    // Get the IWMProfileManager2 interface.
    hr = pProfileMgr->QueryInterface(IID_IWMProfileManager2, 
                                     (void**) &pProfileMgr2);
    if(FAILED(hr))
    {
        printf("Could not get the IWMProfileManager2 interface.");
        SAFE_RELEASE(pProfileMgr);
        return 0;
    }

    // Release the old interface.
    SAFE_RELEASE(pProfileMgr);

    // Get the current system profile version.
    hr = pProfileMgr2->GetSystemProfileVersion(&profileVersion);
    if(FAILED(hr))
    {
        printf("Could not retrieve profile version.");
        printf("\nError code: 0x%X\n", hr);
        SAFE_RELEASE(pProfileMgr2);
        return 0;
    }
    
    // Display the current version.
    printf("Current version: ");
    switch(profileVersion)
    {
    case WMT_VER_4_0:
        printf("WMT_VER_4_0\n");
        break;
    case WMT_VER_7_0:
        printf("WMT_VER_7_0\n");
        break;
    case WMT_VER_8_0:
        printf("WMT_VER_8_0\n");
        break;
    case WMT_VER_9_0:
        printf("WMT_VER_9_0\n");
        break;
    }

    // Set the system profile version to 8.
    profileVersion = WMT_VER_8_0;

    hr = pProfileMgr2->SetSystemProfileVersion(profileVersion);
    if(FAILED(hr))
    {
        printf("Could not change profile version.");
        printf("\nError code: 0x%X\n", hr);
        SAFE_RELEASE(pProfileMgr2);
        return 0;
    }

    // Print verification.
    printf("Successfully set version to ");
    switch(profileVersion)
    {
    case WMT_VER_4_0:
        printf("WMT_VER_4_0\n");
        break;
    case WMT_VER_7_0:
        printf("WMT_VER_7_0\n");
        break;
    case WMT_VER_8_0:
        printf("WMT_VER_8_0\n");
        break;
    case WMT_VER_9_0:
        printf("WMT_VER_9_0\n");
        break;
    }

    // Clean up.
    SAFE_RELEASE(pProfileMgr2);
}

Использование системных профилей