关于对系统时间的控制(100分)

  • 主题发起人 主题发起人 Delpher
  • 开始时间 开始时间
D

Delpher

Unregistered / Unconfirmed
GUEST, unregistred user!
如何实现对系统时间的限制,即不允许非法用户使用控制面板中的“日期/时间”随意
更改系统时间?再换句话说,就是如何锁定“日期/时间”选项?请高手赐教!!
 
看出问题了,你是想发共享版吧?
可以不限制时间,限制次数呀。这样相对好做一些。
否则,可以将上次使用时间记录在注册表中,每次比较,退出的时候再次写入注册表,这样
用户最多能够使用 (你希望的天数×24小时)。足够了。[:)]
 
將timedate.cpl改個名字就可以了,別人就打不開控制面版的時間日期了
不過別人可以拷貝一個過來
 
你可以运行软件时自动记录当时时间,以后每次都与系统时间比较即可!
 
控制面板禁用一点用没有。稍懂点的人可以开个dos窗,用date就可以随便改。即使做个驱动监视,
也可以在cmos中改。
 
yzhshi:你好!你的方法对我很有启发,谢谢!不过,这次这个软件因为需要调用系
统时间用以决定某些菜单的状态,所以很担心系统时间被任意修改,我曾想使用全局
变量对前后两个时间进行比较来控制时间(如果变化超出一定范围就是被非法修改了)
但不知是不是有更好的方法,所以就发了这个贴子,感谢你的支持!
Luyear:你的方法一针见血,很合我意,但是因为我从前不曾用过此项方法,所以很
想知道,如果需要的话,我再将TimeDate.cpl改回这个文件名(包括扩展名)是不是不
会对系统构成任何影响?
 
nunimao说的也是,所以看来还是从程序内部控制为好,不知是否还有其它高见?谢谢!
 
如果别人改CMOS怎么办?那你的程序不4悄悄了?
不过,如果不考虑到这个的话,可以用下面的方法:
在Windows中,有一个消息,用于通知所有的程序,系统的时间已经改变:
WM_TIMECHANGE,自己处理这个消息就可以了!不管是在DOS窗口,还是在Windows里面,
还是使用控制面板,都能收到这个消息,你收到这个消息的时候,把时间改回去就可以了。
unit Unit1;

interface

uses
; Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
; Dialogs;

type
; TForm1 = class(TForm)
; private
; ; { Private declarations }
; ; procedure WMtimechange(var msg:TMessage);message wm_TimeChange;
; public
; ; { Public declarations }
; end;

var
; Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMtimechange(var msg: TMessage);
begin
; ShowMessage('Time!');
end;

end.
 
KingRon:目前为止,你的解决方案最有创意!但我想知道,这个消息是发生在更改前,
还是更改后?如果系统时间已经更改,那么在哪里才能找到正确的时间?我是指除了通
过类似于Time()的函数,如何才能在程序的控制下自动地恢复成正确的时间?或者有没
有这种可能?
 
你自己不会测试一下吗?难道要我写出完全的代码?
当然是在更改之后发生这个消息,至于找到正确的时间,很多的方法,例如:
你的程序启动的时候,记录下正确的时间,收到TimeChange消息之后,用Gettickcount
在+上你记录下的时间,就是正确的时间,Set回去就可以了!当然可以用程序自己修改回去!
 
谢谢大家。已将分数发出。多少大家包涵!
 
多人接受答案了。
 
后退
顶部