如何以编程方式更改BIOS时间设置?

时间:2012-03-22 13:34:37

标签: winforms wmi bios

如何以编程方式更改BIOS时间设置?该代码将包含在C#Window Forms应用程序中,以确保BIOS设置始终为UTC时间。我尝试使用Win32_UTCTime在WMI中找到解决方案,但失败了。

2 个答案:

答案 0 :(得分:0)

更改/操作BIOS时钟read this article之前。它解释了为什么Windows依赖于跟踪当地时间的时钟。所以你可能想远离改变它。

进行实际更改see this example from on PInvoke.NET

class Class1
{
    /// <summary> This structure represents a date and time. </summary>
    public struct SYSTEMTIME 
    {    public ushort wYear,wMonth,wDayOfWeek,wDay,
            wHour,wMinute,wSecond,wMilliseconds;
    }

    /// <summary>
    /// This function retrieves the current system date
    /// and time expressed in Coordinated Universal Time (UTC).
    /// </summary>
    /// <param name="lpSystemTime">[out] Pointer to a SYSTEMTIME structure to
    /// receive the current system date and time.</param>
    [DllImport("kernel32.dll")]
    public extern static void GetSystemTime(ref SYSTEMTIME lpSystemTime);

    /// <summary>
    /// This function sets the current system date
    /// and time expressed in Coordinated Universal Time (UTC).
    /// </summary>
    /// <param name="lpSystemTime">[in] Pointer to a SYSTEMTIME structure that
    /// contains the current system date and time.</param>
    [DllImport("kernel32.dll")]
    public extern static uint SetSystemTime(ref SYSTEMTIME lpSystemTime);

    static void Main()
    {    Console.WriteLine(DateTime.Now.ToString());
        SYSTEMTIME st = new SYSTEMTIME();
        GetSystemTime(ref st);
        Console.WriteLine("Adding 1 hour...");
        st.wHour = (ushort)(st.wHour + 1 % 24);
        if (SetSystemTime(ref st) == 0)
            Console.WriteLine("FAILURE: SetSystemTime failed");
        Console.WriteLine(DateTime.Now.ToString());
        Console.WriteLine("Setting time back...");
        st.wHour = (ushort)(st.wHour - 1 % 24);
        SetSystemTime(ref st);
        Console.WriteLine(DateTime.Now.ToString());
        Console.WriteLine("Press Enter to exit");
        Console.Read();
    }
}

答案 1 :(得分:0)

您无法通过任何正常方式以编程方式更改BIOS时间。

BIOS存储在独立于操作系统的EEPROM中。与之交互的唯一方法是直接编写直接写入硬件的程序。各种API都没有提供这样做的方法。