zoukankan      html  css  js  c++  java
  • 自制360开机小助手

    每次开机看到360的开机小助手,都非常羡慕,要是自己写一个多好啊。

    今天,pearry就带大家来自己动手写开机小助手。

    主要知识:

    1.获取系统运行时间

    涉及的API函数:GetTickCount() //获取系统运行时间(毫秒)

    2.计时器

    每秒刷新数据。

    涉及的API函数:SetTimer、KillTimer

    3.获取文件路径

    设置开机启动时使用

    涉及的API函数: GetCurrentDirectory(); //获取程序的当前目录

    4.注册表操作

    添加注册表到自动启动项、删除注册表。

    涉及的API函数:

    打开注册表:RegOpenKeyEx

    设置注册表项:RegSetValueEx

    删除指定值:RegDeleteValue

    了解了这些,我们就可以动手开始编写代码了。

    建立MFC项目,我这里叫WinStart。

    布置界面,如下图一:

    在WinStartDlg.h中添加函数声明void GetTimer(); //用来获取运行时间

    在CPP文件中实现:

    voidCWinStartDlg::GetTimer()
    {
      CString s;
      DWORDk=::GetTickCount();//获取毫秒级数目
      inthm=k/3600000;//hm为小时数
      intms=(k-3600000*hm)/60000;//ms为分钟数
      intse=(k-3600000*hm-60000*ms)/1000;//se为秒数(除以1000是因为k精确到毫秒)   
      s.Format("%d:%d:%d",hm,ms,se);//输出时、分、秒
     
      const char* ch = (LPCTSTR)s;
      SetDlgItemText(IDC_EDIT1,ch);
    }
    
     

    在初始化函数BOOL CWinStartDlg::OnInitDialog()中添加计时器:

     

    this->SetTimer(0,1000,NULL);

     

    然后用类向导建立消息响应函数OnTimer来响应SetTimer发出的WM_TIMER:

    voidCWinStartDlg::OnTimer(UINTnIDEvent) 
    {
    // TODO: Add your message handler code here and/or call default
      GetTimer();
      CDialog::OnTimer(nIDEvent);
    }



     

    在OnCancel中KillTimer:

    voidCWinStartDlg::OnCancel() 
    {
    // TODO: Add extra cleanup here
      this->KillTimer(0); 
      CDialog::OnCancel();
    }
    

    这样,一个基本的程序就做好了。下面我们来导入注册表,设置它为开机启动。

    首先我们来获取当前程序路径,放到“导入注册表”按钮中实现:

    charpBuf[MAX_PATH];       //存放路径的变量
    GetCurrentDirectory(MAX_PATH,pBuf);    //获取程序的当前目录
    strcat(pBuf,"\\");
    strcat(pBuf,AfxGetApp()->m_pszExeName);   
    strcat(pBuf,".exe");

    然后,开始注册表操作,首先在指定项下创建一个键值:

    HKEY hKey;
    //添加注册表,并且打开
    RegCreateKey(HKEY_LOCAL_MACHINE,
    "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",
    &hKey);  
    //设置值  
    inttemp = RegSetValueEx(hKey,_T("WinStart"), 0,REG_SZ, _T((unsignedchar*)ch),strlen(ch) );
    if(temp == 0)
    {
       MessageBox(_T("导入注册表成功!"));
       RegCloseKey(hKey);
    }
    else
    {
       MessageBox(_T("导入失败!"));
    }

    这样我们导入功能就实现了。接下来我们来完成“删除注册表”按钮:

    void CWinStartDlg::OnButton2() 
    {
    // TODO: Add your control notification handler code here
    HKEY hKey;
    //打开注册表
    if(ERROR_SUCCESS !=RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",0,KEY_SET_VALUE ,&hKey))
    {
       MessageBox(_T("打开注册表失败,或不存在该项!"));
    }
    else
    {
       if(!RegDeleteValue(hKey,"WinStart"))
       {
        MessageBox(_T("删除注册表成功!"));
        RegCloseKey(hKey);
       }
       else
       {
        MessageBox(_T("删除失败!"));
       }    
      }
    }

    好了,我们的功能就这样基本实现了 ,赶快自己动手试试吧

    欢迎拍砖~~~

  • 相关阅读:
    list与map的区别
    [BJOI2019]光线——递推
    [BJOI2019]奥术神杖——AC自动机+DP+分数规划+二分答案
    [BJOI2019]送别——非旋转treap
    [BJOI2019]排兵布阵——分组背包
    [LOJ3014][JOI 2019 Final]独特的城市——树的直径+长链剖分
    BZOJ2300[HAOI2011]防线修建——非旋转treap+凸包(平衡树动态维护凸包)
    BZOJ3033太鼓达人——哈密顿回路/欧拉回路
    BZOJ3236[Ahoi2013]作业——莫队+树状数组/莫队+分块
    BZOJ2339[HNOI2011]卡农——递推+组合数
  • 原文地址:https://www.cnblogs.com/jinsedemaitian/p/5589162.html
Copyright © 2011-2022 走看看