我现在需要做一个服务程序,每天一定时间干某项任务。如果系统时间被用户改变了我怎么知道呢?服务程序没有窗口,没办法接收WM_TIMECHANGE事件。该怎么做呢?用个TIMER不断检测系统时间?可是在特定时间启动任务后,就不应该再启动该任务了,可是24小时后又需要启动。如何好呢?

解决方案 »

  1.   

    你可以生成一个hide窗口,接收消息
    或自己驱动消息队列
      

  2.   

    可是在服务程序里怎么创建窗口呢?我建了一个CDialog类,但创建时错误。不知该如何?
      

  3.   

    不就是一个Windows消息么?你自己建立消息映射,截取这个消息试试
      

  4.   

    1)关于如何服务程序里怎么创建窗口呢?参考这个:
    《如何在服务(Service)程序中显示对话框》配套源代码 
    http://www.vckbase.com/code/listcode.asp?mclsid=13&sclsid=13192)如果系统时间被用户改变了我怎么知道呢?未登陆不会改变,所以设置权限来作。3)可是24小时后又需要启动。设个定时任务吧!
    任务计划程序概述
    使用任务计划程序,您可以安排任何脚本、程序或文档在最方便的时候运行。每次启动 Windows 2000 时,任务计划程序也会启动,并在后台运行。使用任务计划程序可以完成以下任务:计划让任务在每天、每星期、每月或某些时刻(如系统启动时)运行。 
    更改任务的计划。 
    停止计划的任务。 
    自定义任务如何在计划的时间运行。
    这个是地址:用VB讲了一下。
    http://www.microsoft.com/china/technet/prodtechnol/windows2000serv/downloads/taskschd.asp
      

  5.   

    主要是NetScheduleJobAdd。
    这个是delphi的,就是没找到VC的:
    http://www.52delphi.com/tips/delphi/system/44102302101.htm看看msdn吧:
    NetScheduleJobAddThe NetScheduleJobAdd function submits a job to run at a specified future time and date. This function requires that the schedule service be started at the computer to which the job is submitted.NET_API_STATUS NetScheduleJobAdd(
      LPCWSTR Servername,
      LPBYTE Buffer,
      LPDWORD JobId
    );