محتویات سایت
        برچسب های محبوب 








 
   تغییر زمان و تاریخ ویندوز با استفاده از برنامه نویسی
  یکی از اعمالی که گاهی در برنامه های تحت ویندوز مورد نیاز می باشد، تغییر دادن زمان و تاریخ ویندوز می باشد که در این ترفند به انجام این عمل خواهم پرداخت.
   C#
   ۱۴۰۹۰
   دریافت فایل ضمیمه
   مرتضی صحراگرد
   ۱۳۸۷/۹/۱۳
نسخه قابل چاپ نسخه قابل چاپ

بروز رسانی:

این ترفند در تاریخ 87/10/23 بروز رسانی شد. در نسخه قبلی از یک API به نام SetLocalTime استفاده شده بود که گویا این تابع در برخی نسخه های ویندوز XP عملکرد صحیحی از خود نشان نمی دهد. لذا نسخه جدید را با استفاده از یک API دیگر به نام SetSystemTime نوشتم که به نظر می رسد مشکل مربوطه رفع شده است.

شروع:

چند روز قبل، یکی از دوستان سوالی پرسیده بود در مورد تغییر دادن زمان و تاریخ ویندوز با استفاده از برنامه نویسی.
جالب دانستم که روش مورد نظر را به شکل یک ترفند مطرح کنم.
تغییر دادن زمان و تاریخ ویندوز با استفاده از یک API به نام
SetSystemTime که در kernel32 قرار دارد، انجام می شود.
قبل از هر کاری باید فضای نامی زیر را به بالای کلاس خود اضافه کنید.

using System.Runtime.InteropServices;

API مورد نظر به شکل زیر تعریف می شود.

[DllImport("kernel32.dll")]

static extern bool SetSystemTime(ref SYSTEMTIME time);

همانطور که ملاحظه می کنید، پارامتر ورودی تابع SetSystemTime از نوع استراکچر SYSTEMTIME می باشد. این استراکچر را نیز به شکل زیر در کلاس تعریف می کنیم.

[StructLayoutAttribute(LayoutKind.Sequential)]

private struct SYSTEMTIME

{

    public short year;

    public short month;

    public short dayOfWeek;

    public short day;

    public short hour;

    public short minute;

    public short second;

    public short milliseconds;

}

اکنون تابعی را می نویسیم که یک متغیر از نوع DateTime را گرفته و تاریخ و زمان ویندوز را به آن تغییر می دهد.

private void ChangeDateAndTime(DateTime NewTime)

{

    SYSTEMTIME st;

    st.year = (short)NewTime.Year;

    st.month = (short)NewTime.Month;

    st.dayOfWeek = (short)NewTime.DayOfWeek;

    st.day = (short)NewTime.Day;

    st.hour = (short)NewTime.Hour;

    st.minute = (short)NewTime.Minute;

    st.second = (short)NewTime.Second;

    st.milliseconds = (short)NewTime.Millisecond;

    //Call API

    SetSystemTime(ref st);

}

نکته بسیار مهم:

تاریخ ارسال شده برای تابع بالا حتما باید با فرمت UniversalTime باشد.

در قطعه کد زیر نحوه استفاده از این قطعه کد را ملاحظه می نمایید.

//Change Date to  6/5/1965 (DD/MM/YYYY) and time to 21:20:30

DateTime dateTime = new DateTime(1965, 5, 6, 21, 20, 30, 10).ToUniversalTime();

MessageBox.Show("Now Before : " + DateTime.Now);

 

ChangeDateAndTime(dateTime);

 

MessageBox.Show("Now After : " + DateTime.Now);

قطعه کد کامل این ترفند از لینک بالای صفحه قابل دریافت می باشد.