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
 | |
| 
 |