怎样记录电脑的关机时间

anya 2010-03-22 04:27:41
想实现这样的功能:就是把一天中电脑每次关机的时间记录下来。

谢谢,在线等。
...全文
428 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
anya 2010-03-23
  • 打赏
  • 举报
回复
谢谢大家,结贴。
anya 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 wybxs2006 的回复:]
支持楼主一下
[/Quote]


心领,感谢
anya 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 lzsh0622 的回复:]
C# code

private void button1_Click(object sender, EventArgs e)
{
using (System.Diagnostics.EventLog el = new System.Diagnostics.EventLog())
{
el.Log = "System";
foreach……
[/Quote]

谢谢
lzsh0622 2010-03-22
  • 打赏
  • 举报
回复

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());
}
}
}
阿彪兄 2010-03-22
  • 打赏
  • 举报
回复
支持楼主一下
anya 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 lzsh0622 的回复:]
查找 事件ID = 6005 的时间,这是每天的开机时间。
事件ID = 6006 的时间,这是每天的关机时间。
[/Quote]

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
代码
lzsh0622 2010-03-22
  • 打赏
  • 举报
回复
查找 事件ID = 6005 的时间,这是每天的开机时间。
事件ID = 6006 的时间,这是每天的关机时间。
lzsh0622 2010-03-22
  • 打赏
  • 举报
回复
el.Log = "System";

查找 事件ID = 6006 的时间,这是每天的关机时间。
铛铛 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 anya 的回复:]
引用 12 楼 zxp8819 的回复:
引用 8 楼 criedshy 的回复:
你可以通过程序关闭事件来获取,因为系统关的时候,你的程序也会被关闭。但这样不是很可靠,因为你的程序有可能会异常关闭或者被强制关掉。

通过事件日志只能获取上次的关机时间。

暂时没有想到好办法

总不能每次关机前都运行一下程序吧


他的思路是这样的:电脑一开机,这个特定程序就自动启动到进程了……
[/Quote]
一样,只是省去了人工运行那一步,显然该方法不好
anya 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zxp8819 的回复:]
引用 8 楼 criedshy 的回复:
你可以通过程序关闭事件来获取,因为系统关的时候,你的程序也会被关闭。但这样不是很可靠,因为你的程序有可能会异常关闭或者被强制关掉。

通过事件日志只能获取上次的关机时间。

暂时没有想到好办法

总不能每次关机前都运行一下程序吧
[/Quote]

他的思路是这样的:电脑一开机,这个特定程序就自动启动到进程了,然后一直存在在进程中,当电脑关闭的时候,它肯定也会随之关闭。
jy251 2010-03-22
  • 打赏
  • 举报
回复
看了你的问题,想到了第一种办法:
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这个函数,获取传递给你程序窗口的消息,如果是关机,那么会有关机的消息传递过来的。
铛铛 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 criedshy 的回复:]
你可以通过程序关闭事件来获取,因为系统关的时候,你的程序也会被关闭。但这样不是很可靠,因为你的程序有可能会异常关闭或者被强制关掉。

通过事件日志只能获取上次的关机时间。

暂时没有想到好办法
[/Quote]
总不能每次关机前都运行一下程序吧
liuh6 2010-03-22
  • 打赏
  • 举报
回复
点开始,运行,输入schedlgu.txt回车 看到这个文件.你就知道该怎么处理了.!我是来接分的!
anya 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 criedshy 的回复:]
你可以通过程序关闭事件来获取,因为系统关的时候,你的程序也会被关闭。但这样不是很可靠,因为你的程序有可能会异常关闭或者被强制关掉。

通过事件日志只能获取上次的关机时间。

暂时没有想到好办法
[/Quote]


这个方法会试一下,感觉可行。
anya 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lzsh0622 的回复:]
C#命名空间 System.Diagnostics.EventLog


C# code
using(System.Diagnostics.EventLog el = new System.Diagnostics.EventLog())
{
el.Log = "Application";   // el.Log 取值 是 Application、System 和 Securit……
[/Quote]

你的代码怎么就写了一句啊
criedshy 2010-03-22
  • 打赏
  • 举报
回复
你可以通过程序关闭事件来获取,因为系统关的时候,你的程序也会被关闭。但这样不是很可靠,因为你的程序有可能会异常关闭或者被强制关掉。

通过事件日志只能获取上次的关机时间。

暂时没有想到好办法
lzsh0622 2010-03-22
  • 打赏
  • 举报
回复
C#命名空间 System.Diagnostics.EventLog

using(System.Diagnostics.EventLog el = new System.Diagnostics.EventLog())
{
el.Log = "Application";   // el.Log 取值 是 Application、System 和 Security
// 用el操作日志记录
}
chenqingwei 2010-03-22
  • 打赏
  • 举报
回复

控制面板——管理工具——事件查看器
liangchencf 2010-03-22
  • 打赏
  • 举报
回复
用wmi能获取windows的安装时间,估计开关机时间也能获取~,搜一下msdn或者goagle吧~~
wzp144650 2010-03-22
  • 打赏
  • 举报
回复
关机之前把程序关了咋办?
加载更多回复(3)

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧