美文网首页
获取本次开机时间和上次关机时间

获取本次开机时间和上次关机时间

作者: Bug2Coder | 来源:发表于2019-12-01 14:03 被阅读0次
#include <windows.h>
#include <time.h>
#include<tchar.h>
#include<iostream>
using namespace std;
#pragma comment(lib, "winmm.lib ")

void  FileTimeToTimet(FILETIME ft, time_t* t)
{
    LONGLONG ll = 0;

    ULARGE_INTEGER ui;
    ui.LowPart = ft.dwLowDateTime;
    ui.HighPart = ft.dwHighDateTime;

    ll = ((INT64)ft.dwHighDateTime) << 32 + ft.dwLowDateTime;
    *t = (LONGLONG)(ui.QuadPart - 116444736000000000) / 10000000;


}

string GetBootTime()
{
    DWORD startMSCount;//从开机到现在的毫秒数
    startMSCount = timeGetTime();
    time_t CurSysTime, BootSysTime;
    time(&CurSysTime);
    //将开机到现在的毫秒数转换为秒数,再用当前的时间减去,获得开机时间
    BootSysTime = CurSysTime - startMSCount / 1000;
    struct tm* tm_boot;
    tm_boot = localtime(&BootSysTime);
    char bufbt[128] = { 0 };
    strftime(bufbt, 64, "%Y-%m-%d %H:%M:%S", tm_boot);
    return bufbt;
}


//获得最近一次关机时间,若为0,则失败
//返回格式为Unix时间,若需要其他格式时间请稍作修改即可
string GetLastShutdownTime()
{
    HKEY hKey;
    LONG lResult;
    time_t ShutdownTime = 0;
    LPCSTR lpSubKey = _T("SYSTEM\\CurrentControlSet\\Control\\Windows");
    lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpSubKey, 0, KEY_READ, &hKey);

    if (lResult != ERROR_SUCCESS)
        return "";
    FILETIME FileTime;
    DWORD dwSize;
    lResult = RegQueryValueEx(hKey, TEXT("ShutdownTime"),
        NULL, NULL, NULL, &dwSize);
    if (lResult == ERROR_SUCCESS && dwSize == sizeof(FileTime))
    {
        lResult = RegQueryValueEx(hKey, TEXT("ShutdownTime"), NULL,
            NULL, (LPBYTE)&FileTime, &dwSize);

        FileTimeToTimet(FileTime, &ShutdownTime);  //读取注册表数值,并进行格式转换

    }
    RegCloseKey(hKey);

    char bufst[128] = { 0 };
    struct tm* tm_st;
    tm_st = localtime(&ShutdownTime);
    strftime(bufst, 64, "%Y-%m-%d %H:%M:%S", tm_st);

    return bufst;
}

int main() {
    string bt;
    bt = GetBootTime();
    string st;
    st = GetLastShutdownTime();

    cout << "本次开机时间:" << bt << endl;
    cout << "上次关机时间:" << st << endl;
    system("pause");

    return 0;
}

相关文章

  • 获取本次开机时间和上次关机时间

  • 注册表获取上次关机时间

    功能实现: 读取注册表,获取机器上次关机时间 注册表REG_BINARY数据格式的解析

  • Mac常用命令

    查看开机时间记录: 查看关机时间记录: 立即关机 10分钟后关机 晚上8点关机 立即重启

  • Mac 操作

    1.查看开机时间,关机时间 在终端输入last | grep reboot点回车可以查看开机重启的时间记录 在...

  • Windows 10 技术预览版初体验

    初装体验 ① 系统很顺畅。开机时间和8.1差不多,关机时也是先关闭屏幕,再静默关机。 ② 卡死现象。但发生概率极低...

  • Mac查看开机时间

    控制台输入 last 即可,reboot 时间就是本次的开机时间。

  • 获取系统开机时间

    网上找了两篇文章,我也没细细研究,现在做项目,有时间再回来研究一下; 但是实测是发现手机待机一段时间之后再次获取时...

  • 好好看

    还关机开机开机

  • 2021-01-17

    “关机开机”和“重启手机”有啥区别?网友:幸亏知道了! “关机开机”和“重启手机”有啥区别?网友:幸亏知道了! 在...

  • 复盘(75)||充满期待地过好每一天

    1.开机/关机,开机/关机,开机/关机 晚上9点半,电脑关机,满以为一天的工作已经完毕。 可是,10分钟后微信里再...

网友评论

      本文标题:获取本次开机时间和上次关机时间

      本文链接:https://www.haomeiwen.com/subject/mgpzwctx.html