ネットワークコンピュータの日付・時間を取得          <TOP>


NetRemoteTOD サーバーの時間を取得
NetApiBufferFree バッファの解放
CopyMemory ある位置から別の位置にメモリブロックを移動
MultiByteToWideChar ANSI文字列をUnicode文字列に変換
 

例では、ローカルコンピュータおよびネットワークコンピュータ(\\VersaPro)の日付・時間を取得しています。

 

'================================================================
'= ネットワークコンピュータの日付・時間を取得
'=     (NetRemoteTOD.bas)
'================================================================
#include "Windows.bi"

' サーバーの時間を取得
Declare Function Api_NetRemoteTOD& Lib "Netapi32" Alias "NetRemoteTOD" (UncServerName As Any, BufferPtr&)

' バッファの解放
Declare Function Api_NetApiBufferFree& Lib "netapi32" Alias "NetApiBufferFree" (lpbyteptr&)

' ある位置から別の位置にメモリブロックを移動
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, ByVal hpvSource&, ByVal cbCopy&)

' ANSI文字列をUnicode文字列に変換
Declare Function Api_MultiByteToWideChar& Lib "Kernel32" Alias "MultiByteToWideChar" (ByVal CodePage&, ByVal dwFlags&, ByVal lpMultiByteStr$, ByVal cchMultiByte&, ByVal lpWideCharStr$, ByVal cchWideChar&)

#define CP_ACP 0                        'ANSIコードページ
#define CP_MACCP 2                      'Macintoshコードページ
#define CP_OEMCP 1                      'OEMコードページ
#define CP_SYMBOL 42                    'シンボルコードページ(Windows2000・XP)
#define CP_THREAD_ACP 3                 '呼び出しスレッドのANSIコードページ(Windows2000・XP)
#define CP_UTF7 65000                   'UTF-7を使用して変換(Windows98・Me・NT4.0以降)
#define CP_UTF8 65001                   'UTF-8を使用して変換(Windows98・Me・NT4.0以降)これを指定した場合、dwFlagsパラメータは0

Type TIME_OF_DAY_INFO
    tod_elapsedt  As Long
    tod_msecs     As Long          '起動からの経過
    tod_hours     As Long
    tod_mins      As Long
    tod_secs      As Long
    tod_hunds     As Long          '1/100
    tod_timezone  As Long
    tod_tinterval As Long
    tod_day       As Long
    tod_month     As Long
    tod_year      As Long
    tod_weekday   As Long
End Type

Var Shared List1 As Object
Var Shared Radio1 As Object
Var Shared Radio2 As Object
Var Shared Button1 As Object

List1.Attach GetDlgItem("List1") : List1.SetFontSize 14
Radio1.Attach GetDlgItem("Radio1") : Radio1.SetFontSize 14
Radio2.Attach GetDlgItem("Radio2") : Radio2.SetFontSize 14
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

'================================================================
'=
'================================================================
Declare Function Index bdecl () As Integer
Function Index()
    Index = Val(Mid$(GetDlgRadioSelect("Radio1"), 6)) - 1
End Function

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var todi As TIME_OF_DAY_INFO
    Var Buff As String                '元の文字列
    Var wBuff As String               '変換先文字列
    Var wBuffLen As Long              '変換先文字数
    Var BufPtr As Long
    Var Ret As Long
    
    'サーバー名を設定
    Select Case Index
        'ローカルコンピュータの場合
        Case 0
            Buff = Chr$(0)
        'ネットワークコンピュータの場合(エラー処理なし)
        Case 1
            Buff = "\\VersaPro" & Chr$(0)
    End Select
    wBuff = String$(256, Chr$(0))

    'Unicodeに変換
    wBuffLen = Api_MultiByteToWideChar(CP_ACP, 0, Buff, -1, wBuff, 0)
    Ret = Api_MultiByteToWideChar(CP_ACP, 0, Buff, -1, wBuff, wBuffLen)
    wBuff = Left$(wBuff, (wBuffLen - 1) * 2)

    'リモートコンピュータのシステム時間を取得
    Ret = Api_NetRemoteTOD(wBuff, BufPtr)

    'バッファを構造体にコピー
    CopyMemory todi, ByVal BufPtr, Len(todi)

    'メモリを解放
    If BufPtr <> 0 Then
        Ret = Api_NetApiBufferFree(BufPtr)
    End If

    List1.Resetcontent

    List1.AddString "1970/1/1 GMT 〜 " & Trim$(Str$(todi.tod_elapsedt)) & "秒"
    List1.AddString Trim$(Str$(todi.tod_msecs)) & "ミリ秒"
    List1.AddString Trim$(Str$(todi.tod_hours)) & "時"
    List1.AddString Trim$(Str$(todi.tod_mins)) & "分"
    List1.AddString Trim$(Str$(todi.tod_secs)) & "秒"
    List1.AddString Trim$(Str$(todi.tod_hunds)) & "1/100秒"
    List1.AddString Trim$(Str$(todi.tod_timezone)) & "分(タイムゾーン)"
    List1.AddString Trim$(Str$(todi.tod_tinterval)) & "1/10000秒(インターバル)"
    List1.AddString Trim$(Str$(todi.tod_year)) & "年"
    List1.AddString Trim$(Str$(todi.tod_month)) & "月"
    List1.AddString Trim$(Str$(todi.tod_day)) & "日"
    List1.AddString KMid$("日月火水木金土", todi.tod_weekday + 1, 1) & "曜日"
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End