Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[15914] Re:Re:Re:잘되네요. 뭐가 잘못된건가요?
빌더(TWx) [builder] 1990 읽음    2017-07-28 12:03
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# 코드 참고해서 포팅하세요. 이만 휴가...


+ -

관련 글 리스트
15911 그래픽카드 온도를 구하는 소스코드인데 에러가 납니다. 첫눈 1768 2017/07/27
15912     Re:그래픽카드 온도를 구하는 소스코드인데 에러가 납니다. 빌더(TWx) 2170 2017/07/28
15913         Re:Re:잘되네요. 뭐가 잘못된건가요? 첫눈 1773 2017/07/28
15914             Re:Re:Re:잘되네요. 뭐가 잘못된건가요? 빌더(TWx) 1990 2017/07/28
15915                 Re:Re:Re:Re:감사합니다. 첫눈 1929 2017/07/28
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.