本帖最后由 anya 于 2010-03-22 16:38:50 编辑

解决方案 »

  1.   

    Window系统应该有记录,只不过不知道在哪
      

  2.   

    Windows上面有开机和关机时间记录的,你应该从这个下手去google~~~
      

  3.   

    在Windows XP中,我们可以通过“事件查看器”的事件日志服务查看计算机的开、关机时间。因为事件日志服务会随计算机一起启动和关闭,并在事件日志中留下记录。
      
      在这里有必要介绍两个ID号:6006和6005。在事件查看器里ID号为6006的事件表示事件日志服务已停止,如果你没有在当天的事件查看器中发现这个ID号为6006的事件,那么就表示计算机没有正常关机,可能是因为系统原因或者直接按下了计算机电源键,没有执行正常的关机操作造成的。当你启动系统的时候,事件查看器的事件日志服务就会启动,这就是ID号为6005的事件。
      
      通过这两个ID号保存的信息,我们可以轻松查看计算机开、关机记录:打开“控制面板”,双击“管理工具”,然后打开“事件查看器”,在左边的窗口中选择“系统”选项。单击鼠标右键,在弹出的快捷菜单中选择“属性”,在打开的“系统属性”窗口中选择“筛选器”选项卡,在“事件类型”下面选中“信息”复选项,并在“事件来源”列表中选择“eventlog”选项,继续设定其他条件后,单击“确定”按钮,即可看到需要的事件记录了。双击某条记录,如果描述信息为“事件服务已启动”,那就代表计算机开机或重新启动的时间,如果描述信息是“事件服务已停止”,即代表计算机的关机时间。
      

  4.   

    用wmi能获取windows的安装时间,估计开关机时间也能获取~,搜一下msdn或者goagle吧~~
      

  5.   

    C#命名空间 System.Diagnostics.EventLog using(System.Diagnostics.EventLog el = new System.Diagnostics.EventLog())
    {
        el.Log = "Application";   // el.Log 取值 是 Application、System 和 Security
        // 用el操作日志记录 
    }
      

  6.   

    点开始,运行,输入schedlgu.txt回车 看到这个文件.你就知道该怎么处理了.!我是来接分的!
      

  7.   

    看了你的问题,想到了第一种办法:
    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这个函数,获取传递给你程序窗口的消息,如果是关机,那么会有关机的消息传递过来的。
      

  8.   

    el.Log = "System";
     
    查找 事件ID = 6006 的时间,这是每天的关机时间。
      

  9.   

    查找 事件ID = 6005 的时间,这是每天的开机时间。
        事件ID = 6006 的时间,这是每天的关机时间。
      

  10.   


    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());
            }
        }
    }