怎样记录电脑的关机时间 本帖最后由 anya 于 2010-03-22 16:38:50 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Window系统应该有记录,只不过不知道在哪 Windows上面有开机和关机时间记录的,你应该从这个下手去google~~~ 在Windows XP中,我们可以通过“事件查看器”的事件日志服务查看计算机的开、关机时间。因为事件日志服务会随计算机一起启动和关闭,并在事件日志中留下记录。 在这里有必要介绍两个ID号:6006和6005。在事件查看器里ID号为6006的事件表示事件日志服务已停止,如果你没有在当天的事件查看器中发现这个ID号为6006的事件,那么就表示计算机没有正常关机,可能是因为系统原因或者直接按下了计算机电源键,没有执行正常的关机操作造成的。当你启动系统的时候,事件查看器的事件日志服务就会启动,这就是ID号为6005的事件。 通过这两个ID号保存的信息,我们可以轻松查看计算机开、关机记录:打开“控制面板”,双击“管理工具”,然后打开“事件查看器”,在左边的窗口中选择“系统”选项。单击鼠标右键,在弹出的快捷菜单中选择“属性”,在打开的“系统属性”窗口中选择“筛选器”选项卡,在“事件类型”下面选中“信息”复选项,并在“事件来源”列表中选择“eventlog”选项,继续设定其他条件后,单击“确定”按钮,即可看到需要的事件记录了。双击某条记录,如果描述信息为“事件服务已启动”,那就代表计算机开机或重新启动的时间,如果描述信息是“事件服务已停止”,即代表计算机的关机时间。 用wmi能获取windows的安装时间,估计开关机时间也能获取~,搜一下msdn或者goagle吧~~ C#命名空间 System.Diagnostics.EventLog using(System.Diagnostics.EventLog el = new System.Diagnostics.EventLog()){ el.Log = "Application"; // el.Log 取值 是 Application、System 和 Security // 用el操作日志记录 } 点开始,运行,输入schedlgu.txt回车 看到这个文件.你就知道该怎么处理了.!我是来接分的! 看了你的问题,想到了第一种办法:hook,因为C#的机制,所以全局的hook比较难以实现,据说全局也只能hook鼠标和键盘,但是shell消息不能hook,但是网上有其他文章说可以建立全局hook,这个需要你自己去确定。如果可以全局hook,那么你可以使用hook来截取Windows的关机消息。在网上搜索了一把,发现第2种办法:form_Closing事件中来获取。相对简单:private void Form1_FormClosing(object sender, FormClosingEventArgs e){ //e.CloseReason = CloseReason.WindowsShutDown}判断e.CloseReason 是否是CloseReason.WindowsShutDown,如果是那么就是Windows要关闭导致需要先关闭你的程序。第3种:这种不是很好,并且需要你的窗体在当前有焦点。override windporc这个函数,获取传递给你程序窗口的消息,如果是关机,那么会有关机的消息传递过来的。 el.Log = "System"; 查找 事件ID = 6006 的时间,这是每天的关机时间。 查找 事件ID = 6005 的时间,这是每天的开机时间。 事件ID = 6006 的时间,这是每天的关机时间。 private void button1_Click(object sender, EventArgs e){ using (System.Diagnostics.EventLog el = new System.Diagnostics.EventLog()) { el.Log = "System"; foreach (EventLogEntry ee in el.Entries) { if (ee.EventID == 6005) MessageBox.Show("开机时间:" + ee.TimeWritten.ToString()); if (ee.EventID == 6006) MessageBox.Show("关机时间:" + ee.TimeWritten.ToString()); } }} C#调用一个写好的C的DLL 帮忙调试让我能正常调用 C#操作Excel,懂Excel也可以进来看下。 水晶报表数据集问题 WINFORM程序运行时怎么把主窗体隐藏? 如何实现word的粘贴功能? 关于任务栏式的托盘图标及其右键菜单 请教:怎样实现打印单条记录信息表! 添加panel的背景色,急! VS2013代码图的疑问 请问如何使WinForm中的TextBox控件禁止某些字符的输入?谢谢! 加密种子问题 C#中的byte[]对应C++中的什么
在这里有必要介绍两个ID号:6006和6005。在事件查看器里ID号为6006的事件表示事件日志服务已停止,如果你没有在当天的事件查看器中发现这个ID号为6006的事件,那么就表示计算机没有正常关机,可能是因为系统原因或者直接按下了计算机电源键,没有执行正常的关机操作造成的。当你启动系统的时候,事件查看器的事件日志服务就会启动,这就是ID号为6005的事件。
通过这两个ID号保存的信息,我们可以轻松查看计算机开、关机记录:打开“控制面板”,双击“管理工具”,然后打开“事件查看器”,在左边的窗口中选择“系统”选项。单击鼠标右键,在弹出的快捷菜单中选择“属性”,在打开的“系统属性”窗口中选择“筛选器”选项卡,在“事件类型”下面选中“信息”复选项,并在“事件来源”列表中选择“eventlog”选项,继续设定其他条件后,单击“确定”按钮,即可看到需要的事件记录了。双击某条记录,如果描述信息为“事件服务已启动”,那就代表计算机开机或重新启动的时间,如果描述信息是“事件服务已停止”,即代表计算机的关机时间。
{
el.Log = "Application"; // el.Log 取值 是 Application、System 和 Security
// 用el操作日志记录
}
hook,因为C#的机制,所以全局的hook比较难以实现,据说全局也只能hook鼠标和键盘,但是shell消息不能hook,但是网上有其他文章说可以建立全局hook,这个需要你自己去确定。
如果可以全局hook,那么你可以使用hook来截取Windows的关机消息。在网上搜索了一把,发现第2种办法:
form_Closing事件中来获取。相对简单:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
//e.CloseReason = CloseReason.WindowsShutDown
}
判断e.CloseReason 是否是CloseReason.WindowsShutDown,如果是那么就是Windows要关闭导致需要先关闭你的程序。第3种:
这种不是很好,并且需要你的窗体在当前有焦点。
override windporc这个函数,获取传递给你程序窗口的消息,如果是关机,那么会有关机的消息传递过来的。
查找 事件ID = 6006 的时间,这是每天的关机时间。
事件ID = 6006 的时间,这是每天的关机时间。
private void button1_Click(object sender, EventArgs e)
{
using (System.Diagnostics.EventLog el = new System.Diagnostics.EventLog())
{
el.Log = "System";
foreach (EventLogEntry ee in el.Entries)
{
if (ee.EventID == 6005) MessageBox.Show("开机时间:" + ee.TimeWritten.ToString());
if (ee.EventID == 6006) MessageBox.Show("关机时间:" + ee.TimeWritten.ToString());
}
}
}