程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++注冊表操作,注冊表操作

C++注冊表操作,注冊表操作

編輯:C++入門知識

C++注冊表操作,注冊表操作


數據結構

注冊表由鍵(或稱"項")、子鍵(子項)和值項構成.一個鍵就是分支中的一個文件夾,而子鍵就是這個文件夾中的子文件夾,子鍵同樣是一個鍵.一個值項則是一個鍵的當前定義,由名稱、數據類型以及分配的值組成.一個鍵可以有一個或多個值,每個值的名稱各不相同,如果一個值的名稱為空,則該值為該鍵的默認值.

數據類型

注冊表的數據類型主要有以下四種:
顯示類型(在編輯器中)   數據類型    說明                   
REG_SZ          字符串     文本字符串
REG_MULTI_SZ       多字符串    含有多個文本值的字符串
REG_BINARY         二進制數    二進制值,以十六進制顯示.
REG_DWORD        雙字      一個32位的二進制值,顯示為8位的十六進制值.

各主鍵的簡單介紹

    • HKEY_LOCAL_MACHINE  是一個顯示控制系統和軟件的處理鍵.HKLM鍵保存著計算機的系統信息.它包括網絡和硬件上所有的軟件設置.
    • HKEY_CLASSES_ROOT  是系統中控制所有數據文件的項.
    • HKEY_USERS  將缺省用戶和目前登陸用戶的信息輸入到注冊表編輯器
    • HKEY_CURRENT_USER  包含著在HKEY_USERS安全辨別裡列出的同樣信息
    • HKEY_CURRENT_CONFIG  包括了系統中現有的所有配置文件的細節.HKEY_CURRENT_CONFIG允許軟件和設備驅動程序員很方便的更新注冊表,而不涉及到多個配置文件信息. HKEY_LOCAL_MACHINE中同樣的數據和任何注冊表的變化都會同時的變化.
---------------------------------------------------------------------------------------------------------------------------------------------------
參考網頁http://www.cnblogs.com/kzloser/archive/2012/11/07/2758404.html


添加開機啟動程序

#include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <strings.h> #include <windows.h> #include <cstdlib> using namespace std; int main() { HKEY hKey; LPCTSTR lpRun = "Software\\Microsoft\\Windows\\CurrentVersion\\Run"; DWORD state,dwtype,sizeBuff; long lRet; char reBuff[10] = {0}; cout<<"輸入0或者1.執行操作.1插入0刪除"<<endl; int operatorNum; cin>>operatorNum; cout<<operatorNum<<endl; cout<<"======================================================================="<<endl; /** LONG RegCreateKeyEx( HKEY hKey, // 主鍵名稱 LPCWSTR lpSubKey,// 子鍵名稱或路徑 DWORD Reserved, //0 保留字段,默認設置為0 LPWSTR lpClass, // 一般設置為NULL DWORD dwOptions, //對你建立的鍵的一些選項,可以是這些值:REG_OPTION_NON_VOLATILE,REG_OPTION_VOLATILE,REG_OPTION_BACKUP_RESTORE第一個是默認的了。一般用第一個就可以了。 REGSAM samDesired,// 設置你對你建立的這個鍵的訪問權限Ignored. Set to zero to ensure compatibility with future versions of Windows Mobile. LPSECURITY_ATTRIBUTES lpSecurityAttributes, //一般設置為NULL PHKEY phkResult, // 返回新建注冊表項的句柄 LPDWORD lpdwDisposition//用來查看是打開一個已經有的鍵,還是新建了鍵 ); 解釋:打開指定的鍵或子鍵。如果要打開的鍵不存在的話,本函數會試圖建立它。 當在創建或打開注冊表的鍵時,需要指定訪問權限,而這些訪問權限需要到一級。 默認的權限是KEY_ALL_ACCESS權限。 還有KEY_CREATE_LINK創建字符鏈權限, KEY_CREATE_SUB_KEY創建子鍵權限, KEY_EXECUTE讀取鍵權限, KEY_NOTIFY獲得修改鍵通知的權限, KEY_QUERY_VALUE查詢鍵值的權限, KEY_SET_VALUE設置數據值的權限。 注意不能在根一級建鍵,在注冊表的根一級僅可有預定義的鍵。具體使用,請查看聯機手冊。 */ //https://msdn.microsoft.com/zh-cn/aa911940 if(operatorNum==1){ lRet = RegCreateKeyEx(HKEY_CURRENT_USER,lpRun,0,NULL,0,0,NULL,&hKey,&state); if(lRet == ERROR_SUCCESS) { if(state == REG_CREATED_NEW_KEY) cout<<"create ok"<<endl; RegCloseKey(hKey); }else{ cout<<"create fail"<<endl; } /* LONG RegOpenKeyEx( HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, //Reserved. Set to zero.保留字段,默認設置為0 REGSAM samDesired, //Not supported. Set to zero. PHKEY phkResult // Pointer to a variable that receives a handle to the opened key. When you no longer need the returned handle, call the RegCloseKey function to close it. ); */ /* LONG RegSetValueEx( HKEY hKey, LPCWSTR lpValueName,//輸入 DWORD Reserved,//Reserved. Must be set to zero. DWORD dwType,//Type of information to be stored as the value data const BYTE* lpData,//[in] Pointer to a buffer that contains the data to be stored with the specified value name. DWORD cbData//[in] Size, in bytes, of the information pointed to by lpData. If the data is of type REG_SZ, REG_EXPAND_SZ, or REG_MULTI_SZ, This parameter must include the size of the terminating null character. The maximum size of data allowed is 4 KB. ); */ lRet= RegOpenKeyEx(HKEY_CURRENT_USER, lpRun, 0, KEY_WRITE, &hKey); if(lRet == ERROR_SUCCESS) { cout<<"open ok"<<endl; //RegSetValueEx(hKey, "mgtest",0,REG_SZ,(BYTE *)"success",10); //RegSetValueEx(hKey, "mgtest",0,REG_SZ,(BYTE *)"C:\\windows\\system32\\notepad.exe",strlen("C:\\windows\\system32\\notepad.exe")*2); long temp= RegSetValueEx(hKey, "mgtest",0,REG_SZ,(BYTE *)"C:\\windows\\system32\\notepad.exe",strlen("C:\\windows\\system32\\notepad.exe")*2); if(temp!=ERROR_SUCCESS){ cout<<"set fail"<<endl; }else{ cout<<"set ok"<<endl; } RegCloseKey(hKey); }else{ cout<<"open fail"<<endl; } }else { lRet = RegOpenKeyEx(HKEY_CURRENT_USER, lpRun, 0, KEY_WRITE, &hKey); if(lRet==ERROR_SUCCESS) { cout<<"open ok"<<endl; //刪除鍵 long temp=RegDeleteValue(hKey,"mgtest"); if(temp!=ERROR_SUCCESS){ cout<<"del fail"<<endl; }else{ cout<<"del ok"<<endl; } //關閉鍵 RegCloseKey(hKey); }else{ cout<<"open fail"<<endl; } } getchar(); return 0; }
紅色背景的為開機啟動程序所在路徑

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved