一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

注冊表編程

 JP_Morgen 2014-05-18

接著昨天的折騰。

首先介紹一下 擴展名子鍵 和 類定義子鍵

擴展名子鍵由 "." + 相應擴展名構成 ,該子鍵的鍵值項的作用是指向一個“類定義子鍵”,起入口作用。 多個擴展名子鍵可以指向同一個類定義子鍵。

這樣做其實就是面向對象的思維了。

舉個例子來說,擴展名子鍵是.MP1    .MP2     .MP3

他們都指向類定義子鍵MP3FILE,那么只要定義MP3FILE里面的鍵值就可以對所有的擴展名子鍵應用了。

 

知道了這個概念以后我們可以實現(xiàn)用第二種方法更改關聯(lián)了:

通過 修改擴展名子鍵對應的類定義子鍵來修改關聯(lián)

舉個例子,原來.exe 默認的鍵值是 EXEFILE 說明它關聯(lián)的是EXEFILE, 如果我們將它改成TXTFILE, 自然就修改了它的關聯(lián)方式。

 

然后說一下今天在修改txt關聯(lián)的時候遇到的一個問題:

本來是已經成功地更改了txt關聯(lián)了,但是在恢復的時候可能把鍵值的路徑寫錯了,沒有用\\來轉義\,這個時候我打開任意一個txt文件,系統(tǒng)讓我選擇默認的打開方式。我一不小心選擇了 始終用這種方式打開 接下來就出問題了。

不管我怎么修改關聯(lián),txt文件仍然能正常打開。

于是心里猜測:在注冊表里面肯定存在著優(yōu)先于上述路徑關聯(lián)文件的打開方式,由于默認打開的關聯(lián)優(yōu)先于上述路徑的關聯(lián),所以上述路徑下(見我的上一篇文章)設置的關聯(lián)不起作用了。

自己的電腦是32的win7.在控制面板里面可以看到默認打開方式的設置:

控制面板\程序\默認程序\設置關聯(lián)

修改這里可以修改關聯(lián),但是自己推測這里在修改的時候肯定是修改了注冊表某項的關聯(lián)。自己百度了一下暫時沒有查到這個路徑的資料。明天再看看。。。。

自己本來還想修改文件夾圖標所在的注冊表鍵值,百度了一下還是沒有找到。。明天繼續(xù)看一看。。。。。。。

最后把自己寫的半成品發(fā)個上來,記錄一下。

用的是SDK的對話框模版,所以只發(fā)主要代碼:

  1. // MachineDialog.cpp : 定義應用程序的入口點。  
  2. //  
  3.   
  4. #include "stdafx.h"  
  5. #include "MachineDialog.h"  
  6. #include "resource.h"  
  7. #include <commdlg.h>  
  8. #include <windowsx.h>  
  9. //增加開機自啟動項  
  10. int Add_Key(HWND hDlg, LPCTSTR filename);  
  11. // 刪除開機自啟動項  沒有完成  
  12. int Del_Key(HWND hDlg);  
  13. //更改IE默認主頁  
  14. int Change_IE_Mainpage(HWND hDlg);  
  15. //更改exe關聯(lián)   
  16. int Change_Exe_Rela(HWND hDlg);  
  17. //恢復exe關聯(lián)   
  18. int Change_Exe_Reco(HWND hDlg);  
  19. //更改txt關聯(lián)   
  20. int Change_Txt_Rela(HWND hDlg);  
  21. //恢復txt關聯(lián)   
  22. int Change_Txt_Reco(HWND hDlg);  
  23. //禁用注冊表  
  24. int Reg_Forbidden(HWND hDlg);  
  25. //恢復注冊表  
  26. int Reg_Reco(HWND hDlg);  
  27.   
  28. BOOL CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);  
  29.   
  30. int APIENTRY _tWinMain(HINSTANCE hInstance,  
  31.                      HINSTANCE hPrevInstance,  
  32.                      LPTSTR    lpCmdLine,  
  33.                      int       nCmdShow)  
  34. {  
  35.     DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, DlgProc );  
  36.     return 0;  
  37. }  
  38.   
  39. BOOL CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)  
  40. {  
  41.       
  42.       
  43.   
  44.     switch (message)    
  45.     {    
  46.     case WM_INITDIALOG:    
  47.         return TRUE;    
  48.   
  49.     case WM_COMMAND:    
  50.         switch (LOWORD(wParam))      
  51.         {  
  52.             case IDC_ADD_SECTION:  
  53.                 // 設置過濾器  
  54.                 OPENFILENAME ofn;  
  55.                 char szFile[100];  
  56.                 TCHAR szLength[50];  
  57.                 ZeroMemory(&ofn,sizeof(ofn));   //memset給結構體清零  
  58.                 ofn.lStructSize = sizeof(ofn);  
  59.                 ofn.lpstrFile = (LPWSTR)szFile;  
  60.                 ofn.lpstrFile[0] = TEXT('\0');  
  61.                 ofn.nMaxFile = sizeof(szFile);  
  62.                 ofn.lpstrFilter = TEXT("ALL\0*.*\0exe\0*.exe\0txt\0*.txt\0");           //過濾器設置  
  63.                 ofn.nFilterIndex = 1;                                       //默認選擇過濾器的序號  
  64.                 ofn.lpstrFileTitle = NULL;  
  65.                 ofn.nMaxFileTitle = 0;  
  66.                 ofn.lpstrInitialDir = NULL;  
  67.                 ofn.hwndOwner = hDlg;                                       //對話框的副窗口  
  68.                 ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST ;  
  69.                 if (GetOpenFileName(&ofn))  
  70.                 {  
  71.                     TCHAR shortPath[100];  
  72.                     memset(shortPath, 0, sizeof(shortPath));  
  73.                     GetShortPathName((LPWSTR)szFile, (LPWSTR)shortPath, sizeof(shortPath));  
  74.                     SetDlgItemText(hDlg, IDC_EDIT1, (LPWSTR)shortPath);  
  75.                     Add_Key(hDlg, (LPCTSTR)shortPath);  
  76.                 }  
  77.                 return 0;  
  78.                   
  79.   
  80.             case IDC_DEL_SECTION:  
  81.                 //Del_Key(hDlg);  
  82.                 return 0;  
  83.                   
  84.             case IDC_IE:  
  85.                 Change_IE_Mainpage(hDlg);  
  86.                 return 0;  
  87.   
  88.             case IDC_EXE_RELA:  
  89.                 Change_Exe_Rela(hDlg);  
  90.                 return 0;  
  91.   
  92.             case IDC_EXE_RECO:  
  93.                 Change_Exe_Reco(hDlg);  
  94.                 return 0;  
  95.   
  96.             case IDC_TXT_RELA:  
  97.                 Change_Txt_Rela(hDlg);  
  98.                 return 0;  
  99.   
  100.             case IDC_TXT_RECO:  
  101.                 Change_Txt_Reco(hDlg);  
  102.                 return 0;  
  103.   
  104.             case IDC_REG_FORBIDDEN:  
  105.                 Reg_Forbidden(hDlg);  
  106.                 return 0;  
  107.   
  108.             case IDC_REG_RECO:  
  109.                 Reg_Reco(hDlg);  
  110.                 return 0;  
  111.   
  112.             case IDC_EXIT:  
  113.                 EndDialog(hDlg, NULL);  
  114.   
  115.             default:  
  116.                 return 0;  
  117.         }  
  118.     }    
  119.     return FALSE;    
  120. }  
  121.   
  122. int Add_Key(HWND hDlg, LPCTSTR filename)  
  123. {  
  124.     HKEY hKey;  
  125.     LPCTSTR lpRun =  L"software\\Microsoft\\Windows\\CurrentVersion\\Run";  
  126.     //打開注冊表  
  127.     long result=RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpRun, 0, KEY_WRITE, &hKey);   
  128.     if(result==ERROR_SUCCESS)  
  129.     {  
  130.         MessageBox(hDlg, TEXT("成功打開注冊表項"), TEXT("成功"), MB_OK);  
  131.         //添加注冊表鍵值    
  132.         result=RegSetValueEx(hKey, L"greedy snake", 0, REG_SZ, (BYTE *)filename, 100);  
  133.         if (result == ERROR_SUCCESS)  
  134.         {  
  135.             MessageBox(hDlg, TEXT("成功添加注冊表鍵值"), TEXT("成功"), MB_OK);  
  136.         }  
  137.         else  
  138.         {  
  139.             MessageBox(hDlg, TEXT("添加注冊表鍵值失敗"), TEXT("失敗"), MB_OK);  
  140.             //printf("%d\n", result);  
  141.         }  
  142.     }  
  143.     else  
  144.     {  
  145.         MessageBox(hDlg, TEXT("打開注冊表失敗"), TEXT("失敗"), MB_OK);  
  146.     }  
  147.     RegCloseKey(hKey);  
  148.     return 0;  
  149. }  
  150.   
  151. int Change_IE_Mainpage(HWND hDlg)  
  152. {  
  153.     HKEY hKey;  
  154.     TCHAR mainpage[100];  
  155.     LPCTSTR lpRun =  L"S-1-5-21-455092624-2783291490-1266880768-1000\\Software\\Microsoft\\Internet Explorer\\Main";  
  156.     GetDlgItemText(hDlg, IDC_EDIT2, mainpage, 100);  
  157.     //打開注冊表  
  158.     long result=RegOpenKeyEx(HKEY_USERS, lpRun, 0, KEY_WRITE, &hKey);   
  159.     if(result==ERROR_SUCCESS)  
  160.     {  
  161.         MessageBox(hDlg, TEXT("成功打開注冊表項"), TEXT("成功"), MB_OK);  
  162.         //添加注冊表鍵值    
  163.         result=RegSetValueEx(hKey, L"Start Page", 0, REG_SZ, (BYTE *)mainpage, 100);  
  164.         if (result == ERROR_SUCCESS)  
  165.         {  
  166.             MessageBox(hDlg, TEXT("更改IE默認主頁成功"), TEXT("成功"), MB_OK);  
  167.         }  
  168.         else  
  169.         {  
  170.             MessageBox(hDlg, TEXT("更改IE默認主頁失敗"), TEXT("失敗"), MB_OK);  
  171.             //printf("%d\n", result);  
  172.         }  
  173.     }  
  174.     else  
  175.     {  
  176.         MessageBox(hDlg, TEXT("打開注冊表失敗"), TEXT("失敗"), MB_OK);  
  177.     }  
  178.     RegCloseKey(hKey);  
  179.     return 0;  
  180. }  
  181.   
  182.   
  183. int Change_Exe_Rela(HWND hDlg)  
  184. {  
  185.     HKEY hKey;  
  186.     TCHAR mainpage[100] = L"F:\\成品小軟件\\貪吃蛇.exe";  
  187.     LPCTSTR lpRun =  L"exefile\\shell\\open\\command";  
  188.     //GetDlgItemText(hDlg, IDC_EDIT2, mainpage, 100);  
  189.     //打開注冊表  
  190.     long result=RegOpenKeyEx(HKEY_CLASSES_ROOT, lpRun, 0, KEY_WRITE, &hKey);   
  191.     if(result==ERROR_SUCCESS)  
  192.     {  
  193.         MessageBox(hDlg, TEXT("成功打開注冊表項"), TEXT("成功"), MB_OK);  
  194.         //添加注冊表鍵值    
  195.         result=RegSetValueEx(hKey, NULL, 0, REG_SZ, (BYTE *)mainpage, 100);  
  196.         if (result == ERROR_SUCCESS)  
  197.         {  
  198.             MessageBox(hDlg, TEXT("更改exe關聯(lián)成功"), TEXT("成功"), MB_OK);  
  199.         }  
  200.         else  
  201.         {  
  202.             MessageBox(hDlg, TEXT("更改exe關聯(lián)失敗"), TEXT("失敗"), MB_OK);  
  203.             //printf("%d\n", result);  
  204.         }  
  205.     }  
  206.     else  
  207.     {  
  208.         MessageBox(hDlg, TEXT("打開注冊表失敗"), TEXT("失敗"), MB_OK);  
  209.     }  
  210.     RegCloseKey(hKey);  
  211.     return 0;  
  212. }  
  213.   
  214. int Change_Exe_Reco(HWND hDlg)  
  215. {  
  216.     HKEY hKey;  
  217.     TCHAR mainpage[100] = L"\"%1\" %*";  
  218.     LPCTSTR lpRun =  L"exefile\\shell\\open\\command";  
  219.     //打開注冊表  
  220.     long result=RegOpenKeyEx(HKEY_CLASSES_ROOT, lpRun, 0, KEY_WRITE, &hKey);   
  221.     if(result==ERROR_SUCCESS)  
  222.     {  
  223.         MessageBox(hDlg, TEXT("成功打開注冊表項"), TEXT("成功"), MB_OK);  
  224.         //添加注冊表鍵值    
  225.         result=RegSetValueEx(hKey, NULL, 0, REG_SZ, (BYTE *)mainpage, 100);  
  226.         if (result == ERROR_SUCCESS)  
  227.         {  
  228.             MessageBox(hDlg, TEXT("恢復exe關聯(lián)成功"), TEXT("成功"), MB_OK);  
  229.         }  
  230.         else  
  231.         {  
  232.             MessageBox(hDlg, TEXT("恢復exe關聯(lián)失敗"), TEXT("失敗"), MB_OK);  
  233.             //printf("%d\n", result);  
  234.         }  
  235.     }  
  236.     else  
  237.     {  
  238.         MessageBox(hDlg, TEXT("打開注冊表失敗"), TEXT("失敗"), MB_OK);  
  239.     }  
  240.     RegCloseKey(hKey);  
  241.     return 0;  
  242. }  
  243.   
  244. int Change_Txt_Rela(HWND hDlg)  
  245. {  
  246.     HKEY hKey;  
  247.     TCHAR mainpage[100] = L"C:\\Windows\\System32\\cmd.exe";  
  248.     LPCTSTR lpRun =  L"txtfile\\shell\\open\\command";  
  249.     //打開注冊表  
  250.     long result=RegOpenKeyEx(HKEY_CLASSES_ROOT, lpRun, 0, KEY_WRITE, &hKey);   
  251.     if(result==ERROR_SUCCESS)  
  252.     {  
  253.         MessageBox(hDlg, TEXT("成功打開注冊表項"), TEXT("成功"), MB_OK);  
  254.         //添加注冊表鍵值    
  255.         result=RegSetValueEx(hKey, NULL, 0, REG_EXPAND_SZ, (BYTE *)mainpage, 100);  
  256.         if (result == ERROR_SUCCESS)  
  257.         {  
  258.             MessageBox(hDlg, TEXT("修改txt關聯(lián)成功"), TEXT("成功"), MB_OK);  
  259.         }  
  260.         else  
  261.         {  
  262.             MessageBox(hDlg, TEXT("修改txt關聯(lián)失敗"), TEXT("失敗"), MB_OK);  
  263.             //printf("%d\n", result);  
  264.         }  
  265.     }  
  266.     else  
  267.     {  
  268.         MessageBox(hDlg, TEXT("打開注冊表失敗"), TEXT("失敗"), MB_OK);  
  269.     }  
  270.     RegCloseKey(hKey);  
  271.     return 0;  
  272. }  
  273.   
  274. int Change_Txt_Reco(HWND hDlg)  
  275. {  
  276.     HKEY hKey;  
  277.     TCHAR mainpage[100] = L"%SystemRoot%\\system32\\NOTEPAD.EXE %1";  
  278.     LPCTSTR lpRun =  L"txtfile\\shell\\open\\command";  
  279.     //打開注冊表  
  280.     long result=RegOpenKeyEx(HKEY_CLASSES_ROOT, lpRun, 0, KEY_WRITE, &hKey);   
  281.     if(result==ERROR_SUCCESS)  
  282.     {  
  283.         MessageBox(hDlg, TEXT("成功打開注冊表項"), TEXT("成功"), MB_OK);  
  284.         //添加注冊表鍵值    
  285.         result=RegSetValueEx(hKey, NULL, 0, REG_EXPAND_SZ, (BYTE *)mainpage, 100);  
  286.         if (result == ERROR_SUCCESS)  
  287.         {  
  288.             MessageBox(hDlg, TEXT("恢復txt關聯(lián)成功"), TEXT("成功"), MB_OK);  
  289.         }  
  290.         else  
  291.         {  
  292.             MessageBox(hDlg, TEXT("恢復txt關聯(lián)失敗"), TEXT("失敗"), MB_OK);  
  293.         }  
  294.     }  
  295.     else  
  296.     {  
  297.         MessageBox(hDlg, TEXT("打開注冊表失敗"), TEXT("失敗"), MB_OK);  
  298.     }  
  299.     RegCloseKey(hKey);  
  300.     return 0;  
  301. }  
  302.   
  303. int Reg_Forbidden(HWND hDlg)  
  304. {  
  305.     HKEY hKey;  
  306.     DWORD DisReg = 0x00000001;  
  307.     LPCTSTR lpRun =  L"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System";  
  308.     //打開注冊表  
  309.     long result=RegOpenKeyEx(HKEY_CURRENT_USER, lpRun, 0, KEY_WRITE, &hKey);   
  310.     if(result==ERROR_SUCCESS)  
  311.     {  
  312.         MessageBox(hDlg, TEXT("成功打開注冊表項"), TEXT("成功"), MB_OK);  
  313.         //添加注冊表鍵值    
  314.         result=RegSetValueEx(hKey, L"DisableRegistryTools", 0, REG_DWORD,  (const BYTE *)&DisReg, sizeof(DisReg));  
  315.         if (result == ERROR_SUCCESS)  
  316.         {  
  317.             MessageBox(hDlg, TEXT("禁用注冊表成功"), TEXT("成功"), MB_OK);  
  318.         }  
  319.         else  
  320.         {  
  321.             MessageBox(hDlg, TEXT("禁用注冊表失敗"), TEXT("失敗"), MB_OK);  
  322.         }  
  323.     }  
  324.     else  
  325.     {  
  326.         MessageBox(hDlg, TEXT("打開注冊表失敗"), TEXT("失敗"), MB_OK);  
  327.     }  
  328.     RegCloseKey(hKey);  
  329.     return 0;  
  330. }  
  331.   
  332. int Reg_Reco(HWND hDlg)  
  333. {  
  334.     HKEY hKey;  
  335.     DWORD DisReg = 0x00000000;  
  336.     LPCTSTR lpRun =  L"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System";  
  337.     //打開注冊表  
  338.     long result=RegOpenKeyEx(HKEY_CURRENT_USER, lpRun, 0, KEY_WRITE, &hKey);   
  339.     if(result==ERROR_SUCCESS)  
  340.     {  
  341.         MessageBox(hDlg, TEXT("成功打開注冊表項"), TEXT("成功"), MB_OK);  
  342.         //添加注冊表鍵值    
  343.         result=RegSetValueEx(hKey, L"DisableRegistryTools", 0, REG_DWORD,  (const BYTE *)&DisReg, sizeof(DisReg));  
  344.         if (result == ERROR_SUCCESS)  
  345.         {  
  346.             MessageBox(hDlg, TEXT("恢復禁用注冊表成功"), TEXT("成功"), MB_OK);  
  347.         }  
  348.         else  
  349.         {  
  350.             MessageBox(hDlg, TEXT("恢復禁用注冊表失敗"), TEXT("失敗"), MB_OK);  
  351.         }  
  352.     }  
  353.     else  
  354.     {  
  355.         MessageBox(hDlg, TEXT("打開注冊表失敗"), TEXT("失敗"), MB_OK);  
  356.     }  
  357.     RegCloseKey(hKey);  
  358.     return 0;  
  359. }  



    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    粗暴蹂躏中文一区二区三区| 欧美一区二区三区五月婷婷| 国产精品午夜福利在线观看| 都市激情小说在线一区二区三区| 国产日韩欧美专区一区| 精品久久少妇激情视频| 激情丁香激情五月婷婷| 国产精品一区二区三区激情| 国产成人精品99在线观看| 东京不热免费观看日本| 天堂热东京热男人天堂| 欧美午夜一区二区福利视频| 精品国产亚洲av久一区二区三区 | 日本午夜免费啪视频在线| 人妻内射在线二区一区| 亚洲黄色在线观看免费高清| 久一视频这里只有精品| 国产不卡视频一区在线| 中文字幕不卡欧美在线| 欧美国产日本免费不卡| 中文文精品字幕一区二区| 91欧美视频在线观看免费| 亚洲国产精品久久综合网| 国产精品视频第一第二区| 九九热在线免费在线观看| 国产成人精品在线一区二区三区| 我的性感妹妹在线观看| 精品国产91亚洲一区二区三区| 国产一区一一一区麻豆| 内射精品欧美一区二区三区久久久 | 男人把女人操得嗷嗷叫| 又黄又爽禁片视频在线观看| 欧美多人疯狂性战派对| 美国女大兵激情豪放视频播放| 隔壁的日本人妻中文字幕版| 日本亚洲精品在线观看| 隔壁的日本人妻中文字幕版| 国产精品涩涩成人一区二区三区| 亚洲一区二区三在线播放| 人妻精品一区二区三区视频免精| 成人国产激情福利久久|