我想使用 NVIDIA 的NVAPI SDK来检索 NVIDIA 控制面板的 3D 设置的全局配置文件中公开的所有设置。
参考文档在这里:NVAPI Driver Settings (DRS) APIs
来源
到目前为止,这是我所拥有的,主要是基于我在网上找到的样本:
#include <Windows.h>
#include <string>
#include "nvapi.h"
#include "NvApiDriverSettings.h"
NvDRSSessionHandle _session;
NvDRSProfileHandle _profile;
int main()
{
if (NvAPI_Initialize() != NVAPI_OK)
throw std::runtime_error("NvAPI: NvAPI can't be initialized");
if (NvAPI_DRS_CreateSession(&_session) != NVAPI_OK)
throw std::runtime_error("NvAPI: Can't create NvAPI session");
if (NvAPI_DRS_LoadSettings(_session) != NVAPI_OK)
throw std::runtime_error("NvAPI: Can't load system settings");
if (NvAPI_DRS_GetCurrentGlobalProfile(_session, &_profile) != NVAPI_OK)
throw std::runtime_error("NvAPI: Can't get global profile");
NVDRS_PROFILE profileInformation = {0};
profileInformation.version = NVDRS_PROFILE_VER;
if (NvAPI_DRS_GetProfileInfo(_session, _profile, &profileInformation) != NVAPI_OK)
throw std::runtime_error("NvAPI: Can't get current global profile information");
if(profileInformation.numOfSettings> 0)
{
NVDRS_SETTING* setArray = new NVDRS_SETTING[profileInformation.numOfSettings];
NvU32 numSetRead = profileInformation.numOfSettings,i;
setArray[0].version = NVDRS_SETTING_VER;
if (NvAPI_DRS_EnumSettings(_session, _profile, 0, &numSetRead, setArray) != NVAPI_OK)
throw std::runtime_error("NvAPI: Can't get profile setting enum");
for(i=0; i<numSetRead; i++)
{
if(setArray[i].settingLocation!=NVDRS_CURRENT_PROFILE_LOCATION)
{
continue;
}
NvAPI_DRS_GetSettingNameFromId(setArray[i].settingId, &setArray[i].settingName);
wprintf(L"Setting Name: %s\n", setArray[i].settingName);
printf("Setting ID: %X\n", setArray[i].settingId);
printf("Predefined? : %d\n", setArray[i].isCurrentPredefined);
switch(setArray[i].settingType)
{
case NVDRS_DWORD_TYPE:
printf("Setting Value: %X\n", setArray[i].u32CurrentValue);
break;
case NVDRS_BINARY_TYPE:
{
unsigned int len;
printf("Setting Binary (length=%d) :", setArray[i].binaryCurrentValue.valueLength);
for(len=0; len<setArray[i].binaryCurrentValue.valueLength; len++)
{
printf(" %02x", setArray[i].binaryCurrentValue.valueData[len]);
}
printf("\n");
}
break;
case NVDRS_WSTRING_TYPE:
wprintf(L"Setting Value: %s\n", setArray[i].wszCurrentValue);
break;
}
}
}
printf("\n");
// Clean up
NvAPI_DRS_DestroySession(_session);
_session = 0;
return 0;
}
控制台输出
这是我目前得到的输出:
Setting Name: Vertical Sync Tear Control
Setting ID: 5A375C
Predefined? : 0
Setting Value: 96861077
Setting Name: Vertical Sync
Setting ID: A879CF
Predefined? : 0
Setting Value: 8416747
Setting Name: ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
Setting ID: 80303A19
Predefined? : 1
Setting Value: 1
Setting Name: ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
Setting ID: 80857A28
Predefined? : 1
Setting Value: 1
Setting Name: ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
Setting ID: 809D5F60
Predefined? : 1
Setting Value: 1
问题
某些设置名称显示不正确 ( ???...
),并且大多数似乎都丢失了(环境光遮蔽、各向异性、电源管理等)。
我得到了错误的配置文件还是初始化不正确?
相关问题
一些问题:
NvAPI_DRS_GetCurrentGlobalProfile
和之间有根本区别NvAPI_DRS_GetBaseProfile
吗?他们似乎必须做同样的事情。- Current Global Profile 是否真的与我打开 NVIDIA 控制面板时看到的全局参数相对应?