Nine MVP's Blog

27/03/2006

อ่ะนั่นแน มาเขียนโปรแกรมเปลี่ยนวันเวลาของเครื่องคอมเรากันเถอะ

Filed under: Computers and Internet — Nine MVP @ 5:46 pm
หลายคนสงสัยมานาน ๆ ๆ ๆ แล้วว่าเราจะแก้ไขเวลาเครื่องได้ยังงัย โดย Programmatic มาถึงเวลนี้ ผมเลยเสนอ appdominizer ตัวใหม่ ที่จะช่วยให้ท่านแก้ไขวันเวลาในเครื่องได้ดั่งใจหวัง แน่นอน งานนี้หนีไม่พ้น Win32 API อีกแล้ว
โฮ่มาเริ่มกันเลย
 
 
มาดู Class ที่ผมดัดแปลงมาจาก MS กันดีกว่า  (download code ด้านล่าง)
SystemTimes.cs
using System;

using System.Globalization;

using

System.Runtime.InteropServices;

namespace

SystemTimes

{

/// <summary>

/// Summary description for SystemTime.

/// </summary>

public class SystemTime

{

[DllImport("kernel32.dll",SetLastError=

true)]

private extern static void GetSystemTime(ref SYSTEMTIME lpSystemTime);

[DllImport("kernel32.dll",SetLastError=true) ]

private extern static uint SetSystemTime(ref SYSTEMTIME lpSystemTime);


public
SystemTime()

{}

private 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 wMilliseconds;

}

 

private SYSTEMTIME sysTime = new SYSTEMTIME();


///
<summary>

/// ใช้สำหรับตั้งค่าเวลาของเครื่อง

/// </summary>

/// <param name="dt"> วันเวลาที่ต้องการตั้งค่าใหม่ </param>

public void setDateTime(DateTime dt)

{

//แปลง TimeZone ให้เป็น UTC

dt = dt.ToUniversalTime();

sysTime.wYear = (

ushort)dt.Year;

sysTime.wMonth = (

ushort)dt.Month;

sysTime.wDayOfWeek = (ushort)dt.DayOfWeek;

sysTime.wDay = (

ushort)dt.Day;

sysTime.wHour = (

ushort)dt.Hour;

sysTime.wMinute = (ushort)dt.Minute;

sysTime.wSecond = (

ushort)dt.Second;

sysTime.wMilliseconds = (

ushort)dt.Millisecond;

//ตั้งเวลาใหม่

SetSystemTime(

ref sysTime);

}


///
<summary>

/// ใช้สำหรับ รับค่าเวลาของระบบ

/// </summary>

/// <returns></returns>

public DateTime GetDateTime()

{

GetSystemTime(

ref sysTime);

DateTime newDateTime =

new DateTime(sysTime.wYear,sysTime.wMonth,sysTime.wDay,

sysTime.wHour,sysTime.wMinute,sysTime.wSecond,sysTime.wMilliseconds);

//แปลง UTC จาก machine ไปเป็น TimeZone ณ ปัจจุบัน

newDateTime = newDateTime.ToLocalTime();

return newDateTime;

}

}

}

ตอนเรียกใช้  Code vb.net

Imports SystemTimes

Private systime As SystemTime

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    systime = New SystemTime

End Sub

Private Sub GetTime_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GetTime.Click

    DateTimePicker1.Value = systime.GetDateTime()

End Sub

Private Sub SetTime_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SetTime.Click

    systime.setDateTime(DateTimePicker2.Value)

    MsgBox("Now = " + Now + vbCrLf + "systime.GetDateTime() =" + systime.GetDateTime())

End Sub

มาดูผลการทำงานกัน

1. เปิดโปรแกรมขึ้นมาเทียบ กับ Date and Time Property ของ Windows

2. ต่อมาจะทำการตั้งค่าโดยใส่ วันที่ ๆ ต้องการลงไป ใน DateTimePicker ตัวล่าง โดยใส่ค่า 01/01/2550 01:00:00
และเวลาปัจจุบันตอนนี้คือ 25/03/2549 09:53:25

3. หลังกดปุ่ม Set DateTime ก็จะได้ผลลัพธ์ตามรูปข้างล่าง

สามารถ Dowload Code ของ Project Test นี้ ได้ที่ 
http://www.filelodge.com/files/hdd2/17512/Test_SystemTime.rar

Leave a Comment »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Create a free website or blog at WordPress.com.

%d bloggers like this: