讀寫登錄檔

Posted: 五月 9, 2008 in 技術相關
標籤:,

揭開登錄檔神秘的面紗 !!

哈 其實也沒這麼神秘啦 … 但登錄檔 對大家來說總是一個相當陌生

相當 … 罕於接觸的區域 … 但那邊卻藏有許多安裝軟體的一些設定值 …

譬如說 每次開機後 到底有哪些程式會被 Windows 給帶起來 就可以去

HKEY_CURRENT_USER\software\Microsoft\Windows\CurrentVersion\Run

來找出來 … 並且予以新增/修改 ..

至於要如何開啟 [登錄編輯程式] 請在 “執行" 處 Key 入 “regedit" 即可 …

那今天要介紹的呢 是如何是新增 & 讀寫 RegisterKey 的內容

產生 Register 目錄的方式為

LONG RegCreateKey(

HKEY hKey, // handle to an open key

LPCTSTR lpSubKey, // address of name of subkey to open

PHKEY phkResult // address of buffer for opened handle );

其中 hKey 代表要輸入的機碼位置, lpSubKey 則是其下的路徑名稱, phkResult 則為開啟的 handle 位置

下列為簡易範例 …


RegCreateKey(HKEY_LOCAL_MACHINE, REGISTER_PATH, &hk);

其中 REGISTER_PATH 是 pre-define 好的 路徑 如下所示

#define “SOFTWARE\\Test\\TestProgram\\1.00″

而 Register 目錄產生好後 … 則是要在該目錄下 產生所需之值 …

產生方式如下所示

LONG RegSetValueEx( HKEY hKey, // handle to key to set value for

LPCTSTR lpValueName, // name of the value to set

DWORD Reserved, // reserved

DWORD dwType, // flag for value type

CONST BYTE *lpData, // address of value data

DWORD cbData // size of value data );

其中 HKEY 為上述建立目錄時所取得之 handle, lpValueName 則為要建立的內容名稱,

Reserved 一般都是塞 ZERO, dwType 則是輸入值之型態, lpData 則為 實際內容, cbData 為其內容之長度

如下例所示 …


RegSetValueEx(hk, "KeyExist", 0, REG_SZ, (LPBYTE) szBuf, strlen(szBuf) + 1);

上述之方式都是新增/修改登錄檔之內容 … 那如果是要讀取時 又要用哪個函式呢 !?

則如下所示 …

DWORD SHGetValue( HKEY hkey,

LPCTSTR pszSubKey,

LPCTSTR pszValue,

LPDWORD pdwType,

LPVOID pvData,

LPDWORD pcbData );

舉例來說

  DWORD dwType=REG_SZ, dwLen=MAX_PATH;
  char tszAC[MAX_PATH];
  DWORD ret;

ret=SHGetValue(HKEY_LOCAL_MACHINE,CLIENT_SERVER_VER_REG_KEY,"KeyExist",&dwType,tszAC,&dwLen);

則可以藉由 tszAC 得到回傳值 …

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s