• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            C++ Programmer's Cookbook

            {C++ 基礎} {C++ 高級} {C#界面,C++核心算法} {設計模式} {C#基礎}

            vc中讀寫注冊表

             Win 95及NT的注冊數據庫(Registry) 是系統中非常重要的組成部分。在Win32 API中有一組Reg函數來處理這些問題。其一般的讀寫過程如下:
             
                1、使用RegOpenKeyEx或RegCreateKeyEx函數打開或創建一個鍵; 
                2、如果上一步成功,使用RegQueryValueEx讀取子鍵的值,使用RegSetValueEx設置子鍵值,使用RegEnumKey獲得所有子鍵,使用RegDeleteKey刪除一個鍵; 
                3、完成操作后使用RegCloseKey關閉鍵。 
                下面這段程序打開HKEY_CURRENT_USER\Software\Zeal SoftStudio\AskPro FTP\LastTime鍵,然后讀取WOL子鍵的值。 

                HKEY hkey; 
                char sz[256]; 
                DWORD dwtype, sl = 256; 
                 
                RegOpenKeyEx(HKEY_CURRENT_USER, 
                "Software\\Zeal SoftStudio\\AskPro FTP\\LastTime", 
                NULL, KEY_ALL_ACCESS, &hkey); 
                RegQueryValueEx(hkey, "WOL", NULL, &dwtype, (LPBYTE)sz, &sl); 
                RegCloseKey(hkey); 
                MFC程序可以使用CRegKey類讀寫注冊表。VB中調用API的辦法可以參考QA000226 "如何訪問Windows系統注冊表"。

                打開注冊鍵
                LONG RegOpenKeyEx( HKEY hKey,  // handle to open key 

                LPCTSTR lpSubKey,              // address of name of subkey to open 
                DWORD ulOptions,               // reserved =0
                REGSAM samDesired,             // security access mask 
                PHKEY phkResult                // address of handle to open key 
                );

                例:
                HKEY hd;
                hd=HKEY_LOCAL_MACHINE;
                char* Regkeyname="SoftWare\\Xy123\\Poker\\";
                LONG a=RegOpenKeyEx(hd,Regkeyname,0,KEY_READ, &hd);   //成功返回ERROR_SUCCESS,否則返回錯誤代碼
             

                關閉注冊鍵
                LONG RegCloseKey( HKEY hKey // handle to key to close );
            例:
                 RegCloseKey(HKEY_LOCAL_MACHINE);
            OR:  RegCloseKey(hd); 
            建立注冊鍵
            LONG RegCreateKeyEx( HKEY hKey, // handle to an open key 
                  LPCTSTR lpSubKey, // address of subkey name 
                  DWORD Reserved, // reserved =0
                  LPTSTR lpClass, // address of class string 
                  DWORD dwOptions, // special options flag 
                  REGSAM samDesired, // desired security access 

                  LPSECURITY_ATTRIBUTES lpSecurityAttributes, // address of key security         structure 
                  PHKEY phkResult, // address of buffer for opened handle 
                  LPDWORD lpdwDisposition // address of disposition value buffer );
            例:
               char *sclass="";  //類名指定為空
               DWORD nbf=0;    //接受返回值,指明是建立新鍵還是打開已有的鍵.(經試驗總是返回REG_OPENED_EXISTING_KEY.
               LONG II=RegCreateKeyEx(hd,Regkeyname,0,sclass,REG_OPTION_NON_VOLATILE,
                            KEY_READ|KEY_WRITE,NULL,&hd,&nbf);

            //REG_OPTION_NON_VOLATILE 指明鍵永久保留.安全結構指明NULL,自動獲得一默認值
            //成功返回ERROR_SUCCESS,否則返回錯誤代碼 
            枚舉鍵值
            LONG RegEnumValue( HKEY hKey, // handle to key to query 
                  DWORD dwIndex, // index of value to query 
                  LPTSTR lpValueName, // address of buffer for value string 
                  LPDWORD lpcbValueName, // address for size of value buffer 
                  LPDWORD lpReserved, // reserved =NULL
                  LPDWORD lpType, // address of buffer for type code 

                  LPBYTE lpData, // address of buffer for value data 
                  LPDWORD lpcbData // address for size of data buffer);
            例:
               DWORD dinx=0;
               char valuename[70];  //分配數值名稱緩沖區
               strcpy(valuename,"DeskPattern");  //隨便指定哪個鍵值名
               DWORD nsize=69;  //數值名稱緩沖區大小
               DWORD k=REG_SZ;  //指明數據類型
               unsigned char vari[70]; //分配數值緩沖區
               DWORD ncbvari=69; //數值緩沖區大小
               dinx=0; //從0開始

               while((II=RegEnumValue(hd,dinx,valuename,&nsize,NULL,&k,vari,&ncbvari)) 
                      != ERROR_NO_MORE_ITEMS)
               {
                   dinx++;//索引 +1,準備取下一個值
                   nsize=69; //恢復原來大小
                   ncbvari=69;
               }
            成功后返回值0,各變量返回后設置如下:
            valuename=數值名稱,以0結尾;如 : DeskColor
            nsize=數值名稱長度, 9
            k=REG_SZ  DeskColor 的類型為 REG_SZ
            vari=鍵值,32768 DeskColor="32768",
            ncbvari=鍵值長度 REG_SZ包括結尾0,=6, 
            讀取鍵值
            LONG RegQueryValueEx( HKEY hKey, // handle to key to query 

                   LPTSTR lpValueName, // address of name of value to query 
                   LPDWORD lpReserved, // reserved 
                   LPDWORD lpType, // address of buffer for value type 
                   LPBYTE lpData, // address of data buffer 
                   LPDWORD lpcbData // address of data buffer size );
            例:
               RegQueryValueEx(hd,valuename,NULL,&k,vari,&ncbvari);
            變量定義及成功后各變量設置值同RegEnumValueEx 
            寫鍵值
            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 );
            例:
               strcpy(valuename,"Hello");
               unsigned char vari[10];
               DWORD k=REG_SZ;
               strcpy((char*)vari,"1234567")
               RegSetValueEx(hd,valuename,0,k,vari,7);
            成功后在Poker下增加一個鍵值 Hello : REG_SZ : 1234567
            寫整型變量:
            int hi=8;
            RegSetValueEx(pj,valuename,0,REG_BINARY,(unsigned char*)&hi,sizeof(int));

            成功后在Poker下增加一個鍵值 Hello2 : REG_BINARY :08 00 00 00



            void AddEventSource()
            {
                HKEY hk; 
                DWORD dwData; 
                UCHAR szBuf[80]; 

                // Add your source name as a subkey under the Application 
                // key in the EventLog registry key. 

                if (RegCreateKey(HKEY_LOCAL_MACHINE, 
                        "SYSTEM\\CurrentControlSet\\Services\ 
                        \\EventLog\\Application\\SamplApp", &hk)) 
                    ErrorExit("Could not create the registry key."); 

                // Set the name of the message file. 

                strcpy(szBuf, "%SystemRoot%\\System\\SamplApp.dll"); 

                // Add the name to the EventMessageFile subkey. 

                if (RegSetValueEx(hk,             // subkey handle 
                        "EventMessageFile",       // value name 
                        0,                        // must be zero 
                        REG_EXPAND_SZ,            // value type 
                        (LPBYTE) szBuf,           // pointer to value data 
                        strlen(szBuf) + 1))       // length of value data 

                    ErrorExit("Could not set the event message file."); 

                // Set the supported event types in the TypesSupported subkey. 

                dwData = EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE | 
                    EVENTLOG_INFORMATION_TYPE; 

                if (RegSetValueEx(hk,      // subkey handle 
                        "TypesSupported",  // value name 
                        0,                 // must be zero 
                        REG_DWORD,         // value type 
                        (LPBYTE) &dwData,  // pointer to value data 

                        sizeof(DWORD)))    // length of value data 
                    ErrorExit("Could not set the supported types."); 

                RegCloseKey(hk); 




            以下代碼把注冊表自啟動shell的鍵值改寫為C:\DK1\ATM\HARP\ExAtmShell.exe:

                     HKEY hkey;
            LONG res; 
            DWORD datatype=REG_SZ; 
            unsigned char szvalue[_MAX_PATH];
            strcpy((char*)szvalue,"C:\\DK1\\ATM\\HARP\\ExAtmShell.exe");

            res =::RegOpenKeyEx(HKEY_LOCAL_MACHINE, 
            "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\", 0, 
            KEY_WRITE|KEY_READ, &hkey); 

            if(res!=ERROR_SUCCESS)
            {
            AfxMessageBox("aaa");
            return;
            }
            res = ::RegSetValueEx(hkey, "Shell", 0, datatype, szvalue, strlen(LPCSTR(szvalue))); 

            RegCloseKey(hkey);
            if(res==ERROR_SUCCESS)
            ::AfxMessageBox("你已經成功地將注冊表自啟動shell的鍵值設置為C:\\DK1\\ATM\\HARP\\ExAtmShell.exe");
            else
            ::AfxMessageBox("設定失敗:目標位置不存在這樣的鍵!");

            posted on 2005-12-24 14:40 夢在天涯 閱讀(8094) 評論(3)  編輯 收藏 引用 所屬分類: CPlusPlusMFC/QT

            評論

            # 上海租車 2007-07-25 15:50 上海租車

            http://www.modeluc.com 模型
            http://www.htte.cn/ 電爐 網
            http://www.dianlu.sh.cn/ 電爐 網
            http://www.zingfull.com/ 辦公室裝修   回復  更多評論   

            # led顯示屏報價 2009-08-20 15:55 toto899

            LED電子顯示屏是集光電子技術、微電子技術、計算機技術、信息處理等技術于一體的大型電子顯示屏系統。
            提供各種led顯示屏報價。
            led顯示屏報價http://www.linso.com.cn/ledbj.htm
              回復  更多評論   

            # re: vc中讀寫注冊表 2009-09-08 09:05 陳s

            溫控儀表
            http://www.yyqyshow.com/thybsub-XMT8008KWendushiyanxiangRs485.html  回復  更多評論   

            公告

            EMail:itech001#126.com

            導航

            統計

            • 隨筆 - 461
            • 文章 - 4
            • 評論 - 746
            • 引用 - 0

            常用鏈接

            隨筆分類

            隨筆檔案

            收藏夾

            Blogs

            c#(csharp)

            C++(cpp)

            Enlish

            Forums(bbs)

            My self

            Often go

            Useful Webs

            Xml/Uml/html

            搜索

            •  

            積分與排名

            • 積分 - 1808097
            • 排名 - 5

            最新評論

            閱讀排行榜

            亚洲伊人久久精品影院| 久久人人爽人人爽人人AV| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 亚洲精品乱码久久久久66| 色综合久久综合中文综合网| 精品久久久久久久| 亚洲精品NV久久久久久久久久| 噜噜噜色噜噜噜久久| 99久久成人国产精品免费 | 中文字幕人妻色偷偷久久| 丰满少妇人妻久久久久久| 久久亚洲天堂| 青青热久久综合网伊人| 无码伊人66久久大杳蕉网站谷歌 | 亚洲国产精品成人久久蜜臀| 一本久久a久久精品亚洲| 精品久久久久久无码免费| 国产精品久久久久久久| 色综合久久中文字幕无码| 久久黄视频| 99久久精品这里只有精品| 久久精品国产亚洲精品2020| 中文字幕无码久久精品青草| 国产—久久香蕉国产线看观看| 久久久精品2019免费观看| 久久精品国产99国产精品导航| 九九热久久免费视频| 成人a毛片久久免费播放| 久久伊人精品青青草原高清| 久久精品人人槡人妻人人玩AV| 欧美日韩精品久久免费| 国产精品久久久久久久app | 777米奇久久最新地址| 无码人妻久久一区二区三区| 97精品依人久久久大香线蕉97| 久久亚洲国产精品123区| 久久久久久青草大香综合精品 | 中文字幕无码免费久久| 模特私拍国产精品久久| 久久婷婷人人澡人人爽人人爱| 人人妻久久人人澡人人爽人人精品|