ネットワークコンピュータの日付・時間を取得 <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