129 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
#if FRAMEWORK20
 | 
						|
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Text;
 | 
						|
using System.Runtime.InteropServices;
 | 
						|
 | 
						|
namespace DevComponents.Schedule
 | 
						|
{
 | 
						|
    internal class NativeMethods
 | 
						|
    {
 | 
						|
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
 | 
						|
        internal struct TimeZoneInformation
 | 
						|
        {
 | 
						|
            [MarshalAs(UnmanagedType.I4)]
 | 
						|
            public int Bias;
 | 
						|
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x20)]
 | 
						|
            public string StandardName;
 | 
						|
            public NativeMethods.SystemTime StandardDate;
 | 
						|
            [MarshalAs(UnmanagedType.I4)]
 | 
						|
            public int StandardBias;
 | 
						|
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x20)]
 | 
						|
            public string DaylightName;
 | 
						|
            public NativeMethods.SystemTime DaylightDate;
 | 
						|
            [MarshalAs(UnmanagedType.I4)]
 | 
						|
            public int DaylightBias;
 | 
						|
            public TimeZoneInformation(NativeMethods.DynamicTimeZoneInformation dtzi)
 | 
						|
            {
 | 
						|
                this.Bias = dtzi.Bias;
 | 
						|
                this.StandardName = dtzi.StandardName;
 | 
						|
                this.StandardDate = dtzi.StandardDate;
 | 
						|
                this.StandardBias = dtzi.StandardBias;
 | 
						|
                this.DaylightName = dtzi.DaylightName;
 | 
						|
                this.DaylightDate = dtzi.DaylightDate;
 | 
						|
                this.DaylightBias = dtzi.DaylightBias;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
 | 
						|
        internal struct DynamicTimeZoneInformation
 | 
						|
        {
 | 
						|
            [MarshalAs(UnmanagedType.I4)]
 | 
						|
            public int Bias;
 | 
						|
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x20)]
 | 
						|
            public string StandardName;
 | 
						|
            public NativeMethods.SystemTime StandardDate;
 | 
						|
            [MarshalAs(UnmanagedType.I4)]
 | 
						|
            public int StandardBias;
 | 
						|
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x20)]
 | 
						|
            public string DaylightName;
 | 
						|
            public NativeMethods.SystemTime DaylightDate;
 | 
						|
            [MarshalAs(UnmanagedType.I4)]
 | 
						|
            public int DaylightBias;
 | 
						|
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x80)]
 | 
						|
            public string TimeZoneKeyName;
 | 
						|
        }
 | 
						|
 | 
						|
        [StructLayout(LayoutKind.Sequential)]
 | 
						|
        internal struct SystemTime
 | 
						|
        {
 | 
						|
            [MarshalAs(UnmanagedType.U2)]
 | 
						|
            public short Year;
 | 
						|
            [MarshalAs(UnmanagedType.U2)]
 | 
						|
            public short Month;
 | 
						|
            [MarshalAs(UnmanagedType.U2)]
 | 
						|
            public short DayOfWeek;
 | 
						|
            [MarshalAs(UnmanagedType.U2)]
 | 
						|
            public short Day;
 | 
						|
            [MarshalAs(UnmanagedType.U2)]
 | 
						|
            public short Hour;
 | 
						|
            [MarshalAs(UnmanagedType.U2)]
 | 
						|
            public short Minute;
 | 
						|
            [MarshalAs(UnmanagedType.U2)]
 | 
						|
            public short Second;
 | 
						|
            [MarshalAs(UnmanagedType.U2)]
 | 
						|
            public short Milliseconds;
 | 
						|
        }
 | 
						|
 | 
						|
        [StructLayout(LayoutKind.Sequential)]
 | 
						|
        internal struct RegistryTimeZoneInformation
 | 
						|
        {
 | 
						|
            [MarshalAs(UnmanagedType.I4)]
 | 
						|
            public int Bias;
 | 
						|
            [MarshalAs(UnmanagedType.I4)]
 | 
						|
            public int StandardBias;
 | 
						|
            [MarshalAs(UnmanagedType.I4)]
 | 
						|
            public int DaylightBias;
 | 
						|
            public NativeMethods.SystemTime StandardDate;
 | 
						|
            public NativeMethods.SystemTime DaylightDate;
 | 
						|
            public RegistryTimeZoneInformation(NativeMethods.TimeZoneInformation tzi)
 | 
						|
            {
 | 
						|
                this.Bias = tzi.Bias;
 | 
						|
                this.StandardDate = tzi.StandardDate;
 | 
						|
                this.StandardBias = tzi.StandardBias;
 | 
						|
                this.DaylightDate = tzi.DaylightDate;
 | 
						|
                this.DaylightBias = tzi.DaylightBias;
 | 
						|
            }
 | 
						|
 | 
						|
            public RegistryTimeZoneInformation(byte[] bytes)
 | 
						|
            {
 | 
						|
                if ((bytes == null) || (bytes.Length != 0x2c))
 | 
						|
                {
 | 
						|
                    throw new ArgumentException("Argument_InvalidREG_TZI_FORMAT", "bytes");
 | 
						|
                }
 | 
						|
                this.Bias = BitConverter.ToInt32(bytes, 0);
 | 
						|
                this.StandardBias = BitConverter.ToInt32(bytes, 4);
 | 
						|
                this.DaylightBias = BitConverter.ToInt32(bytes, 8);
 | 
						|
                this.StandardDate.Year = BitConverter.ToInt16(bytes, 12);
 | 
						|
                this.StandardDate.Month = BitConverter.ToInt16(bytes, 14);
 | 
						|
                this.StandardDate.DayOfWeek = BitConverter.ToInt16(bytes, 0x10);
 | 
						|
                this.StandardDate.Day = BitConverter.ToInt16(bytes, 0x12);
 | 
						|
                this.StandardDate.Hour = BitConverter.ToInt16(bytes, 20);
 | 
						|
                this.StandardDate.Minute = BitConverter.ToInt16(bytes, 0x16);
 | 
						|
                this.StandardDate.Second = BitConverter.ToInt16(bytes, 0x18);
 | 
						|
                this.StandardDate.Milliseconds = BitConverter.ToInt16(bytes, 0x1a);
 | 
						|
                this.DaylightDate.Year = BitConverter.ToInt16(bytes, 0x1c);
 | 
						|
                this.DaylightDate.Month = BitConverter.ToInt16(bytes, 30);
 | 
						|
                this.DaylightDate.DayOfWeek = BitConverter.ToInt16(bytes, 0x20);
 | 
						|
                this.DaylightDate.Day = BitConverter.ToInt16(bytes, 0x22);
 | 
						|
                this.DaylightDate.Hour = BitConverter.ToInt16(bytes, 0x24);
 | 
						|
                this.DaylightDate.Minute = BitConverter.ToInt16(bytes, 0x26);
 | 
						|
                this.DaylightDate.Second = BitConverter.ToInt16(bytes, 40);
 | 
						|
                this.DaylightDate.Milliseconds = BitConverter.ToInt16(bytes, 0x2a);
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
#endif
 | 
						|
 |