using System; using System.Xml; using TechBot.Library; namespace TechBot.Commands.Common { [Command("wm" , Help = "!wm or !wm ")] public class WMCommand : XmlCommand { public WMCommand() { } public override string XmlFile { get { return Settings.Default.WMXml; } } [CommandParameter("wm", "The windows message to check" , DefaultParameter = true)] public string WMText { get { return Parameters; } set { Parameters = value; } } public override void ExecuteCommand() { if (string.IsNullOrEmpty(WMText)) { Say("Please provide a valid window message value or name."); } else { NumberParser np = new NumberParser(); long wm = np.Parse(WMText); string output; if (np.Error) { // Assume "!wm " form. output = GetWmNumber(WMText); } else { output = GetWmDescription(wm); } if (output != null) { Say("{0} is {1}.", WMText, output); } else { Say("I don't know about window message {0}.", WMText); } } } private string GetWmDescription(long wm) { XmlElement root = base.m_XmlDocument.DocumentElement; XmlNode node = root.SelectSingleNode(String.Format("WindowMessage[@value='{0}']", wm)); if (node != null) { XmlAttribute text = node.Attributes["text"]; if (text == null) throw new Exception("Node has no text attribute."); return text.Value; } else return null; } private string GetWmNumber(string wmName) { XmlElement root = base.m_XmlDocument.DocumentElement; XmlNode node = root.SelectSingleNode(String.Format("WindowMessage[@text='{0}']", wmName)); if (node != null) { XmlAttribute value = node.Attributes["value"]; if (value == null) throw new Exception("Node has no value attribute."); return value.Value; } else return null; } } }