1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          利用 NvAPI 設置數字振動數值

          來源:互聯網轉載 時間:2024-01-29 08:20:42

          開始是一位朋友有這個需求,他給了我一個英偉達官網的開發包,名字是:R410-developer.zip(諸位可以自己到英偉達官網下載),里面提供了一些示例,包含自定義分辨率、顯示器顏色設置等,但是顯示器色彩設置的例子一致沒有跑通,而且我也沒有找到哪個參數是可以設置數字振動值的,所以憋屈了很多天。但直到看到了一個 AHK 版本實現的設置工具通過代碼發現,其實實現方法是通過 nvapi.dll 動態庫導出的一個查詢函數地址的方法,將指定接口導出來執行具體業務。在加上在 github 上搜索的各類示例,最終實現了這個功能,下面詳細介紹實現步驟。

          1)需要的方法和結構

          設置數字振動數值需要先通過 nvapi.dll 導出的 NvAPI_QueryInterface_t 方法獲取 NvAPI_Initialize_t 方法來初始化 NvAPI。然后依次獲取顯示器句柄、獲取當前顯示器數字振動值、設置數字振動值的函數地址,他們的聲明分別對應如下:

          // 查詢在 nvapi.dll 中函數的地址方法函數聲明typedef int*(*NvAPI_QueryInterface_t)(unsigned int offset);// 初始化 NvAPI 的方法typedef int(*NvAPI_Initialize_t)();// 根據 ID 枚舉顯示器句柄的方法typedef int(*NvAPI_EnumNvidiaDisplayHandle_t)(int thisEnum, int* pNvDispHandle);// 獲取數字振動當前值typedef int(*NvAPI_GetDVCInfoEx_t)(int hNvDisplay, int outputId, NV_DISPLAY_DVC_INFO_EX* pDVCInfo);// 設置數字振動值typedef int(*NvAPI_SetDVCLevelEx_t)(int hNvDisplay, int outputId, NV_DISPLAY_DVC_INFO_EX* pDVCInfo);

          其中設置和獲取數字振動值需要一個結構體 NV_DISPLAY_DVC_INFO_EX,其聲明如下:

          typedef struct{    unsigned int version;   // 結構體版本    int currentLevel;       // 當前級別    int minLevel;           // 最低級別    int maxLevel;           // 最高級別    int defaultLevel;       // 默認級別} NV_DISPLAY_DVC_INFO_EX, *PNV_DISPLAY_DVC_INFO_EX;

          2)獲取各個接口地址

          我們首先 Load nvapi.dll 然后得到 nvapi_QueryInterface 方法的地址,然后通過 nvapi_QueryInterface 方法查詢另外一些接口的地址。如下所示:

          bool NvController::Initialize(){    hModule = LoadLibraryW(TEXT("nvapi.dll"));    if (hModule == nullptr)    {        std::cerr << "Failed to load nvapi.dll." << std::endl;        return false;    }    NvAPI_QueryInterface = (NvAPI_QueryInterface_t)GetProcAddress(hModule, "nvapi_QueryInterface");    NvAPI_Initialize = (NvAPI_Initialize_t)(*NvAPI_QueryInterface)(_NvAPI_Initialize);    NvAPI_EnumNvidiaDisplayHandle = (NvAPI_EnumNvidiaDisplayHandle_t)(*NvAPI_QueryInterface)(_NvAPI_EnumNvidiaDisplayHandle);    NvAPI_GetDVCInfoEx = (NvAPI_GetDVCInfoEx_t)(*NvAPI_QueryInterface)(_NvAPI_GetDVCInfoEx);    NvAPI_SetDVCLevelEx = (NvAPI_SetDVCLevelEx_t)(*NvAPI_QueryInterface)(_NvAPI_SetDVCLevelEx);    _NvAPI_Status status = (_NvAPI_Status)(*NvAPI_Initialize)();    if (status != NVAPI_OK)    {        std::cerr << "NvAPI initialization failed." << std::endl;        return false;    }    return true;}

          其中以下劃線開頭的枚舉名字是每個函數在 dll 中的對應地址,這些是寫死的,如下所示:

          enum NvAPIs{    _NvAPI_Initialize = 0x150E828,    _NvAPI_EnumNvidiaDisplayHandle = 0x9ABDD40D,    _NvAPI_GetAssociatedNvidiaDisplayName = 0x22A78B05,    _NvAPI_GetDVCInfoEx = 0x0E45002D,    _NvAPI_SetDVCLevelEx = 0x4A82C2B1};

          你可能會問,你怎么知道這些函數地址的?其實我也是搜索到的,也看了以前 NvAPI 老版本提供的代碼,可以搜索到相關痕跡。點擊查看此文件里面有完整的所有函數地址。

          3)獲取和設置數字振動

          得到了各個函數的地址,我們就可以設置數字振動值了,代碼如下:

          bool NvController::SetDVCLevelEx(int nDisp, int level){    int NvDispHandle;    if (EnumNvidiaDisplayHandle(nDisp, &NvDispHandle) != 0)    {        NV_DISPLAY_DVC_INFO_EX oldInfo = GetDvcInfoEx(nDisp);        NV_DISPLAY_DVC_INFO_EX info;        info.version = oldInfo.version;        info.currentLevel = level;        info.minLevel = oldInfo.minLevel;        info.maxLevel = oldInfo.maxLevel;        info.defaultLevel = oldInfo.defaultLevel;        _NvAPI_Status status = (_NvAPI_Status)(*NvAPI_SetDVCLevelEx)(NvDispHandle, 0, &info);        if (status != NVAPI_OK)        {            return false;        }        return true;    }    return false;}

          我們首先獲得用戶傳入的顯示器編號所對應的句柄,然后根據這個句柄獲取當前數字振動的數值,然后修改其 currentLevel 成員數值來設置數字振動效果。這樣處理后就可以使用了。代碼參考地址:https://github.com/nmgwddj/nvapi-example

          Post Views: 5

          相關

          標簽:nvapi.dll-

          網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...

          在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...

          在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...

          手機上有按鍵精靈嗎,怎么下載?三星手機下載軟件為您提供以下方法。請參考:1.通過手機中的app store搜索需要的軟件并下載安裝。2.通過手機瀏覽器(自己的瀏覽器,下載的安裝包保存在我的文件-下載文件夾)搜索需要的軟件下載和安裝。3.通過第三方助手軟件下載并安裝所需程序。4.通過電腦下載APK格式的安裝包,然后傳輸到手機上進行安裝。新天龍八部按鍵精靈能用嗎?可以使用。新《天龍八部》不禁止使用腳...

          1922年汕頭臺風的介紹?1922年臺風汕頭是1922年太平洋臺風季的熱帶氣旋。這場風暴于7月27日形成,8月3日消散,持續了一周。這次臺風對菲律賓和造成了損害,特別是汕頭,造成了嚴重的生命和經濟財產損失,因此被氣象局列為20世紀十大氣象災害。汕頭遭遇過的臺風有哪些?1922年8月2日,太平洋臺風在廣東汕頭登陸。晚上9點,臺風登陸,撼山撼山,樹連根拔起,屋毀人亡。3日凌晨3時,風力加大到12級,潮...

          沈陽廣全中學報名需要什么條件?沈陽市廣泉中學只要有學籍和初中都可以報名。廣泉沖蕩是一所民辦高中,省級高級示范中學。這個學校的軟硬件條件不錯,但是學費不低。廣全中學高中部在沈陽排名?高級中學在沈陽排名靠前,廣泉中學也是非常有名的民辦中學。它的教學質量很好,高考升學率很高,所以在沈陽的排名是名列前茅的。沈陽廣泉中學建立時間?沈陽市廣泉中學創建于1993年,是沈陽市一所歷史悠久的民辦中學,也是沈陽市升學...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>