很简单,问题是如何使用c/c ++在Windows中启动系统启动时间.
搜索这个没有得到任何答案,我只找到了一个非常hacky的方法,即读取文件时间戳(不用说,我放弃了中途阅读).
我发现的另一种方法实际上是读取Windows诊断记录的事件?据说那是最后一次启动时间.
有谁知道怎么做(希望不是太多丑陋的黑客)?
Jam*_*lis 19
GetTickCount64 "检索自系统启动以来经过的毫秒数."
一旦知道系统运行了多长时间,只需从当前时间减去此持续时间即可确定系统何时启动.例如,使用C++ 11 chrono库(Visual C++ 2012支持):
auto uptime = std::chrono::milliseconds(GetTickCount64());
auto boot_time = std::chrono::system_clock::now() - uptime;
Run Code Online (Sandbox Code Playgroud)
您还可以使用WMI获取准确的启动时间.WMI不适合胆小的人,但它会让你得到你想要的东西.
有问题的信息是在财产Win32_OperatingSystem下的对象上LastBootUpTime.您可以使用WMI工具检查其他属性.

编辑: 如果您愿意,也可以从命令行获取此信息.
wmic OS Get LastBootUpTime
Run Code Online (Sandbox Code Playgroud)
作为C#中的一个例子,它看起来如下(使用C++它相当冗长):
static void Main(string[] args)
{
// Create a query for OS objects
SelectQuery query = new SelectQuery("Win32_OperatingSystem", "Status=\"OK\"");
// Initialize an object searcher with this query
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
string dtString;
// Get the resulting collection and loop through it
foreach (ManagementObject envVar in searcher.Get())
dtString = envVar["LastBootUpTime"].ToString();
}
Run Code Online (Sandbox Code Playgroud)