- Add support for "!wm <value>" and "!wm <name>" commands.
- Update the #develop project file.
- Add list of window message values. Thanks to Royce3.
Added: trunk/irc/TechBot/Resources/wm.xml
Modified: trunk/irc/TechBot/TechBot/App.config
Modified: trunk/irc/TechBot/TechBot/ServiceThread.cs
Modified: trunk/irc/TechBot/TechBot.Console/App.config
Modified: trunk/irc/TechBot/TechBot.Console/Main.cs
Modified: trunk/irc/TechBot/TechBot.Library/IrcService.cs
Modified: trunk/irc/TechBot/TechBot.Library/TechBot.Library.prjx
Modified: trunk/irc/TechBot/TechBot.Library/TechBotService.cs
Added: trunk/irc/TechBot/TechBot.Library/WmCommand.cs

Added: trunk/irc/TechBot/Resources/wm.xml
--- trunk/irc/TechBot/Resources/wm.xml	2005-12-14 12:41:38 UTC (rev 20163)
+++ trunk/irc/TechBot/Resources/wm.xml	2005-12-14 17:34:00 UTC (rev 20164)
@@ -0,0 +1,321 @@
+<?xml version="1.0" ?>
+<WindowMessageList>
+	<WindowMessage text="WM_APP" value="32768" />
+	<WindowMessage text="WM_ACTIVATE" value="6" />
+	<WindowMessage text="WM_ACTIVATEAPP" value="28" />
+	<WindowMessage text="WM_AFXFIRST" value="864" />
+	<WindowMessage text="WM_AFXLAST" value="895" />
+	<WindowMessage text="WM_ASKCBFORMATNAME" value="780" />
+	<WindowMessage text="WM_CANCELJOURNAL" value="75" />
+	<WindowMessage text="WM_CANCELMODE" value="31" />
+	<WindowMessage text="WM_CAPTURECHANGED" value="533" />
+	<WindowMessage text="WM_CHANGECBCHAIN" value="781" />
+	<WindowMessage text="WM_CHANGEUISTATE" value="295" />
+	<WindowMessage text="WM_UPDATEUISTATE" value="296" />
+	<WindowMessage text="WM_QUERYUISTATE" value="297" />
+	<WindowMessage text="WM_CHAR" value="258" />
+	<WindowMessage text="WM_CHARTOITEM" value="47" />
+	<WindowMessage text="WM_CHILDACTIVATE" value="34" />
+	<WindowMessage text="WM_CLEAR" value="771" />
+	<WindowMessage text="WM_CLOSE" value="16" />
+	<WindowMessage text="WM_COMMAND" value="273" />
+	<WindowMessage text="WM_COMMNOTIFY" value="68" />
+	<WindowMessage text="WM_COMPACTING" value="65" />
+	<WindowMessage text="WM_COMPAREITEM" value="57" />
+	<WindowMessage text="WM_CONTEXTMENU" value="123" />
+	<WindowMessage text="WM_COPY" value="769" />
+	<WindowMessage text="WM_COPYDATA" value="74" />
+	<WindowMessage text="WM_CREATE" value="1" />
+	<WindowMessage text="WM_CTLCOLORBTN" value="309" />
+	<WindowMessage text="WM_CTLCOLORDLG" value="310" />
+	<WindowMessage text="WM_CTLCOLOREDIT" value="307" />
+	<WindowMessage text="WM_CTLCOLORLISTBOX" value="308" />
+	<WindowMessage text="WM_CTLCOLORMSGBOX" value="306" />
+	<WindowMessage text="WM_CTLCOLORSCROLLBAR" value="311" />
+	<WindowMessage text="WM_CTLCOLORSTATIC" value="312" />
+	<WindowMessage text="WM_CUT" value="768" />
+	<WindowMessage text="WM_DEADCHAR" value="259" />
+	<WindowMessage text="WM_DELETEITEM" value="45" />
+	<WindowMessage text="WM_DESTROY" value="2" />
+	<WindowMessage text="WM_DESTROYCLIPBOARD" value="775" />
+	<WindowMessage text="WM_DEVICECHANGE" value="537" />
+	<WindowMessage text="WM_DEVMODECHANGE" value="27" />
+	<WindowMessage text="WM_DISPLAYCHANGE" value="126" />
+	<WindowMessage text="WM_DRAWCLIPBOARD" value="776" />
+	<WindowMessage text="WM_DRAWITEM" value="43" />
+	<WindowMessage text="WM_DROPFILES" value="563" />
+	<WindowMessage text="WM_ENABLE" value="10" />
+	<WindowMessage text="WM_ENDSESSION" value="22" />
+	<WindowMessage text="WM_ENTERIDLE" value="289" />
+	<WindowMessage text="WM_ENTERMENULOOP" value="529" />
+	<WindowMessage text="WM_ENTERSIZEMOVE" value="561" />
+	<WindowMessage text="WM_ERASEBKGND" value="20" />
+	<WindowMessage text="WM_EXITMENULOOP" value="530" />
+	<WindowMessage text="WM_EXITSIZEMOVE" value="562" />
+	<WindowMessage text="WM_FONTCHANGE" value="29" />
+	<WindowMessage text="WM_GETDLGCODE" value="135" />
+	<WindowMessage text="WM_GETFONT" value="49" />
+	<WindowMessage text="WM_GETHOTKEY" value="51" />
+	<WindowMessage text="WM_GETICON" value="127" />
+	<WindowMessage text="WM_GETMINMAXINFO" value="36" />
+	<WindowMessage text="WM_GETTEXT" value="13" />
+	<WindowMessage text="WM_GETTEXTLENGTH" value="14" />
+	<WindowMessage text="WM_HANDHELDFIRST" value="856" />
+	<WindowMessage text="WM_HANDHELDLAST" value="863" />
+	<WindowMessage text="WM_HELP" value="83" />
+	<WindowMessage text="WM_HOTKEY" value="786" />
+	<WindowMessage text="WM_HSCROLL" value="276" />
+	<WindowMessage text="WM_HSCROLLCLIPBOARD" value="782" />
+	<WindowMessage text="WM_ICONERASEBKGND" value="39" />
+	<WindowMessage text="WM_INITDIALOG" value="272" />
+	<WindowMessage text="WM_INITMENU" value="278" />
+	<WindowMessage text="WM_INITMENUPOPUP" value="279" />
+	<WindowMessage text="WM_INPUTLANGCHANGE" value="81" />
+	<WindowMessage text="WM_INPUTLANGCHANGEREQUEST" value="80" />
+	<WindowMessage text="WM_KEYDOWN" value="256" />
+	<WindowMessage text="WM_KEYUP" value="257" />
+	<WindowMessage text="WM_KILLFOCUS" value="8" />
+	<WindowMessage text="WM_MDIACTIVATE" value="546" />
+	<WindowMessage text="WM_MDICASCADE" value="551" />
+	<WindowMessage text="WM_MDICREATE" value="544" />
+	<WindowMessage text="WM_MDIDESTROY" value="545" />
+	<WindowMessage text="WM_MDIGETACTIVE" value="553" />
+	<WindowMessage text="WM_MDIICONARRANGE" value="552" />
+	<WindowMessage text="WM_MDIMAXIMIZE" value="549" />
+	<WindowMessage text="WM_MDINEXT" value="548" />
+	<WindowMessage text="WM_MDIREFRESHMENU" value="564" />
+	<WindowMessage text="WM_MDIRESTORE" value="547" />
+	<WindowMessage text="WM_MDISETMENU" value="560" />
+	<WindowMessage text="WM_MDITILE" value="550" />
+	<WindowMessage text="WM_MEASUREITEM" value="44" />
+	<WindowMessage text="WM_MENURBUTTONUP" value="290" />
+	<WindowMessage text="WM_MENUCHAR" value="288" />
+	<WindowMessage text="WM_MENUSELECT" value="287" />
+	<WindowMessage text="WM_NEXTMENU" value="531" />
+	<WindowMessage text="WM_MOVE" value="3" />
+	<WindowMessage text="WM_MOVING" value="534" />
+	<WindowMessage text="WM_NCACTIVATE" value="134" />
+	<WindowMessage text="WM_NCCALCSIZE" value="131" />
+	<WindowMessage text="WM_NCCREATE" value="129" />
+	<WindowMessage text="WM_NCDESTROY" value="130" />
+	<WindowMessage text="WM_NCHITTEST" value="132" />
+	<WindowMessage text="WM_NCLBUTTONDBLCLK" value="163" />
+	<WindowMessage text="WM_NCLBUTTONDOWN" value="161" />
+	<WindowMessage text="WM_NCLBUTTONUP" value="162" />
+	<WindowMessage text="WM_NCMBUTTONDBLCLK" value="169" />
+	<WindowMessage text="WM_NCMBUTTONDOWN" value="167" />
+	<WindowMessage text="WM_NCMBUTTONUP" value="168" />
+	<WindowMessage text="WM_NCXBUTTONDOWN" value="171" />
+	<WindowMessage text="WM_NCXBUTTONUP" value="172" />
+	<WindowMessage text="WM_NCXBUTTONDBLCLK" value="173" />
+	<WindowMessage text="WM_NCMOUSEMOVE" value="160" />
+	<WindowMessage text="WM_NCMOUSEHOVER" value="0x02A0" />
+	<WindowMessage text="WM_NCMOUSELEAVE" value="0x02A2" />
+	<WindowMessage text="WM_NCPAINT" value="133" />
+	<WindowMessage text="WM_NCRBUTTONDBLCLK" value="166" />
+	<WindowMessage text="WM_NCRBUTTONDOWN" value="164" />
+	<WindowMessage text="WM_NCRBUTTONUP" value="165" />
+	<WindowMessage text="WM_NEXTDLGCTL" value="40" />
+	<WindowMessage text="WM_NEXTMENU" value="531" />
+	<WindowMessage text="WM_NOTIFY" value="78" />
+	<WindowMessage text="WM_NOTIFYFORMAT" value="85" />
+	<WindowMessage text="WM_NULL" value="0" />
+	<WindowMessage text="WM_PAINT" value="15" />
+	<WindowMessage text="WM_PAINTCLIPBOARD" value="777" />
+	<WindowMessage text="WM_PAINTICON" value="38" />
+	<WindowMessage text="WM_PALETTECHANGED" value="785" />
+	<WindowMessage text="WM_PALETTEISCHANGING" value="784" />
+	<WindowMessage text="WM_PARENTNOTIFY" value="528" />
+	<WindowMessage text="WM_PASTE" value="770" />
+	<WindowMessage text="WM_PENWINFIRST" value="896" />
+	<WindowMessage text="WM_PENWINLAST" value="911" />
+	<WindowMessage text="WM_POWER" value="72" />
+	<WindowMessage text="WM_POWERBROADCAST" value="536" />
+	<WindowMessage text="WM_PRINT" value="791" />
+	<WindowMessage text="WM_PRINTCLIENT" value="792" />
+	<WindowMessage text="WM_QUERYDRAGICON" value="55" />
+	<WindowMessage text="WM_QUERYENDSESSION" value="17" />
+	<WindowMessage text="WM_QUERYNEWPALETTE" value="783" />
+	<WindowMessage text="WM_QUERYOPEN" value="19" />
+	<WindowMessage text="WM_QUEUESYNC" value="35" />
+	<WindowMessage text="WM_QUIT" value="18" />
+	<WindowMessage text="WM_RENDERALLFORMATS" value="774" />
+	<WindowMessage text="WM_RENDERFORMAT" value="773" />
+	<WindowMessage text="WM_SETCURSOR" value="32" />
+	<WindowMessage text="WM_SETFOCUS" value="7" />
+	<WindowMessage text="WM_SETFONT" value="48" />
+	<WindowMessage text="WM_SETHOTKEY" value="50" />
+	<WindowMessage text="WM_SETICON" value="128" />
+	<WindowMessage text="WM_SETREDRAW" value="11" />
+	<WindowMessage text="WM_SETTEXT" value="12" />
+	<WindowMessage text="WM_SETTINGCHANGE" value="26" />
+	<WindowMessage text="WM_SHOWWINDOW" value="24" />
+	<WindowMessage text="WM_SIZE" value="5" />
+	<WindowMessage text="WM_SIZECLIPBOARD" value="779" />
+	<WindowMessage text="WM_SIZING" value="532" />
+	<WindowMessage text="WM_SPOOLERSTATUS" value="42" />
+	<WindowMessage text="WM_STYLECHANGED" value="125" />
+	<WindowMessage text="WM_STYLECHANGING" value="124" />
+	<WindowMessage text="WM_SYSCHAR" value="262" />
+	<WindowMessage text="WM_SYSCOLORCHANGE" value="21" />
+	<WindowMessage text="WM_SYSCOMMAND" value="274" />
+	<WindowMessage text="WM_SYSDEADCHAR" value="263" />
+	<WindowMessage text="WM_SYSKEYDOWN" value="260" />
+	<WindowMessage text="WM_SYSKEYUP" value="261" />
+	<WindowMessage text="WM_TCARD" value="82" />
+	<WindowMessage text="WM_TIMECHANGE" value="30" />
+	<WindowMessage text="WM_TIMER" value="275" />
+	<WindowMessage text="WM_SYSTIMER" value="280" />
+	<WindowMessage text="WM_UNDO" value="772" />
+	<WindowMessage text="WM_USER" value="1024" />
+	<WindowMessage text="WM_USERCHANGED" value="84" />
+	<WindowMessage text="WM_VKEYTOITEM" value="46" />
+	<WindowMessage text="WM_VSCROLL" value="277" />
+	<WindowMessage text="WM_VSCROLLCLIPBOARD" value="778" />
+	<WindowMessage text="WM_WINDOWPOSCHANGED" value="71" />
+	<WindowMessage text="WM_WINDOWPOSCHANGING" value="70" />
+	<WindowMessage text="WM_WININICHANGE" value="26" />
+	<WindowMessage text="WM_KEYFIRST" value="256" />
+	<WindowMessage text="WM_KEYLAST" value="264" />
+	<WindowMessage text="WM_SYNCPAINT" value="136" />
+	<WindowMessage text="WM_MOUSEACTIVATE" value="33" />
+	<WindowMessage text="WM_MOUSEMOVE" value="512" />
+	<WindowMessage text="WM_LBUTTONDOWN" value="513" />
+	<WindowMessage text="WM_LBUTTONUP" value="514" />
+	<WindowMessage text="WM_LBUTTONDBLCLK" value="515" />
+	<WindowMessage text="WM_RBUTTONDOWN" value="516" />
+	<WindowMessage text="WM_RBUTTONUP" value="517" />
+	<WindowMessage text="WM_RBUTTONDBLCLK" value="518" />
+	<WindowMessage text="WM_MBUTTONDOWN" value="519" />
+	<WindowMessage text="WM_MBUTTONUP" value="520" />
+	<WindowMessage text="WM_MBUTTONDBLCLK" value="521" />
+	<WindowMessage text="WM_MOUSEWHEEL" value="522" />
+	<WindowMessage text="WM_MOUSEFIRST" value="512" />
+	<WindowMessage text="WM_XBUTTONDOWN" value="523" />
+	<WindowMessage text="WM_XBUTTONUP" value="524" />
+	<WindowMessage text="WM_XBUTTONDBLCLK" value="525" />
+	<WindowMessage text="WM_MOUSELAST" value="525" />
+	<WindowMessage text="WM_MOUSEHOVER" value="0x2A1" />
+	<WindowMessage text="WM_MOUSELEAVE" value="0x2A3" />
+	<WindowMessage text="WM_THEMECHANGED" value="794" />
+	<WindowMessage text="BM_CLICK" value="245" />
+	<WindowMessage text="BM_GETCHECK" value="240" />
+	<WindowMessage text="BM_GETIMAGE" value="246" />
+	<WindowMessage text="BM_GETSTATE" value="242" />
+	<WindowMessage text="BM_SETCHECK" value="241" />
+	<WindowMessage text="BM_SETIMAGE" value="247" />
+	<WindowMessage text="BM_SETSTATE" value="243" />
+	<WindowMessage text="BM_SETSTYLE" value="244" />
+	<WindowMessage text="CB_ADDSTRING" value="323" />
+	<WindowMessage text="CB_DELETESTRING" value="324" />
+	<WindowMessage text="CB_DIR" value="325" />
+	<WindowMessage text="CB_FINDSTRING" value="332" />
+	<WindowMessage text="CB_FINDSTRINGEXACT" value="344" />
+	<WindowMessage text="CB_GETCOMBOBOXINFO" value="356" />
+	<WindowMessage text="CB_GETCOUNT" value="326" />
+	<WindowMessage text="CB_GETCURSEL" value="327" />
+	<WindowMessage text="CB_GETDROPPEDCONTROLRECT" value="338" />
+	<WindowMessage text="CB_GETDROPPEDSTATE" value="343" />
+	<WindowMessage text="CB_GETDROPPEDWIDTH" value="351" />
+	<WindowMessage text="CB_GETEDITSEL" value="320" />
+	<WindowMessage text="CB_GETEXTENDEDUI" value="342" />
+	<WindowMessage text="CB_GETHORIZONTALEXTENT" value="349" />
+	<WindowMessage text="CB_GETITEMDATA" value="336" />
+	<WindowMessage text="CB_GETITEMHEIGHT" value="340" />
+	<WindowMessage text="CB_GETLBTEXT" value="328" />
+	<WindowMessage text="CB_GETLBTEXTLEN" value="329" />
+	<WindowMessage text="CB_GETLOCALE" value="346" />
+	<WindowMessage text="CB_GETTOPINDEX" value="347" />
+	<WindowMessage text="CB_INITSTORAGE" value="353" />
+	<WindowMessage text="CB_INSERTSTRING" value="330" />
+	<WindowMessage text="CB_LIMITTEXT" value="321" />
+	<WindowMessage text="CB_RESETCONTENT" value="331" />
+	<WindowMessage text="CB_SELECTSTRING" value="333" />
+	<WindowMessage text="CB_SETCURSEL" value="334" />
+	<WindowMessage text="CB_SETDROPPEDWIDTH" value="352" />
+	<WindowMessage text="CB_SETEDITSEL" value="322" />
+	<WindowMessage text="CB_SETEXTENDEDUI" value="341" />
+	<WindowMessage text="CB_SETHORIZONTALEXTENT" value="350" />
+	<WindowMessage text="CB_SETITEMDATA" value="337" />
+	<WindowMessage text="CB_SETITEMHEIGHT" value="339" />
+	<WindowMessage text="CB_SETLOCALE" value="345" />
+	<WindowMessage text="CB_SETTOPINDEX" value="348" />
+	<WindowMessage text="CB_SHOWDROPDOWN" value="335" />
+	<WindowMessage text="EM_CANUNDO" value="198" />
+	<WindowMessage text="EM_CHARFROMPOS" value="215" />
+	<WindowMessage text="EM_EMPTYUNDOBUFFER" value="205" />
+	<WindowMessage text="EM_FMTLINES" value="200" />
+	<WindowMessage text="EM_GETFIRSTVISIBLELINE" value="206" />
+	<WindowMessage text="EM_GETHANDLE" value="189" />
+	<WindowMessage text="EM_GETLIMITTEXT" value="213" />
+	<WindowMessage text="EM_GETLINE" value="196" />
+	<WindowMessage text="EM_GETLINECOUNT" value="186" />
+	<WindowMessage text="EM_GETMARGINS" value="212" />
+	<WindowMessage text="EM_GETMODIFY" value="184" />
+	<WindowMessage text="EM_GETPASSWORDCHAR" value="210" />
+	<WindowMessage text="EM_GETRECT" value="178" />
+	<WindowMessage text="EM_GETSEL" value="176" />
+	<WindowMessage text="EM_GETTHUMB" value="190" />
+	<WindowMessage text="EM_GETWORDBREAKPROC" value="209" />
+	<WindowMessage text="EM_LIMITTEXT" value="197" />
+	<WindowMessage text="EM_LINEFROMCHAR" value="201" />
+	<WindowMessage text="EM_LINEINDEX" value="187" />
+	<WindowMessage text="EM_LINELENGTH" value="193" />
+	<WindowMessage text="EM_LINESCROLL" value="182" />
+	<WindowMessage text="EM_POSFROMCHAR" value="214" />
+	<WindowMessage text="EM_REPLACESEL" value="194" />
+	<WindowMessage text="EM_SCROLL" value="181" />
+	<WindowMessage text="EM_SCROLLCARET" value="183" />
+	<WindowMessage text="EM_SETHANDLE" value="188" />
+	<WindowMessage text="EM_SETLIMITTEXT" value="197" />
+	<WindowMessage text="EM_SETMARGINS" value="211" />
+	<WindowMessage text="EM_SETMODIFY" value="185" />
+	<WindowMessage text="EM_SETPASSWORDCHAR" value="204" />
+	<WindowMessage text="EM_SETREADONLY" value="207" />
+	<WindowMessage text="EM_SETRECT" value="179" />
+	<WindowMessage text="EM_SETRECTNP" value="180" />
+	<WindowMessage text="EM_SETSEL" value="177" />
+	<WindowMessage text="EM_SETTABSTOPS" value="203" />
+	<WindowMessage text="EM_SETWORDBREAKPROC" value="208" />
+	<WindowMessage text="EM_UNDO" value="199" />
+	<WindowMessage text="LB_ADDFILE" value="406" />
+	<WindowMessage text="LB_ADDSTRING" value="384" />
+	<WindowMessage text="LB_DELETESTRING" value="386" />
+	<WindowMessage text="LB_DIR" value="397" />
+	<WindowMessage text="LB_FINDSTRING" value="399" />
+	<WindowMessage text="LB_FINDSTRINGEXACT" value="418" />
+	<WindowMessage text="LB_GETANCHORINDEX" value="413" />
+	<WindowMessage text="LB_GETCARETINDEX" value="415" />
+	<WindowMessage text="LB_GETCOUNT" value="395" />
+	<WindowMessage text="LB_GETCURSEL" value="392" />
+	<WindowMessage text="LB_GETHORIZONTALEXTENT" value="403" />
+	<WindowMessage text="LB_GETITEMDATA" value="409" />
+	<WindowMessage text="LB_GETITEMHEIGHT" value="417" />
+	<WindowMessage text="LB_GETITEMRECT" value="408" />
+	<WindowMessage text="LB_GETLOCALE" value="422" />
+	<WindowMessage text="LB_GETSEL" value="391" />
+	<WindowMessage text="LB_GETSELCOUNT" value="400" />
+	<WindowMessage text="LB_GETSELITEMS" value="401" />
+	<WindowMessage text="LB_GETTEXT" value="393" />
+	<WindowMessage text="LB_GETTEXTLEN" value="394" />
+	<WindowMessage text="LB_GETTOPINDEX" value="398" />
+	<WindowMessage text="LB_INITSTORAGE" value="424" />
+	<WindowMessage text="LB_INSERTSTRING" value="385" />
+	<WindowMessage text="LB_ITEMFROMPOINT" value="425" />
+	<WindowMessage text="LB_RESETCONTENT" value="388" />
+	<WindowMessage text="LB_SELECTSTRING" value="396" />
+	<WindowMessage text="LB_SELITEMRANGE" value="411" />
+	<WindowMessage text="LB_SELITEMRANGEEX" value="387" />
+	<WindowMessage text="LB_SETANCHORINDEX" value="412" />
+	<WindowMessage text="LB_SETCARETINDEX" value="414" />
+	<WindowMessage text="LB_SETCOLUMNWIDTH" value="405" />
+	<WindowMessage text="LB_SETCOUNT" value="423" />
+	<WindowMessage text="LB_SETCURSEL" value="390" />
+	<WindowMessage text="LB_SETHORIZONTALEXTENT" value="404" />
+	<WindowMessage text="LB_SETITEMDATA" value="410" />
+	<WindowMessage text="LB_SETITEMHEIGHT" value="416" />
+	<WindowMessage text="LB_SETLOCALE" value="421" />
+	<WindowMessage text="LB_SETSEL" value="389" />
+	<WindowMessage text="LB_SETTABSTOPS" value="402" />
+	<WindowMessage text="LB_SETTOPINDEX" value="407" />
+</WindowMessageList>

Modified: trunk/irc/TechBot/TechBot/App.config
--- trunk/irc/TechBot/TechBot/App.config	2005-12-14 12:41:38 UTC (rev 20163)
+++ trunk/irc/TechBot/TechBot/App.config	2005-12-14 17:34:00 UTC (rev 20164)
@@ -10,6 +10,7 @@
 		<add key="NtstatusXml" value="C:\IRC\TechBot\ntstatus.xml" />
 		<add key="WinerrorXml" value="C:\IRC\TechBot\winerror.xml" />
 		<add key="HresultXml" value="C:\IRC\TechBot\hresult.xml" />
+		<add key="WmXml" value="C:\IRC\TechBot\wm.xml" />
 		<add key="SvnCommand" value="svn co svn://svn.reactos.com/trunk/reactos" />
 	</appSettings>
 </configuration>

Modified: trunk/irc/TechBot/TechBot/ServiceThread.cs
--- trunk/irc/TechBot/TechBot/ServiceThread.cs	2005-12-14 12:41:38 UTC (rev 20163)
+++ trunk/irc/TechBot/TechBot/ServiceThread.cs	2005-12-14 17:34:00 UTC (rev 20164)
@@ -15,6 +15,7 @@
 		private string MainChm;
 		private string NtstatusXml;
 		private string HresultXml;
+		private string WmXml;
 		private string WinerrorXml;
 		private string SvnCommand;
 		private EventLog eventLog;
@@ -34,6 +35,7 @@
 			MainChm = ConfigurationSettings.AppSettings["MainChm"];
 			NtstatusXml = ConfigurationSettings.AppSettings["NtstatusXml"];
 			HresultXml = ConfigurationSettings.AppSettings["HresultXml"];
+			WmXml = ConfigurationSettings.AppSettings["WmXml"];
 			WinerrorXml = ConfigurationSettings.AppSettings["WinerrorXml"];
 			SvnCommand = ConfigurationSettings.AppSettings["SvnCommand"];
 		}
@@ -52,6 +54,7 @@
 			                                       NtstatusXml,
 			                                       WinerrorXml,
 			                                       HresultXml,
+			                                       WmXml,
 			                                       SvnCommand);
 			ircService.Run();
 		}

Modified: trunk/irc/TechBot/TechBot.Console/App.config
--- trunk/irc/TechBot/TechBot.Console/App.config	2005-12-14 12:41:38 UTC (rev 20163)
+++ trunk/irc/TechBot/TechBot.Console/App.config	2005-12-14 17:34:00 UTC (rev 20164)
@@ -10,6 +10,7 @@
 		<add key="NtstatusXml" value="C:\IRC\TechBot\ntstatus.xml" />
 		<add key="WinerrorXml" value="C:\IRC\TechBot\winerror.xml" />
 		<add key="HresultXml" value="C:\IRC\TechBot\hresult.xml" />
+		<add key="WmXml" value="C:\IRC\TechBot\wm.xml" />
 		<add key="SvnCommand" value="svn co svn://svn.reactos.com/trunk/reactos" />
 	</appSettings>
 </configuration>

Modified: trunk/irc/TechBot/TechBot.Console/Main.cs
--- trunk/irc/TechBot/TechBot.Console/Main.cs	2005-12-14 12:41:38 UTC (rev 20163)
+++ trunk/irc/TechBot/TechBot.Console/Main.cs	2005-12-14 17:34:00 UTC (rev 20164)
@@ -134,6 +134,18 @@
 			}
 		}
 
+		private static string WmXml
+		{
+			get
+			{
+				string optionName = "WmXml";
+				string s = ConfigurationSettings.AppSettings[optionName];
+				VerifyRequiredOption(optionName,
+				                     s);
+				return s;
+			}
+		}
+
 		private static string SvnCommand
 		{
 			get
@@ -157,6 +169,7 @@
 			                                       NtstatusXml,
 			                                       WinerrorXml,
 			                                       HresultXml,
+			                                       WmXml,
 			                                       SvnCommand);
 			ircService.Run();
 		}
@@ -176,6 +189,7 @@
 			                                            NtstatusXml,
 			                                            WinerrorXml,
 			                                            HresultXml,
+			                                            WmXml,
 			                                            SvnCommand);
 			service.Run();
 			while (true)

Modified: trunk/irc/TechBot/TechBot.Library/IrcService.cs
--- trunk/irc/TechBot/TechBot.Library/IrcService.cs	2005-12-14 12:41:38 UTC (rev 20163)
+++ trunk/irc/TechBot/TechBot.Library/IrcService.cs	2005-12-14 17:34:00 UTC (rev 20164)
@@ -16,6 +16,7 @@
 		private string ntstatusXml;
 		private string winerrorXml;
 		private string hresultXml;
+		private string wmXml;
 		private string svnCommand;
 		private IrcClient client;
 		private ArrayList channels = new ArrayList(); /* IrcChannel */
@@ -31,18 +32,20 @@
 		                  string ntstatusXml,
 		                  string winerrorXml,
 		                  string hresultXml,
+		                  string wmXml,
 		                  string svnCommand)
 		{
 			this.hostname = hostname;
 			this.port = port;
 			this.channelnames = channelnames;
-		    this.botname = botname;
-		    this.chmPath = chmPath;
-		    this.mainChm = mainChm;
-		    this.ntstatusXml = ntstatusXml;
-		    this.winerrorXml = winerrorXml;
-		    this.hresultXml = hresultXml;
-		    this.svnCommand = svnCommand;
+			this.botname = botname;
+			this.chmPath = chmPath;
+			this.mainChm = mainChm;
+			this.ntstatusXml = ntstatusXml;
+			this.winerrorXml = winerrorXml;
+			this.hresultXml = hresultXml;
+			this.wmXml = wmXml;
+			this.svnCommand = svnCommand;
 		}
 
 		public void Run()
@@ -53,6 +56,7 @@
 			                             ntstatusXml,
 			                             winerrorXml,
 			                             hresultXml,
+			                             wmXml,
 			                             svnCommand);
 			service.Run();
 

Modified: trunk/irc/TechBot/TechBot.Library/TechBot.Library.prjx
--- trunk/irc/TechBot/TechBot.Library/TechBot.Library.prjx	2005-12-14 12:41:38 UTC (rev 20163)
+++ trunk/irc/TechBot/TechBot.Library/TechBot.Library.prjx	2005-12-14 17:34:00 UTC (rev 20164)
@@ -13,6 +13,8 @@
     <File name=".\HresultCommand.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
     <File name=".\WinerrorCommand.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
     <File name=".\SvnCommand.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
+    <File name=".\WmCommand.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
+    <File name=".\MessageContext.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
   </Contents>
   <References>
     <Reference type="Project" refto="CHMLibrary" localcopy="True" />

Modified: trunk/irc/TechBot/TechBot.Library/TechBotService.cs
--- trunk/irc/TechBot/TechBot.Library/TechBotService.cs	2005-12-14 12:41:38 UTC (rev 20163)
+++ trunk/irc/TechBot/TechBot.Library/TechBotService.cs	2005-12-14 17:34:00 UTC (rev 20164)
@@ -15,16 +15,18 @@
 		private string ntstatusXml;
 		private string winerrorXml;
 		private string hresultXml;
+		private string wmXml;
 		private string svnCommand;
 		private ArrayList commands = new ArrayList();
 		
 		public TechBotService(IServiceOutput serviceOutput,
 		                      string chmPath,
-			                  string mainChm,
-			                  string ntstatusXml,
-			                  string winerrorXml,
-			                  string hresultXml,
-			                  string svnCommand)
+		                      string mainChm,
+		                      string ntstatusXml,
+		                      string winerrorXml,
+		                      string hresultXml,
+		                      string wmXml,
+		                      string svnCommand)
 		{
 			this.serviceOutput = serviceOutput;
 			this.chmPath = chmPath;
@@ -32,6 +34,7 @@
 			this.ntstatusXml = ntstatusXml;
 			this.winerrorXml = winerrorXml;
 			this.hresultXml = hresultXml;
+			this.wmXml = wmXml;
 			this.svnCommand = svnCommand;
 		}
 		
@@ -48,6 +51,8 @@
 			                                 winerrorXml));
 			commands.Add(new HresultCommand(serviceOutput,
 			                                hresultXml));
+			commands.Add(new WmCommand(serviceOutput,
+			                           wmXml));
 			commands.Add(new SvnCommand(serviceOutput,
 			                            svnCommand));
 		}

Added: trunk/irc/TechBot/TechBot.Library/WmCommand.cs
--- trunk/irc/TechBot/TechBot.Library/WmCommand.cs	2005-12-14 12:41:38 UTC (rev 20163)
+++ trunk/irc/TechBot/TechBot.Library/WmCommand.cs	2005-12-14 17:34:00 UTC (rev 20164)
@@ -0,0 +1,104 @@
+using System;
+using System.Xml;
+
+namespace TechBot.Library
+{
+	public class WmCommand : BaseCommand, ICommand
+	{
+		private IServiceOutput serviceOutput;
+		private string wmXml;
+		private XmlDocument wmXmlDocument;
+
+		public WmCommand(IServiceOutput serviceOutput,
+		                 string wmXml)
+		{
+			this.serviceOutput = serviceOutput;
+			this.wmXml = wmXml;
+			wmXmlDocument = new XmlDocument();
+			wmXmlDocument.Load(wmXml);
+		}
+		
+		public bool CanHandle(string commandName)
+		{
+			return CanHandle(commandName,
+			                 new string[] { "wm" });
+		}
+
+		public void Handle(MessageContext context,
+		                   string commandName,
+		                   string parameters)
+		{
+			string wmText = parameters;
+			if (wmText.Equals(String.Empty))
+			{
+				serviceOutput.WriteLine(context,
+				                        "Please provide a valid window message value or name.");
+				return;
+			}
+
+			NumberParser np = new NumberParser();
+			long wm = np.Parse(wmText);
+			string output;
+			if (np.Error)
+			{
+				// Assume "!wm <name>" form.
+				output = GetWmNumber(wmText);
+			}
+			else
+			{
+				output = GetWmDescription(wm);
+			}
+
+			if (output != null)
+			{
+				serviceOutput.WriteLine(context,
+				                        String.Format("{0} is {1}.",
+				                                      wmText,
+			        	                              output));
+			}
+			else
+			{
+				serviceOutput.WriteLine(context,
+				                        String.Format("I don't know about window message {0}.",
+			        	                              wmText));
+			}
+		}
+		
+		public string Help()
+		{
+			return "!wm <value> or !wm <name>";
+		}
+		
+		private string GetWmDescription(long wm)
+		{
+			XmlElement root = wmXmlDocument.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 = wmXmlDocument.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;
+		}
+	}
+}