因爲最近要學這方面的東西,就在網上找嘍,結果發現這個類。感謝那個人啊
// Registry.cpp : implementation file // #include "stdafx.h" #include "Registry.h" ///////////////////////////////////////////////////////////////////////////// // CRegistry CRegistry::CRegistry(HKEY hKey) { m_hKey=hKey; } CRegistry::~CRegistry() { Close(); } ///////////////////////////////////////////////////////////////////////////// // CRegistry Functions BOOL CRegistry::CreateKey(LPCTSTR lpSubKey) { ASSERT(m_hKey); ASSERT(lpSubKey); HKEY hKey; DWORD dw; long lReturn=RegCreateKeyEx(m_hKey,lpSubKey,0L,NULL,REG_OPTION_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,&dw); if(lReturn==ERROR_SUCCESS) { m_hKey=hKey; return TRUE; } return FALSE; } BOOL CRegistry::Open(LPCTSTR lpSubKey) { ASSERT(m_hKey); ASSERT(lpSubKey); HKEY hKey; long lReturn=RegOpenKeyEx(m_hKey,lpSubKey,0L,KEY_ALL_ACCESS,&hKey); if(lReturn==ERROR_SUCCESS) { m_hKey=hKey; return TRUE; } return FALSE; } void CRegistry::Close() { if(m_hKey) { RegCloseKey(m_hKey); m_hKey=NULL; } } BOOL CRegistry::DeleteValue(LPCTSTR lpValueName) { ASSERT(m_hKey); ASSERT(lpValueName); long lReturn=RegDeleteValue(m_hKey,lpValueName); if(lReturn==ERROR_SUCCESS) return TRUE; return FALSE; } BOOL CRegistry::DeleteKey(HKEY hKey, LPCTSTR lpSubKey) { ASSERT(hKey); ASSERT(lpSubKey); long lReturn=RegDeleteValue(hKey,lpSubKey); if(lReturn==ERROR_SUCCESS) return TRUE; return FALSE; } BOOL CRegistry::Write(LPCTSTR lpSubKey, int nVal) { ASSERT(m_hKey); ASSERT(lpSubKey); DWORD dwValue; dwValue=(DWORD)nVal; long lReturn=RegSetValueEx(m_hKey,lpSubKey,0L,REG_DWORD,(const BYTE *) &dwValue,sizeof(DWORD)); if(lReturn==ERROR_SUCCESS) return TRUE; return FALSE; } BOOL CRegistry::Write(LPCTSTR lpSubKey, DWORD dwVal) { ASSERT(m_hKey); ASSERT(lpSubKey); long lReturn=RegSetValueEx(m_hKey,lpSubKey,0L,REG_DWORD,(const BYTE *) &dwVal,sizeof(DWORD)); if(lReturn==ERROR_SUCCESS) return TRUE; return FALSE; } BOOL CRegistry::Write(LPCTSTR lpValueName, LPCTSTR lpValue) { ASSERT(m_hKey); ASSERT(lpValueName); ASSERT(lpValue); long lReturn=RegSetValueEx(m_hKey,lpValueName,0L,REG_SZ,(const BYTE *) lpValue,strlen(lpValue)+1); if(lReturn==ERROR_SUCCESS) return TRUE; return FALSE; } BOOL CRegistry::Read(LPCTSTR lpValueName, int* pnVal) { ASSERT(m_hKey); ASSERT(lpValueName); ASSERT(pnVal); DWORD dwType; DWORD dwSize=sizeof(DWORD); DWORD dwDest; long lReturn=RegQueryValueEx(m_hKey,lpValueName,NULL,&dwType,(BYTE *)&dwDest,&dwSize); if(lReturn==ERROR_SUCCESS) { *pnVal=(int)dwDest; return TRUE; } return FALSE; } BOOL CRegistry::Read(LPCTSTR lpValueName, DWORD* pdwVal) { ASSERT(m_hKey); ASSERT(lpValueName); ASSERT(pdwVal); DWORD dwType; DWORD dwSize=sizeof(DWORD); DWORD dwDest; long lReturn=RegQueryValueEx(m_hKey,lpValueName,NULL,&dwType,(BYTE *)&dwDest,&dwSize); if(lReturn==ERROR_SUCCESS) { *pdwVal=dwDest; return TRUE; } return FALSE; } BOOL CRegistry::RestoreKey(LPCTSTR lpFileName) { ASSERT(m_hKey); ASSERT(lpFileName); long lReturn=RegRestoreKey(m_hKey,lpFileName,REG_WHOLE_HIVE_VOLATILE); if(lReturn==ERROR_SUCCESS) return TRUE; return FALSE; } BOOL CRegistry::SaveKey(LPCTSTR lpFileName) { ASSERT(m_hKey); ASSERT(lpFileName); long lReturn=RegSaveKey(m_hKey,lpFileName,NULL); if(lReturn==ERROR_SUCCESS) return TRUE; return FALSE; } BOOL CRegistry::Read(LPCTSTR lpValueName, CString* lpVal) { ASSERT(m_hKey); ASSERT(lpValueName); ASSERT(lpVal); DWORD dwType; DWORD dwSize=200; char szString[2550]; long lReturn=RegQueryValueEx(m_hKey,lpValueName,NULL,&dwType,(BYTE *)szString,&dwSize); if(lReturn==ERROR_SUCCESS) { *lpVal=szString; return TRUE; } return FALSE; }
#if !defined(AFX_REGISTRY_H__E0610A5D_7166_4D02_9D7E_11AF7CF8E229__INCLUDED_) #define AFX_REGISTRY_H__E0610A5D_7166_4D02_9D7E_11AF7CF8E229__INCLUDED_ // #include <winreg.h> ///////////////////////////////////////////////////////////////////////////// // CRegistry window class CRegistry : public CObject { // Construction public: CRegistry(HKEY hKey=HKEY_LOCAL_MACHINE); public: BOOL SaveKey(LPCTSTR lpFileName); BOOL RestoreKey(LPCTSTR lpFileName); BOOL Read(LPCTSTR lpValueName, CString* lpVal); BOOL Read(LPCTSTR lpValueName, DWORD* pdwVal); BOOL Read(LPCTSTR lpValueName, int* pnVal); BOOL Write(LPCTSTR lpSubKey, LPCTSTR lpVal); BOOL Write(LPCTSTR lpSubKey, DWORD dwVal); BOOL Write(LPCTSTR lpSubKey, int nVal); BOOL DeleteKey(HKEY hKey, LPCTSTR lpSubKey); BOOL DeleteValue(LPCTSTR lpValueName); void Close(); BOOL Open(LPCTSTR lpSubKey); BOOL CreateKey(LPCTSTR lpSubKey); virtual ~CRegistry(); protected: HKEY m_hKey; }; ///////////////////////////////////////////////////////////////////////////// #endif // !defined(AFX_REGISTRY_H__E0610A5D_7166_4D02_9D7E_11AF7CF8E229__INCLUDED_)
1)編碼 消息長度(short int-->2個字節) + 消息編號(short int--》2個字節) + 消息體 2)Protobuf協議文檔 (1)syntax="proto3"; (2)命名格式
背景 v4 中使用了鏈表存儲了不同大小的內存塊的方式進行內存池的實現(參考這篇v4內存複用機制),實際測試中發現內存浪費比較嚴重,因此如何設計出使用效率高,操作簡潔的內存池就成了 v5 的一個任務。 使用 make 使用 go 原生的內存分
作者:vivo 互聯網大前端團隊 - Ma Lian 本文主要描述了FileProvider,startAnyWhere實現,Parcel不對稱漏洞以及這三者結合產生的漏洞利用實戰,另外闡述了漏洞利用的影響和修復預防措施,這個漏洞波及了
本文分享自華爲雲社區《GaussDB SQL基本語法示例-CASE表達式》,作者:Gauss松鼠會小助手2。 一、前言 SQL是用於訪問和處理數據庫的標準計算機語言。GaussDB支持SQL標準(默認支持SQL2、SQL3和SQL4的主要
Impala目前支持Hadoop中幾種常見的文件格式 Parquet 、 ORC 、 Text 、 Avro 、 RCFile 和 SequenceFile 。下面簡要說明各種格式的使用、限制和一些注意事項。 不同的文件格式有着不同的適用場
本文分享自華爲雲社區《GaussDB SQL基礎語法示例-BOOLEAN表達式》,作者:Gauss松鼠會小助手2。 一、前言 SQL是用於訪問和處理數據庫的標準計算機語言。GaussDB支持的SQL標準(默認支持SQL2、SQL3和SQL
Map是用於保存具有映射關係的數據集合,它具有雙列存儲的特點,即一次必須添加兩個元素,即一組鍵值對<Key,Value>,其中Key的值不可重複(當Key的值重複的時候,後面插入的對象會將之前插入的具有相同的Key值的對象覆蓋掉),Valu
前端面試題 - null是原始類型,但爲什麼typeof null的結果是object? 造成這個結果的原因是null的內存地址是以000開頭,而js會將000開頭的內存地址視爲object。 通過isNull()來判斷一個值是不是null
DHTMLX Suite UI 組件庫允許您更快地構建跨平臺、跨瀏覽器 Web 和移動應用程序。它包括一組豐富的即用式 HTML5 組件,這些組件可以輕鬆組合到單個應用程序界面中。 DHTMLX Gantt是用於跨瀏覽器和跨平臺應用程序的功
本文分享自華爲雲社區《GaussDB(DWS)向量化執行引擎詳解》,作者: yd_212508532。 前言 適用版本:【基線功能】 傳統的行執行引擎大多采用一次一元組的執行模式,這樣在執行過程中CPU大部分時間並沒有用來處理數據,更
SpringBoot如何優雅的進行參數校驗 一.爲什麼要進行參數校驗 在日常的開發過程中,我們常常需要對傳入的參數進行校驗,比如在web前後端分離項目中,參數校驗有兩個方面: 前端進行參數校驗 後端進行參數校驗 那這兩種
結構特點 List 和 Set 是存儲單列數據的集合,Map 是存儲鍵和值這樣的雙列數據的集合;List 中存儲的數據是有順序,並且允許重複;Map 中存儲的數據是沒有順序的,其鍵是不能重複的,它的值是可以有重複的,Set 中存儲的數據
本文分享自華爲雲社區《Spring高手之路17——動態代理的藝術與實踐》,作者: 磚業洋__。 1. 背景 動態代理是一種強大的設計模式,它允許開發者在運行時創建代理對象,用於攔截對真實對象的方法調用。這種技術在實現面向切面編程(AOP)
在 Vue3 中,可以使用 reactive 函數創建響應式對象。這些響應式對象可以跟蹤其屬性的變化並且自動地更新視圖。但是在某些情況下,我們可能需要清空這些響應式對象。下面是一些方法來清空 Vue3 reactive。 方法一:使用 Ob
通過一個案例瞭解 not in 對 NULL 值敏感的處理邏輯和優化方法。 作者:胡呈清,愛可生 DBA 團隊成員,擅長故障分析、性能優化,個人博客:[簡書 | 輕鬆的魚],歡迎討論。 愛可生開源社區出品,原創內容未經授權不得隨意使用,轉