• 自动启动管理器


    界面如下:

    主要代码如下:

      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

  • 相关阅读:
    Oracle OCP 19c 认证1Z0-082考试题库(第1题)
    OCP 063中文考试题库(cuug内部资料)第6题
    OCP 062中文考试题库(cuug内部资料)第6题
    OCP 062中文考试题库(cuug内部资料)第5题
    OCP 071中文考试题库(cuug内部资料)第6题
    搜索
    Even Parity uva11464 模拟
    GCD hdu1695容斥原理
    Rectangles hdu2461容斥定理
    GCD XOR uvalive6657
  • 原文地址:https://www.cnblogs.com/qiyueliuguang/p/3544133.html
Copyright © 2020-2023  润新知