用Dos的“net time //218.17.xx.xx”这个命令得到主机的时间,在Delphi中怎样实现! (100分)

  • 主题发起人 主题发起人 paf
  • 开始时间 开始时间
P

paf

Unregistered / Unconfirmed
GUEST, unregistred user!
Dos的“net time //218.17.xx.xx”这个命令是得到主机的时间,
在Delphi怎样用函数实现!
 
你必须先net use //218.17.xx.xx,然后才可以.
有一些功能在DOS下十分方便,Delphi却不知怎么办,不如直接按DOS方式执行:
createAndRunBat('net use //218.17.xx.xx /user:用户名 口令'#13#10+'net time //218.17.xxx.xxx',true,'0.$$$');
应该可以.


function createAndRunBat(ss:String;killBat:boolean;resultFileName:String):boolean; //建立并且运行批处理文件
var
BatFile: TFileStream;
batFileName,tmpS:String;
ProcessInfo: TProcessInformation;
StartUpInfo: TStartupInfo;
ExitCode:DWORD;
begin
batFileName:=ExtractFilePath(ParamStr(0)) + '$$a$$.bat';
BatFile := TFileStream.create(batFileName,fmCreate);
ss:=ss+#13#10;
BatFile.Write(ss[1],length(ss));
if killBat then
begin
tmpS:='@del %0'+#13#10+'@cls'+#13#10+'@exit';
batFile.Write(tmpS[1],length(tmpS));
end;
BatFile.Free;

FillChar(StartUpInfo, SizeOf(StartUpInfo), $00);
StartUpInfo.dwFlags := STARTF_USESHOWWINDOW;
StartUpInfo.wShowWindow := SW_Hide;

if resultFileName<>'' then batFileName:=batFileName+' >'+resultFileName;
result:=CreateProcess(nil, PChar(BatFileName), nil, nil,False, IDLE_PRIORITY_CLASS, nil, nil, StartUpInfo,ProcessInfo);
//CheckResult(result);
WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
//

if result then
begin
WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess,ExitCode);

CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
end;
end;
 
net time是连接并同步时间,indy里面有ntp控件可以使用。
 
with idsntp1 do begin
if Length(Edit1.Text) > 8 then
Host := Edit1.Text
else
Host := 'time.windows.com';
Active := true;
end;
Label1.Caption := '服务器上的时间是:' + Datetimetostr(idsntp1.DateTime);
if ckSyncTime.Checked Then
if idsntp1.SyncTime then
Application.MessageBox('同步时间成功!','成功',0);
 
被取得时间的主机应该有时间服务才行。
 
我测试的机子是一般人上网的机子,在Dos下“net time //218.17.xx.xx”就可以查到时间!
“LuJuhe”所说的那个组件和"NMDayTime"组件功能是否相同,如果相同的话,要服务
端支持才可以得到时间,打开的端口默认是 37 一般用户的上网机子,我想应该没有这种
服务!
我查过自己的机子138号端口是打开的,我看了看端口说明: nbdatagram
不知道“net time ”是不是靠这个端口提供读取时间的!




 
那你就直接用 createAndRunBat('net time //218.17.xxx.xxx',true,'0.$$$');
结果在 0.$$$ 文件中.
 
多人接受答案了。
 
后退
顶部