#freeze
[[ntpサーバに問い合わせ]]~
[[.NET]]

ネットに時間を問い合わせるのはいいけど、実際に時刻設定はどうするのって事よね。

これには複数の方法があるらしいわ。

* 時刻合わせ時の注意 [#n07963de]

Vista以降のWindowsだと、たぶん管理者(Administrator)じゃないとプログラムから時刻変更できないのよね。何もなくスルーされるかエラーになるはずよ。

そんな時は「 ''管理者で実行'' 」してね。

* 設定方法 [#w128143c]

** VB.NETを使う方法 [#f5194f9c]

実はVB.NETにAPIがあるらしいのね。でも個人的理由から今回は避けます。

** WindowsのDLLを使う方法 [#i8593cc0]

すごくWindows的な解法だけど、ちゃんと動くわ。~
なお、このコードのオリジナルは、 [[こっち>http://dobon.net/vb/dotnet/system/setlocaltime.html]] ね。今回は苦手分野なので全面的にお世話になったの。さすがの老舗よね。

 using System.Runtime.InteropServices;
 :
 : 
 [StructLayout(LayoutKind.Sequential)]
 public struct SystemTime
 {
    public ushort wYear;
    public ushort wMonth;
    public ushort wDayOfWeek;
    public ushort wDay;
    public ushort wHour;
    public ushort wMinute;
    public ushort wSecond;
    public ushort wMiliseconds;
 }

 [DllImport("kernel32.dll")]
 public static extern bool SetLocalTime(
    ref SystemTime sysTime);
 
 /// <summary>
 /// 現在のシステム日時を設定する
 /// </summary>
 /// <param name="dt">設定する日時</param>
 public static void SetNowDateTime(DateTime dt)
 {
    //システム日時に設定する日時を指定する
    SystemTime sysTime = new SystemTime();
    sysTime.wYear = (ushort) dt.Year;
    sysTime.wMonth = (ushort) dt.Month;
    sysTime.wDay = (ushort) dt.Day;
    sysTime.wHour = (ushort) dt.Hour;
    sysTime.wMinute = (ushort) dt.Minute;
    sysTime.wSecond = (ushort) dt.Second;
    sysTime.wMiliseconds = (ushort) dt.Millisecond;
    //システム日時を設定する
    SetLocalTime(ref sysTime);
 }


* 本ページの記事の参考にしたサイト [#xfca0e8b]

:システム時計の日時を設定する(DOBON.NET)|http://dobon.net/vb/dotnet/system/setlocaltime.html

Formsの記事はバッチリだし、とにかく細かいTipsが素晴らしいの。さすが老舗よね。

反面、WPFの記事がないので百%頼りきりはまずい(※)と思うけど、それを差し置いてあまりある内容よ。先人の知恵に感謝しつつ見せていただきましょう。

(※:たとえばWPFのコンポーネント使いたい時、ここと一部の情報記事だけ見ていると、WPFにはwebBrowserがないとか勘違いする事があるみたいなの。上記サイトの情報は本当に素晴らしいんだけど、素晴らしいがゆえに気をつけましょうって事ね)

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS