using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; namespace Vestris.ResourceLib { /// /// An accelerator, RT_ACCELERATOR resource. /// An accelerator provides the user with access to an application's command set. /// public class AcceleratorResource : Resource { private List _accelerators = new List(); /// /// Accelerator keys. /// public List Accelerators { get { return _accelerators; } set { _accelerators = value; } } /// /// A new accelerator resource. /// public AcceleratorResource() : base(IntPtr.Zero, IntPtr.Zero, new ResourceId(Kernel32.ResourceTypes.RT_ACCELERATOR), null, ResourceUtil.NEUTRALLANGID, 0) { } /// /// An existing accelerator resource. /// /// Module handle. /// Resource ID. /// Resource type. /// Resource name. /// Language ID. /// Resource size. public AcceleratorResource(IntPtr hModule, IntPtr hResource, ResourceId type, ResourceId name, UInt16 language, int size) : base(hModule, hResource, type, name, language, size) { } /// /// Read the accelerators table. /// /// Handle to a module. /// Pointer to the beginning of the accelerator table. /// Address of the end of the accelerator table. internal override IntPtr Read(IntPtr hModule, IntPtr lpRes) { int count = _size / Marshal.SizeOf(typeof(User32.ACCEL)); for (int i = 0; i < count; i++) { Accelerator accelerator = new Accelerator(); lpRes = accelerator.Read(lpRes); _accelerators.Add(accelerator); } return lpRes; } internal override void Write(System.IO.BinaryWriter w) { foreach (Accelerator accelerator in _accelerators) { accelerator.Write(w); } } /// /// String representation of the accelerators resource. /// /// public override string ToString() { StringBuilder sb = new StringBuilder(); sb.AppendLine(string.Format("{0} ACCELERATORS", Name)); sb.AppendLine("BEGIN"); foreach(Accelerator accelerator in _accelerators) { sb.AppendLine(string.Format(" {0}", accelerator)); } sb.AppendLine("END"); return sb.ToString(); } } }