Delphi如何实现gpedit.msc里的更改系统时间

yanele 2009-12-18 11:00:53
我知道可以这样手工操作控制一般用户不能手工更改系统时间:
1、开始——运行——gpedit.msc;
2、依次点开计算机配置——Windows设置——安全设置——本地策略——用户权利指派——更改系统时间
3、将里面的用户信息全部删除即可;

由于电脑数量较多,这样手工去改很麻烦,而且操作者很容易记下来,然后再改回来,起不到效果。
这样做的目的:不让客户端任意修改系统日期,否则公司的管理软件的系统日志就有问题,很难查找原因。
看网上介绍360就有这个功能,冰点原还也有这个功能,所以现在求用Delphi写程序怎么实现?

或者有更高明(鲜为人知)的方法,不从gpedit.msc里进行修改也可。

总之一句话:求用Delphi程序实现计算机不能修改系统日期!
...全文
441 15 打赏 收藏 举报
写回复
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
huhuc 2009-12-25
  • 打赏
  • 举报
回复
监视下注册表就好了
或者看看JwaGPEdit.
yanele 2009-12-19
  • 打赏
  • 举报
回复
楼上的方法好像可行,但由于win2000与winXP的该文件目录不一致,我使用GetSystemDirectory()可获取相应目录,但这个目录好像是Char型,但那个过程是pwchar型,不知道怎么转!
hjkto 2009-12-18
  • 打赏
  • 举报
回复

procedure TForm1.Button1Click(Sender: TObject);
var
vHandle,v: THandle;
begin
RenameFile('C:\WINDOWS\system32\dllcache\TimeDate.cpl','C:\WINDOWS\system32\dllcache\TimeDate.cpl.bak');
RenameFile('C:\WINDOWS\system32\TimeDate.cpl','C:\WINDOWS\system32\TimeDate.cpl.bak');
sleep(8000);
vhandle:=findwindow(pchar('#32770'),pchar('Windows 文件保护'));
if vHandle = 0 then Exit;
vHandle := FindWindowEx(vHandle, 0, 'Button','取消');
PostMessage(vHandle, BM_Click, 0, 0);
v:= findwindow(pchar('#32770'),pchar('Windows 文件保护'));
if v = 0 then Exit;
v := FindWindowEx(v, 0, 'Button','是(&Y)');
PostMessage(v, BM_Click, 0, 0);

end;


你试试吧,我这里是没问题
hjkto 2009-12-18
  • 打赏
  • 举报
回复
我的系统是xpsp2,我测试可以,通过修改注册表可以达到关闭文件保护的目地
我想2000也一样
如果是sp3的话,关闭文件保护麻烦一点,不过,可以百度到
也是通过修改注册表

你手动删除或更改TimeDate.cpl,是不是有一个提示框给你,如果有的话,也可以给这个消息框发消息实现
模拟属标按下的动作
yanele 2009-12-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hjkto 的回复:]
注册表方法,刚才试了一下,不可行
在xp中将C:\WINDOWS\system32 下的文件cpl文件移到安全处或改名。系统中就无法修改时间了。

关闭文件保护
TimeDate.cpl把这个改一下名就可以限制修改系统时间了,这个我试了,可行
[/Quote]

这个方法虽然可行,但关闭文件保护不知道能不能用Delphi实现,并用Delphi实现修改TimeDate.cpl名字
如果系统是Win2000知道方法如何?
yanele 2009-12-18
  • 打赏
  • 举报
回复
怎么样关闭文件保护,用Delphi能实现吗?
hjkto 2009-12-18
  • 打赏
  • 举报
回复
你要关闭文件保护
yanele 2009-12-18
  • 打赏
  • 举报
回复
3楼的方法我也试过的,我不管改名,或是删除,系统都不会自动再生成一个!
hjkto 2009-12-18
  • 打赏
  • 举报
回复
注册表方法,刚才试了一下,不可行
在xp中将C:\WINDOWS\system32 下的文件cpl文件移到安全处或改名。系统中就无法修改时间了。
在xp中将C:\WINDOWS\system32 下的文件cpl文件移到安全处或改名。系统中就无法修改时间了。

关闭文件保护
TimeDate.cpl把这个改一下名就可以限制修改系统时间了,这个我试了,可行
yanele 2009-12-18
  • 打赏
  • 举报
回复
楼上的方法我昨天试过了,不是无法修改系统日期,而是无法打开注册表!
hjkto 2009-12-18
  • 打赏
  • 举报
回复
修改注册表:

允许:Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System]

"DisableRegistryTools"=dword:00000001

禁止:Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System]

“Disableregistrytools”=dword:00000000
hjkto 2009-12-18
  • 打赏
  • 举报
回复

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
procedure CloseWFP(DestFile: pwchar);
var
h: DWORD;
func: procedure(p1: Longint; p2: pwChar; p3: Longint); stdcall;
begin
h := LoadLibrary('sfc_os.dll');
@Func := GetProcAddress(h, lpcstr(5));
Func(0, DestFile, -1);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
CloseWFP('C:\WINDOWS\system32\TimeDate.cpl');
RenameFile('C:\WINDOWS\system32\TimeDate.cpl','C:\WINDOWS\system32\TimeDate.cpl.bak');
end;

end.


sp2中测试可以,在sp3中行不行,就不知道喽
gyk120 2009-12-18
  • 打赏
  • 举报
回复
直接调用过程即可,dllcache是文件夹,windows的dll备份文件夹
yanele 2009-12-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 hjkto 的回复:]
Delphi(Pascal) code
RenameFile('C:\WINDOWS\system32\dllcache\TimeDate.cpl','C:\WINDOWS\system32\dllcache\TimeDate.cpl.bak');
[/Quote]

这里的dllcache是文件夹吗?我电脑里怎么没有?
sleep(8000)之后的语句就不懂了!


[Quote=引用 10 楼 gyk120 的回复:]
也可以用sfc_os.dll的函数去关文件保护
procedure CloseWFP(DestFile: pwchar);
var
  h: DWORD;
  func: procedure(p1: Longint; p2: pwChar; p3: Longint); stdcall;
begin
  h := LoadLibrary('sfc_os.dll');
  @Func := GetProcAddress(h, lpcstr(5));
  Func(0, DestFile, -1);
end;

[/Quote]

直接调用这个过程吗?怎么执行呢?
gyk120 2009-12-18
  • 打赏
  • 举报
回复
也可以用sfc_os.dll的函数去关文件保护
procedure CloseWFP(DestFile: pwchar);
var
h: DWORD;
func: procedure(p1: Longint; p2: pwChar; p3: Longint); stdcall;
begin
h := LoadLibrary('sfc_os.dll');
@Func := GetProcAddress(h, lpcstr(5));
Func(0, DestFile, -1);
end;
相关推荐
发帖
Windows SDK/API

1177

社区成员

Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
帖子事件
创建了帖子
2009-12-18 11:00
社区公告
暂无公告