Board logo

标题: [问题求助] 求助解决VBS获取网络上的时间校准本机系统时间的代码报错的原因 [打印本页]

作者: hnldwhm52    时间: 2015-1-17 12:17     标题: 求助解决VBS获取网络上的时间校准本机系统时间的代码报错的原因

老师下了以下VBS校准系统时间在有线网络行,无线就不行,请修改!!谢谢!!
http://www.bathome.net/redirect. ... 4203&ptid=21616
运行vbs显示提示如下:
作者: hnldwhm52    时间: 2015-1-17 22:17

回复 2# yu2n
yu2n老师您好!!
        我是新手,是来学习的!!

作者: yu2n    时间: 2015-1-18 20:29

回复 2# hnldwhm52

这个『有线网络行,无线就不行』问题太广,但是跟VBS有关系么?
你要真觉得是无线网络问题,去把无线网络搞好不就行了。
你要真是来问问题的,把系统、运行环境、怎么操作出错的,给写明白了。
作者: apang    时间: 2015-1-20 21:26

我来改一下,不是因为lz所说的“无线网络不能用”,而是为了win7开启uac时双击能用,另外时区更改了不受影响
  1. call runAsAdmin()
  2. strNewDateTime = convertDateTime(getBaiduTime())
  3. call syncDateTime(strNewDateTime, Now())
  4. Function getBaiduTime()
  5.     Dim strUrl, strText
  6.     strUrl = "http://open.baidu.com/special/time/"
  7.     With CreateObject("MSXML2.XmlHttp")
  8.         .Open "GET", strUrl, False
  9.         .Send()
  10.         strText = .responseText
  11.     End With
  12.     strText = Split(LCase(strText), "window.baidu_time(")(1)
  13.     getBaiduTime = Int(Left(strText, 13)/1000)
  14. End Function
  15. Function convertDateTime(intUnixTime)
  16.     Dim objWMI, colOSes, objOS, tmZone
  17.     Set objWMI = GetObject("winmgmts:\\.\root\cimv2")
  18.     Set colOSes =objWMI.ExecQuery("Select * from Win32_OperatingSystem")
  19.     For Each objOS in colOSes
  20.         tmZone = objOS.CurrentTimeZone
  21.     Next
  22.     intUnixTime = intUnixTime + tmZone * 60
  23.     convertDateTime = DateAdd("s", intUnixTime, "1970-1-1 00:00:00")
  24. End Function
  25. Sub syncDateTime(ByVal strNewDateTime, strOldDateTime)
  26.     Dim ss, objDateTime, dtmNewDateTime
  27.     ss = DateDiff("s", strOldDateTime, strNewDateTime)
  28.     If Abs(ss) < 1 Then
  29.         MsgBox "本机时间非常准确无需校对!"
  30.         Exit Sub
  31.     End If
  32.     Set objDateTime = CreateObject("WbemScripting.SWbemDateTime")
  33.     objDateTime.SetVarDate strNewDateTime, true
  34.     dtmNewDateTime = objDateTime.Value
  35.     Dim objWMI, colOSes, objOS
  36.     Set objWMI = GetObject("winmgmts:{(Systemtime)}\\.\root\cimv2")
  37.     Set colOSes =objWMI.ExecQuery("Select * from Win32_OperatingSystem")
  38.     For Each objOS in colOSes
  39.         objOS.SetDateTime dtmNewDateTime
  40.     Next
  41.     MsgBox "校准前:" & strOldDateTime & vbLf & "校准后:" & Now()
  42. End Sub
  43. Sub runAsAdmin()
  44.     Dim objWMI, colOSes, objOS, strVer
  45.     Set objWMI = GetObject("winmgmts:\\.\root\cimv2")
  46.     Set colOSes =objWMI.ExecQuery("Select * from Win32_OperatingSystem")
  47.     For Each objOS in colOSes
  48.         strVer = Split(objOS.Version, ".")(0)
  49.     Next
  50.     If CInt(strVer) >= 6 Then
  51.         Dim objShell
  52.         Set objShell = CreateObject("Shell.Application")
  53.         If WScript.Arguments.Count = 0 Then
  54.             objShell.ShellExecute "WScript.exe", _
  55.                 """" & WScript.ScriptFullName & """ OK", , "runAs", 1
  56.             Set objShell = Nothing
  57.             WScript.Quit
  58.         End If
  59.     End If
  60. End Sub
复制代码

作者: ygqiang    时间: 2015-1-21 08:00

本帖最后由 ygqiang 于 2015-1-21 08:37 编辑
我来改一下,不是因为lz所说的“无线网络不能用”,而是为了win7开启uac时双击能用,另外时区更改了不受影响 ...
apang 发表于 2015-1-20 21:26



    而是为了win7开启uac时双击能用???

这个是啥意思?你的vbs代码,与1楼的相比,有啥差别呢?


明白了。多谢。。。
有人说:“win7下,不是所有vbs都可以运行  包括其它一些程序  有些需要权限
call runAsAdmin()    这个就是获取win7下管理员权限的命令

下面有个runAsAdmin()   自定义函数,作用就是获取权限”
作者: hnldwhm52    时间: 2015-1-21 10:45

我来改一下,不是因为lz所说的“无线网络不能用”,而是为了win7开启uac时双击能用,另外时区更改了不受影响 ...
apang 发表于 2015-1-20 21:26

i
谢谢apang老师旳热心指教解答!
作者: yiwuyun    时间: 2015-1-22 20:28

没看懂那个OK是什么意思,如果没有,就会出问题,但如果改成任何其他字符串,都不会出问题。
objShell.ShellExecute "WScript.exe", """" & WScript.ScriptFullName & """ OK", , "runAs", 1
按一些资料的解释,第二个参数应该是WScript.exe的参数,但它需要这个OK参数吗?
作者: apang    时间: 2015-1-22 23:56

回复 7# yiwuyun


    如你所说,OK就是一参数名字,可以用其它字符替代,但它是WScript.exe的参数,WScript.Arguments.Count 就是WScript.exe的参数个数
如果把它当作objShell.ShellExecute 的参数,那它是多余的
作者: yiwuyun    时间: 2015-1-23 07:20

本帖最后由 yiwuyun 于 2015-1-23 07:29 编辑

谢谢,想了一晚上,懂了,ok不是要传给ws的,而是要传给vbs的。代码很清晰,写得很好。比楼主的那个代码清晰多了。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2