tzz365 发表于 2010-9-14 21:44:19

修改源码(感谢xyold1 帮助解释)已解决

本帖最后由 tzz365 于 2010-9-14 22:00 编辑

#NoTrayIcon
#include <Date.au3>
#include <Misc.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt("WinTitleMatchMode", 2);标题的任意子串皆可匹配
Opt("GUICloseOnESC", 0);在按下 ESC 时不退出

If _Singleton(@ScriptName, 1) = 0 Then
      MsgBox(16, "警告", "该程序已经运行,禁止重复运行!", 5)
      Exit
EndIf

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("时间校准器", 200, 100)
$Button1 = GUICtrlCreateButton("校准", 50, 25, 100, 50)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
      $nMsg = GUIGetMsg()
      Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit

                Case $Button1
                        GUICtrlSetState($Button1,$GUI_DISABLE)
                        $_Now_date = _GetSrv_Date()
                        $_Now_Splt = StringSplit($_Now_date, " ")
                        $NowData = StringSplit($_Now_Splt, "-")
                        $NowTime = StringSplit($_Now_Splt, ":")
                        _SetDate($NowData, $NowData, $NowData)
                        _SetTime($NowTime, $NowTime, $NowTime)
                        GUICtrlSetState($Button1,$GUI_ENABLE)
                        MsgBox(64, "提示", "时间校准完成!", 5)
      EndSwitch
WEnd
Func _GetSrv_Date()
      Local $_Srvlist = ["time-nw.nist.gov", _
                        "time-a.nist.gov", _
                        "time-b.nist.gov", _
                        "time-a.timefreq.bldrdoc.gov", _
                        "time-b.timefreq.bldrdoc.gov", _
                        "time-c.timefreq.bldrdoc.gov", _
                        "utcnist.colorado.edu", _
                        "time.nist.gov", _
                        "nist1.datum.com", _
                        "nist1.dc.glassey.com", _
                        "nist1.ny.glassey.com", _
                        "nist1.sj.glassey.com", _
                        "nist1.aol-ca.truetime.com", _
                        "nist1.aol-va.truetime.com"]
      UDPStartup()
      Local $_Time_Srv
      For $x = 0 To UBound($_Srvlist) - 1
                $_Time_Srv = $_Srvlist[$x]
                Local $Socket = UDPOpen(TCPNameToIP($_Time_Srv), 123)
                If @error <> 0 Then ContinueLoop
                $Status = UDPSend($Socket, MakePacket())
                If $Status = 0 Then ContinueLoop
                Local $Data = "", $i = 0
                While $Data = ""
                        $i += 1
                        $Data = UDPRecv($Socket, 100)
                        If $i = 5 Then ContinueLoop (2)
                        Sleep(88)
                WEnd
                UDPCloseSocket($Socket)
                UDPShutdown()
                ExitLoop
      Next
      If $Data = "" Then Return 0
      $Data = UnsignedHexToDec(StringMid($Data, 83, 8))
      $Data = _DateTimeFormat(_DateAdd("s", $Data, "1900/01/01 08:00:00"), 0)
      Return $Data
EndFunc   ;==>_GetSrv_Date

Func MakePacket()
      Local $P, $D = "1b0e01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
      While $D
                $P &= Chr(Dec(StringLeft($D, 2)))
                $D = StringTrimLeft($D, 2)
      WEnd
      Return $P
EndFunc   ;==>MakePacket

Func UnsignedHexToDec($_Data)
      Return Dec(StringTrimRight($_Data, 1)) * 16 + Dec(StringRight($_Data, 1))
EndFunc   ;==>UnsignedHexToDec

在这儿感谢(shenrenba )提供源码。 想请教生成EXE后, 自动调时间, 然不需要按下$Button1控件

xyold1 发表于 2010-9-14 21:49:13

本帖最后由 xyold1 于 2010-9-14 21:51 编辑

#NoTrayIcon
#include <Date.au3>
#include <Misc.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt("WinTitleMatchMode", 2);标题的任意子串皆可匹配
Opt("GUICloseOnESC", 0);在按下 ESC 时不退出

If _Singleton(@ScriptName, 1) = 0 Then
      MsgBox(16, "警告", "该程序已经运行,禁止重复运行!", 5)
      Exit
EndIf
$_Now_date = _GetSrv_Date()
                        $_Now_Splt = StringSplit($_Now_date, " ")
                        $NowData = StringSplit($_Now_Splt, "-")
                        $NowTime = StringSplit($_Now_Splt, ":")
                        _SetDate($NowData, $NowData, $NowData)
                        _SetTime($NowTime, $NowTime, $NowTime)
                        
                        MsgBox(64, "提示", "时间校准完成!", 5)

Func _GetSrv_Date()
      Local $_Srvlist = ["time-nw.nist.gov", _
                        "time-a.nist.gov", _
                        "time-b.nist.gov", _
                        "time-a.timefreq.bldrdoc.gov", _
                        "time-b.timefreq.bldrdoc.gov", _
                        "time-c.timefreq.bldrdoc.gov", _
                        "utcnist.colorado.edu", _
                        "time.nist.gov", _
                        "nist1.datum.com", _
                        "nist1.dc.glassey.com", _
                        "nist1.ny.glassey.com", _
                        "nist1.sj.glassey.com", _
                        "nist1.aol-ca.truetime.com", _
                        "nist1.aol-va.truetime.com"]
      UDPStartup()
      Local $_Time_Srv
      For $x = 0 To UBound($_Srvlist) - 1
                $_Time_Srv = $_Srvlist[$x]
                Local $Socket = UDPOpen(TCPNameToIP($_Time_Srv), 123)
                If @error <> 0 Then ContinueLoop
                $Status = UDPSend($Socket, MakePacket())
                If $Status = 0 Then ContinueLoop
                Local $Data = "", $i = 0
                While $Data = ""
                        $i += 1
                        $Data = UDPRecv($Socket, 100)
                        If $i = 5 Then ContinueLoop (2)
                        Sleep(88)
                WEnd
                UDPCloseSocket($Socket)
                UDPShutdown()
                ExitLoop
      Next
      If $Data = "" Then Return 0
      $Data = UnsignedHexToDec(StringMid($Data, 83, 8))
      $Data = _DateTimeFormat(_DateAdd("s", $Data, "1900/01/01 08:00:00"), 0)
      Return $Data
EndFunc   ;==>_GetSrv_Date

Func MakePacket()
      Local $P, $D = "1b0e01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
      While $D
                $P &= Chr(Dec(StringLeft($D, 2)))
                $D = StringTrimLeft($D, 2)
      WEnd
      Return $P
EndFunc   ;==>MakePacket

Func UnsignedHexToDec($_Data)
      Return Dec(StringTrimRight($_Data, 1)) * 16 + Dec(StringRight($_Data, 1))
EndFunc   ;==>UnsignedHexToDec

建议你先修改一下标题

tzz365 发表于 2010-9-14 21:58:41

谢谢。 我调好了。 太感谢了。

tzz365 发表于 2010-9-14 22:27:44

TrayTip("时间同步完成!", 5000, 1)

                        Sleep(5000)

xyold1 请问下这儿加在哪儿才会生效, 能看到效果?

xyold1 发表于 2010-9-14 23:26:17

把第一行去掉,加在消息框 出现之前
页: [1]
查看完整版本: 修改源码(感谢xyold1 帮助解释)已解决