在VBA中,前台工作站如何得到后台服务器的日期?? - Access 技术交流论坛 ...
Option Compare Database
Option Explicit

'***************** Code Start ******************
'This code was originally written by Terry Kreft.
'It is not to be altered or distributed,
'except as part of an application.
'You are free to use it in any application,
'provided the copyright notice is left unchanged.
'
'Code Courtesy of
'Terry Kreft
Private Const STARTF_USESHOWWINDOW& = &H1
Private Const NORMAL_PRIORITY_CLASS = &H20&
Private Const INFINITE = -1&

Private Type STARTUPINFO
    cb As Long
    lpReserved As String
    lpDesktop As String
    lpTitle As String
    dwX As Long
    dwY As Long
    dwXSize As Long
    dwYSize As Long
    dwXCountChars As Long
    dwYCountChars As Long
    dwFillAttribute As Long
    dwFlags As Long
    wShowWindow As Integer
    cbReserved2 As Integer
    lpReserved2 As Long
    hStdInput As Long
    hStdOutput As Long
    hStdError As Long
End Type

Private Type PROCESS_INFORMATION
    hProcess As Long
    hThread As Long
    dwProcessID As Long
    dwThreadID As Long
End Type

Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal _
    hHandle As Long, ByVal dwMilliseconds As Long) As Long
   
Private Declare Function CreateProcessA Lib "kernel32" (ByVal _
    lpApplicationName As Long, ByVal lpCommandLine As String, ByVal _
    lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, _
    ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, _
    ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, _
    lpStartupInfo As STARTUPINFO, lpProcessInformation As _
    PROCESS_INFORMATION) As Long
   
Private Declare Function CloseHandle Lib "kernel32" (ByVal _
    hObject As Long) As Long
   
Public Sub ShellWait(Pathname As String, Optional WindowStyle As Long)
    Dim proc As PROCESS_INFORMATION
    Dim start As STARTUPINFO
    Dim ret As Long
    ' 初始化 STARTUPINFO 结构:
    With start
        .cb = Len(start)
        If Not IsMissing(WindowStyle) Then
            .dwFlags = STARTF_USESHOWWINDOW
            .wShowWindow = WindowStyle
        End If
    End With
    ' 开始调用外部程序:
    ret& = CreateProcessA(0&, Pathname, 0&, 0&, 1&, _
            NORMAL_PRIORITY_CLASS, 0&, 0&, start, proc)
    ' 等待外部程序执行完毕:
    ret& = WaitForSingleObject(proc.hProcess, INFINITE)
    ret& = CloseHandle(proc.hProcess)
End Sub
'***************** Code End ****************

Function ReadTimeFromServer(IPnm As String) As Boolean
On Error GoTo err1
    '以下的 SHELLWAIT 函数是
    '《方法二:等待调用外部程序执行完毕》

    '一文中所定义的自定义函数,用於等待 SHELL 执行完毕後再执行下一步。
    '你还可以叁考:《如何解决shell执行外部程序的等待问题?(同步/异步)》

    'ShellWait "cmd.exe /c NET TIME \\192.168.0.203 > c:\temp.txt", vbHide
    ShellWait "cmd.exe /c NET TIME \\" & IPnm & " > c:\temp.txt", vbHide
    'ShellWait "cmd.exe /c NET TIME \\192.168.0.203 /SET"
    '注意,如果是要同步的话请调用:ShellWait "cmd.exe /c NET TIME \\SERVER_COMPUTERNAME /SET"
    Dim fs
    Dim A
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set A = fs.OpenTextFile("c:\temp.txt", 1)
    Dim C
    C = A.readline
    A.Close
    Debug.Print C
    '得到结果为:\\comet-2003 的当前时间是 2005/4/20 上午 09:49
    '然後对 C 做一些判断即可获得指定服务器的当前时间了
    Debug.Print CDate(Mid(C, InStr(1, C, "当前时间是") + 5))
    'MsgBox CDate(Mid(c, InStr(1, c, "当前时间是") + 5))
    'MsgBox DateValue(CDate(Mid(c, InStr(1, c, "当前时间是") + 5)))
    netime = CDate(Mid(C, InStr(1, C, "当前时间是") + 5))
    'netdate = DateValue(CDate(Mid(c, InStr(1, c, "当前时间是") + 5)))
    netdate = DateValue(netime)
Exit Function

err1:
    'MsgBox Now()
    'MsgBox Date
    netime = Now
    netdate = Date
End Function
郑重声明:资讯 【在VBA中,前台工作站如何得到后台服务器的日期?? - Access 技术交流论坛 ...】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——