界面如下:
主要代码如下:
1 // ManageRunDlg.cpp : 实现文件 2 // 3 4 #include "stdafx.h" 5 #include "ManageRun.h" 6 #include "ManageRunDlg.h" 7 #include "RegAdd.h" 8 9 #ifdef _DEBUG 10 #define new DEBUG_NEW 11 #endif 12 13 14 // CManageRunDlg 对话框 15 16 #define REG_RUN _T("Software\\Microsoft\\Windows\\CurrentVersion\\Run") 17 18 19 CManageRunDlg::CManageRunDlg(CWnd* pParent /*=NULL*/) 20 : CDialog(CManageRunDlg::IDD, pParent) 21 { 22 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); 23 } 24 25 void CManageRunDlg::DoDataExchange(CDataExchange* pDX) 26 { 27 CDialog::DoDataExchange(pDX); 28 DDX_Control(pDX, IDC_LIST_RUNLIST, m_RunList); 29 } 30 31 BEGIN_MESSAGE_MAP(CManageRunDlg, CDialog) 32 ON_WM_PAINT() 33 ON_WM_QUERYDRAGICON() 34 //}}AFX_MSG_MAP 35 ON_BN_CLICKED(IDC_BUTTON_ADD, &CManageRunDlg::OnBnClickedButtonAdd) 36 ON_BN_CLICKED(IDC_BUTTON_DELETE, &CManageRunDlg::OnBnClickedButtonDelete) 37 ON_BN_CLICKED(IDC_BUTTON_EXIT, &CManageRunDlg::OnBnClickedButtonExit) 38 END_MESSAGE_MAP() 39 40 41 // CManageRunDlg 消息处理程序 42 43 BOOL CManageRunDlg::OnInitDialog() 44 { 45 CDialog::OnInitDialog(); 46 47 // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 48 // 执行此操作 49 SetIcon(m_hIcon, TRUE); // 设置大图标 50 SetIcon(m_hIcon, FALSE); // 设置小图标 51 52 // TODO: 在此添加额外的初始化代码 53 InitRunList(); 54 ShowRunList(); 55 56 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE 57 } 58 59 // 如果向对话框添加最小化按钮,则需要下面的代码 60 // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序, 61 // 这将由框架自动完成。 62 63 void CManageRunDlg::OnPaint() 64 { 65 if (IsIconic()) 66 { 67 CPaintDC dc(this); // 用于绘制的设备上下文 68 69 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); 70 71 // 使图标在工作区矩形中居中 72 int cxIcon = GetSystemMetrics(SM_CXICON); 73 int cyIcon = GetSystemMetrics(SM_CYICON); 74 CRect rect; 75 GetClientRect(&rect); 76 int x = (rect.Width() - cxIcon + 1) / 2; 77 int y = (rect.Height() - cyIcon + 1) / 2; 78 79 // 绘制图标 80 dc.DrawIcon(x, y, m_hIcon); 81 } 82 else 83 { 84 CDialog::OnPaint(); 85 } 86 } 87 88 //当用户拖动最小化窗口时系统调用此函数取得光标 89 //显示。 90 HCURSOR CManageRunDlg::OnQueryDragIcon() 91 { 92 return static_cast<HCURSOR>(m_hIcon); 93 } 94 95 96 void CManageRunDlg::InitRunList(void) 97 { 98 CRect Rect; 99 GetClientRect(Rect); 100 m_RunList.SetExtendedStyle(m_RunList.GetExtendedStyle() | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT); 101 m_RunList.InsertColumn(0, _T("序号")); 102 m_RunList.InsertColumn(1, _T("键名")); 103 m_RunList.InsertColumn(2, _T("键值")); 104 m_RunList.SetColumnWidth(0, Rect.Width() / 10); 105 m_RunList.SetColumnWidth(1, 2 * Rect.Width() / 10); 106 m_RunList.SetColumnWidth(2, 7 * Rect.Width() / 10); 107 } 108 109 void CManageRunDlg::ShowRunList(void) 110 { 111 m_RunList.DeleteAllItems(); 112 113 DWORD dwType = 0; 114 DWORD dwBufferSize = MAXBYTE; 115 DWORD dwKeySize = MAXBYTE; 116 TCHAR szValueName[MAXBYTE] = {0}; 117 TCHAR szValueKey[MAXBYTE] = {0}; 118 119 HKEY hKey = NULL; 120 LONG lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, REG_RUN, 0, KEY_READ, &hKey); 121 if (ERROR_SUCCESS != lRet) 122 { 123 return; 124 } 125 126 int i = 0; 127 CString strTemp; 128 while (TRUE) 129 { 130 lRet = RegEnumValue(hKey, i, szValueName, &dwBufferSize, NULL, &dwType, (LPBYTE)szValueKey, &dwKeySize); 131 if (ERROR_NO_MORE_ITEMS == lRet || (szValueName[0] == 0 && szValueKey[0] == 0)) 132 { 133 break; 134 } 135 strTemp.Format(_T("%d"), i); 136 m_RunList.InsertItem(i, strTemp); 137 m_RunList.SetItemText(i, 1, szValueName); 138 m_RunList.SetItemText(i, 2, szValueKey); 139 i++; 140 ZeroMemory(szValueName, MAXBYTE); 141 ZeroMemory(szValueKey, MAXBYTE); 142 } 143 RegCloseKey(hKey); 144 } 145 146 void CManageRunDlg::OnBnClickedButtonAdd() 147 { 148 // TODO: 在此添加控件通知处理程序代码 149 CRegAdd RegAdd; 150 RegAdd.DoModal(); 151 152 if (RegAdd.m_strKeyName.IsEmpty() || RegAdd.m_strKeyValue.IsEmpty()) 153 { 154 return; 155 } 156 157 HKEY hKey = NULL; 158 LONG lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, REG_RUN, 0, KEY_WRITE, &hKey); 159 if (lRet != ERROR_SUCCESS) 160 { 161 return; 162 } 163 164 RegSetValueEx(hKey, RegAdd.m_strKeyName.GetBuffer(0), 0, REG_SZ, (PBYTE)RegAdd.m_strKeyValue.GetBuffer(0), lstrlen(RegAdd.m_strKeyValue.GetBuffer(0)) + sizeof(TCHAR)); 165 DWORD dwErr = GetLastError(); 166 RegCloseKey(hKey); 167 ShowRunList(); 168 } 169 170 void CManageRunDlg::OnBnClickedButtonDelete() 171 { 172 // TODO: 在此添加控件通知处理程序代码 173 POSITION pos = m_RunList.GetFirstSelectedItemPosition(); 174 int nSelected = -1; 175 176 while (pos) 177 { 178 nSelected = m_RunList.GetNextSelectedItem(pos); 179 } 180 if ( -1 == nSelected) 181 { 182 AfxMessageBox(_T("请选择要删除的启动项")); 183 return; 184 } 185 186 TCHAR szKeyName[MAXBYTE] = {0}; 187 m_RunList.GetItemText(nSelected, 1, szKeyName, MAXBYTE); 188 189 //AfxMessageBox(szKeyName); 190 HKEY hKey = NULL; 191 LONG lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, REG_RUN, 0, KEY_WRITE, &hKey); 192 if (ERROR_SUCCESS != lRet) 193 { 194 return; 195 } 196 RegDeleteKey(hKey, szKeyName); 197 RegCloseKey(hKey); 198 199 ShowRunList(); 200 } 201 202 void CManageRunDlg::OnBnClickedButtonExit() 203 { 204 // TODO: 在此添加控件通知处理程序代码 205 OnOK(); 206 }
下载地址如下:
http://pan.baidu.com/s/1ntwOjqx
原文:http://www.cnblogs.com/qiyueliuguang/p/3544133.html