빌더님 덕분에 원하는 것을 완성했습니다.
진심으로 감사드립니다.
빌더(TWx) 님이 쓰신 글 :
: typedef enum
: {
: NVAPI_THERMAL_TARGET_NONE = 0,
: NVAPI_THERMAL_TARGET_GPU = 1,
: NVAPI_THERMAL_TARGET_MEMORY = 2,
: NVAPI_THERMAL_TARGET_POWER_SUPPLY = 4,
: NVAPI_THERMAL_TARGET_BOARD = 8,
: NVAPI_THERMAL_TARGET_VCD_BOARD = 9,
: NVAPI_THERMAL_TARGET_VCD_INLET = 10,
: NVAPI_THERMAL_TARGET_VCD_OUTLET = 11,
: NVAPI_THERMAL_TARGET_ALL = 15,
: NVAPI_THERMAL_TARGET_UNKNOWN = -1,
: } NV_THERMAL_TARGET;
:
: typedef struct
: {
: int version;
: int count;
:
: struct
: {
: int controller;
: int defaultMinTemp;
: int defaultMaxTemp;
: int currentTemp;
: NV_THERMAL_TARGET target;
: } sensor[3];
:
: } NV_GPU_THERMAL_SETTINGS;
:
: typedef void *(*NVQueryInterface)(unsigned int offset);
: typedef int (*NVInitialize)();
: typedef int (*NVEnumPhysicalGPUs)(int **handles, int *count);
: typedef int (*NVGetThermalSettings)(int *handle, int sensorIndex, NV_GPU_THERMAL_SETTINGS *temp);
:
: NVQueryInterface nvQueryInterface;
: NVInitialize nvInitialize;
: NVEnumPhysicalGPUs nvEnumPhysicalGPUs;
: NVGetThermalSettings nvGetThermalSettings;
:
: HMODULE hNvDll = NULL;
: int gpuCount = 0;
: int *gpuHandles[64] = {NULL};
: NV_GPU_THERMAL_SETTINGS nvgts;
: //---------------------------------------------------------------------------
: __fastcall TForm1::TForm1(TComponent* Owner)
: : TForm(Owner)
: {
: hNvDll = LoadLibraryA("nvapi.dll");
: if (hNvDll == NULL)
: {
: ShowMessage("Couldn't find nvidia dll");
: return;
: }
:
: // Interface delegtion...
: nvQueryInterface = (NVQueryInterface)GetProcAddress(hNvDll, "nvapi_QueryInterface");
: nvInitialize = (NVInitialize)nvQueryInterface(0x0150E828);
: nvEnumPhysicalGPUs = (NVEnumPhysicalGPUs)nvQueryInterface(0xE5AC921F);
: nvGetThermalSettings = (NVGetThermalSettings)nvQueryInterface(0xE3640A56);
:
: if (nvInitialize == NULL || nvEnumPhysicalGPUs == NULL ||
: nvEnumPhysicalGPUs == NULL )
: {
: ShowMessage("Couldn't get functions in nvidia dll");
: FreeLibrary(hNvDll);
: hNvDll = NULL;
: return;
: }
:
: nvInitialize();
: nvEnumPhysicalGPUs(gpuHandles, &gpuCount);
:
: nvgts.version = sizeof(NV_GPU_THERMAL_SETTINGS) | (1<<16);
: nvgts.count = 0;
: nvgts.sensor[0].controller = -1;
: nvgts.sensor[0].target = NVAPI_THERMAL_TARGET_GPU;
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::Timer1Timer(TObject *Sender)
: {
: int gpuTemp;
:
: if(hNvDll != NULL)
: {
: nvGetThermalSettings(gpuHandles[0], 0 ,&nvgts);
:
: String s;
: s.printf(L"GPU 현재온도 = %d\n", nvgts.sensor[0].currentTemp);
: Caption = s;
: }
: }
:
:
: 답변:
:
: 지난 답변에서 nvapi.dll .. nvapi_QueryInterface() 을 이용한다고 답변했었는데...
: 예전에 답변한 C# 코드 참고해서 포팅하세요. 이만 휴가...
:
:
|