自动启动管理器

界面如下:

主要代码如下:

  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

转载于:https://www.cnblogs.com/qiyueliuguang/p/3544133.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值