Skip to content

Commit 8e27089

Browse files
author
Andrew Mansell
committed
Improved event \ message firehoses
1 parent a6c12a5 commit 8e27089

File tree

5 files changed

+345
-8
lines changed

5 files changed

+345
-8
lines changed

Rubberduck.VBEEditor/Events/VBENativeServices.cs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,21 @@ public static void VbeEventCallback(IntPtr hWinEventHook, uint eventType, IntPtr
8080
{
8181
if (Suspend || hwnd == IntPtr.Zero || _vbe.IsWrappingNullReference) { return; }
8282

83-
#if THIRSTY_DUCK && DEBUG
83+
var windowType = hwnd.ToWindowType();
84+
85+
#if (DEBUG && (THIRSTY_DUCK || THIRSTY_DUCK_EVT))
86+
8487
//This is an output window firehose, viewer discretion is advised.
85-
if (idObject != (int)ObjId.Cursor) { Debug.WriteLine("Hwnd: {0:X4} - EventType {1:X4}, idObject {2}, idChild {3}", (int)hwnd, eventType, idObject, idChild); }
88+
if (idObject != (int)ObjId.Cursor)
89+
{
90+
var windowClassName = hwnd.ToClassName();
91+
if (!WinEventMap.Lookup.TryGetValue(eventType, out var eventName))
92+
{
93+
eventName = "Unknown";
94+
}
95+
Debug.WriteLine("EVT: {0:X4} ({1}) Hwnd {2:X4} ({3}), idObject {4}, idChild {5}", eventType, eventName, (int)hwnd, windowClassName, idObject, idChild);
96+
}
8697
#endif
87-
var windowType = hwnd.ToWindowType();
8898

8999
if (windowType == WindowType.IntelliSense)
90100
{

Rubberduck.VBEEditor/WindowsApi/DesignerWindowSubclass.cs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,6 @@ public override int SubClassProc(IntPtr hWnd, IntPtr msg, IntPtr wParam, IntPtr
2020
DispatchFocusEvent(FocusType.GotFocus);
2121
}
2222

23-
#if THIRSTY_DUCK && DEBUG
24-
//This is an output window firehose kind of like spy++. Prepare for some spam.
25-
Debug.WriteLine("WM: {0:X4}, wParam {1}, lParam {2}", msg, wParam, lParam);
26-
#endif
2723
return base.SubClassProc(hWnd, msg, wParam, lParam, uIdSubclass, dwRefData);
2824
}
2925
}

Rubberduck.VBEEditor/WindowsApi/SubclassingWindow.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Diagnostics;
33
using System.Runtime.InteropServices;
4+
using System.Text;
45
using NLog;
56

67
namespace Rubberduck.VBEditor.WindowsApi
@@ -85,6 +86,16 @@ public virtual int SubClassProc(IntPtr hWnd, IntPtr msg, IntPtr wParam, IntPtr l
8586
return DefSubclassProc(hWnd, msg, wParam, lParam);
8687
}
8788

89+
#if (DEBUG && (THIRSTY_DUCK || THIRSTY_DUCK_WM))
90+
//This is an output window firehose kind of like spy++. Prepare for some spam.
91+
var windowClassName = ToClassName(hWnd);
92+
if (!(WM_MAP.Lookup.TryGetValue((uint) msg, out var wmName)))
93+
{
94+
wmName = "Unknown";
95+
}
96+
Debug.WriteLine("MSG: {0:X4} ({1}), Hwnd {2:X4} ({3}), wParam {4:X4}, lParam {5:X4}", (uint)msg, wmName, (uint)hWnd, windowClassName, (uint)wParam, (uint)lParam);
97+
#endif
98+
8899
if ((uint) msg == (uint) WM.DESTROY)
89100
{
90101
Dispose();
@@ -107,5 +118,12 @@ protected virtual void Dispose(bool disposing)
107118

108119
_disposed = true;
109120
}
121+
122+
private static string ToClassName(IntPtr hwnd)
123+
{
124+
var name = new StringBuilder(User32.MaxGetClassNameBufferSize);
125+
User32.GetClassName(hwnd, name, name.Capacity);
126+
return name.ToString();
127+
}
110128
}
111129
}

Rubberduck.VBEEditor/WindowsApi/WM.cs

Lines changed: 239 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23

34
namespace Rubberduck.VBEditor.WindowsApi
45
{
@@ -977,4 +978,242 @@ public enum WM : uint
977978
/// </summary>
978979
HSHELL_WINDOWREPLACED = 13
979980
}
981+
982+
#if (DEBUG && (THIRSTY_DUCK || THIRSTY_DUCK_WM))
983+
984+
public static class WM_MAP
985+
{
986+
public static readonly Dictionary<uint, string> Lookup = new Dictionary<uint, string>
987+
{
988+
{0x0000, "NULL"},
989+
{0x0001, "CREATE"},
990+
{0x0002, "DESTROY"},
991+
{0x0003, "MOVE"},
992+
{0x0005, "SIZE"},
993+
{0x0006, "ACTIVATE"},
994+
{0x0007, "SETFOCUS"},
995+
{0x0008, "KILLFOCUS"},
996+
{0x000A, "ENABLE"},
997+
{0x000B, "SETREDRAW"},
998+
{0x000C, "SETTEXT"},
999+
{0x000D, "GETTEXT"},
1000+
{0x000E, "GETTEXTLENGTH"},
1001+
{0x000F, "PAINT"},
1002+
{0x0010, "CLOSE"},
1003+
{0x0011, "QUERYENDSESSION"},
1004+
{0x0013, "QUERYOPEN"},
1005+
{0x0016, "ENDSESSION"},
1006+
{0x0012, "QUIT"},
1007+
{0x0014, "ERASEBKGND"},
1008+
{0x0015, "SYSCOLORCHANGE"},
1009+
{0x0018, "SHOWWINDOW"},
1010+
{0x001A, "WININICHANGE"},
1011+
{0x001B, "DEVMODECHANGE"},
1012+
{0x001C, "ACTIVATEAPP"},
1013+
{0x001D, "FONTCHANGE"},
1014+
{0x001E, "TIMECHANGE"},
1015+
{0x001F, "CANCELMODE"},
1016+
{0x0020, "SETCURSOR"},
1017+
{0x0021, "MOUSEACTIVATE"},
1018+
{0x0022, "CHILDACTIVATE"},
1019+
{0x0023, "QUEUESYNC"},
1020+
{0x0024, "GETMINMAXINFO"},
1021+
{0x0026, "PAINTICON"},
1022+
{0x0027, "ICONERASEBKGND"},
1023+
{0x0028, "NEXTDLGCTL"},
1024+
{0x002A, "SPOOLERSTATUS"},
1025+
{0x002B, "DRAWITEM"},
1026+
{0x002C, "MEASUREITEM"},
1027+
{0x002D, "DELETEITEM"},
1028+
{0x002E, "VKEYTOITEM"},
1029+
{0x002F, "CHARTOITEM"},
1030+
{0x0030, "SETFONT"},
1031+
{0x0031, "GETFONT"},
1032+
{0x0032, "SETHOTKEY"},
1033+
{0x0033, "GETHOTKEY"},
1034+
{0x0037, "QUERYDRAGICON"},
1035+
{0x0039, "COMPAREITEM"},
1036+
{0x003D, "GETOBJECT"},
1037+
{0x0041, "COMPACTING"},
1038+
{0x0044, "COMMNOTIFY"},
1039+
{0x0046, "WINDOWPOSCHANGING"},
1040+
{0x0047, "WINDOWPOSCHANGED"},
1041+
{0x0048, "POWER"},
1042+
{0x004A, "COPYDATA"},
1043+
{0x004B, "CANCELJOURNAL"},
1044+
{0x004E, "NOTIFY"},
1045+
{0x0050, "INPUTLANGCHANGEREQUEST"},
1046+
{0x0051, "INPUTLANGCHANGE"},
1047+
{0x0052, "TCARD"},
1048+
{0x0053, "HELP"},
1049+
{0x0054, "USERCHANGED"},
1050+
{0x0055, "NOTIFYFORMAT"},
1051+
{0x007B, "CONTEXTMENU"},
1052+
{0x007C, "STYLECHANGING"},
1053+
{0x007D, "STYLECHANGED"},
1054+
{0x007E, "DISPLAYCHANGE"},
1055+
{0x007F, "GETICON"},
1056+
{0x0080, "SETICON"},
1057+
{0x0081, "NCCREATE"},
1058+
{0x0082, "NCDESTROY"},
1059+
{0x0083, "NCCALCSIZE"},
1060+
{0x0084, "NCHITTEST"},
1061+
{0x0085, "NCPAINT"},
1062+
{0x0086, "NCACTIVATE"},
1063+
{0x0087, "GETDLGCODE"},
1064+
{0x0088, "SYNCPAINT"},
1065+
{0x00A0, "NCMOUSEMOVE"},
1066+
{0x00A1, "NCLBUTTONDOWN"},
1067+
{0x00A2, "NCLBUTTONUP"},
1068+
{0x00A3, "NCLBUTTONDBLCLK"},
1069+
{0x00A4, "NCRBUTTONDOWN"},
1070+
{0x00A5, "NCRBUTTONUP"},
1071+
{0x00A6, "NCRBUTTONDBLCLK"},
1072+
{0x00A7, "NCMBUTTONDOWN"},
1073+
{0x00A8, "NCMBUTTONUP"},
1074+
{0x00A9, "NCMBUTTONDBLCLK"},
1075+
{0x00AB, "NCXBUTTONDOWN"},
1076+
{0x00AC, "NCXBUTTONUP"},
1077+
{0x00AD, "NCXBUTTONDBLCLK"},
1078+
{0x00FE, "INPUT_DEVICE_CHANGE"},
1079+
{0x00FF, "INPUT"},
1080+
{0x0100, "KEYFIRST/KEYDOWN"},
1081+
{0x0101, "KEYUP"},
1082+
{0x0102, "CHAR"},
1083+
{0x0103, "DEADCHAR"},
1084+
{0x0104, "SYSKEYDOWN"},
1085+
{0x0105, "SYSKEYUP"},
1086+
{0x0106, "SYSCHAR"},
1087+
{0x0107, "SYSDEADCHAR"},
1088+
{0x0109, "UNICHAR/KEYLAST"},
1089+
{0x010D, "IME_STARTCOMPOSITION"},
1090+
{0x010E, "IME_ENDCOMPOSITION"},
1091+
{0x010F, "IME_COMPOSITION/IME_KEYLAST"},
1092+
{0x0110, "INITDIALOG"},
1093+
{0x0111, "COMMAND"},
1094+
{0x0112, "SYSCOMMAND"},
1095+
{0x0113, "TIMER"},
1096+
{0x0114, "HSCROLL"},
1097+
{0x0115, "VSCROLL"},
1098+
{0x0116, "INITMENU"},
1099+
{0x0117, "INITMENUPOPUP"},
1100+
{0x011F, "MENUSELECT"},
1101+
{0x0120, "MENUCHAR"},
1102+
{0x0121, "ENTERIDLE"},
1103+
{0x0122, "MENURBUTTONUP"},
1104+
{0x0123, "MENUDRAG"},
1105+
{0x0124, "MENUGETOBJECT"},
1106+
{0x0125, "UNINITMENUPOPUP"},
1107+
{0x0126, "MENUCOMMAND"},
1108+
{0x0127, "CHANGEUISTATE"},
1109+
{0x0128, "UPDATEUISTATE"},
1110+
{0x0129, "QUERYUISTATE"},
1111+
{0x0132, "CTLCOLORMSGBOX"},
1112+
{0x0133, "CTLCOLOREDIT"},
1113+
{0x0134, "CTLCOLORLISTBOX"},
1114+
{0x0135, "CTLCOLORBTN"},
1115+
{0x0136, "CTLCOLORDLG"},
1116+
{0x0137, "CTLCOLORSCROLLBAR"},
1117+
{0x0138, "CTLCOLORSTATIC"},
1118+
{0x0200, "MOUSEFIRST/MOUSEMOVE"},
1119+
{0x0201, "LBUTTONDOWN"},
1120+
{0x0202, "LBUTTONUP"},
1121+
{0x0203, "LBUTTONDBLCLK"},
1122+
{0x0204, "RBUTTONDOWN"},
1123+
{0x0205, "RBUTTONUP"},
1124+
{0x0206, "RBUTTONDBLCLK"},
1125+
{0x0207, "MBUTTONDOWN"},
1126+
{0x0208, "MBUTTONUP"},
1127+
{0x0209, "MBUTTONDBLCLK"},
1128+
{0x020A, "MOUSEWHEEL"},
1129+
{0x020B, "XBUTTONDOWN"},
1130+
{0x020C, "XBUTTONUP"},
1131+
{0x020D, "XBUTTONDBLCLK"},
1132+
{0x020E, "MOUSEHWHEEL/MOUSELAST"},
1133+
{0x0210, "PARENTNOTIFY"},
1134+
{0x0211, "ENTERMENULOOP"},
1135+
{0x0212, "EXITMENULOOP"},
1136+
{0x0213, "NEXTMENU"},
1137+
{0x0214, "SIZING"},
1138+
{0x0215, "CAPTURECHANGED"},
1139+
{0x0216, "MOVING"},
1140+
{0x0218, "POWERBROADCAST"},
1141+
{0x0219, "DEVICECHANGE"},
1142+
{0x0220, "MDICREATE"},
1143+
{0x0221, "MDIDESTROY"},
1144+
{0x0222, "MDIACTIVATE"},
1145+
{0x0223, "MDIRESTORE"},
1146+
{0x0224, "MDINEXT"},
1147+
{0x0225, "MDIMAXIMIZE"},
1148+
{0x0226, "MDITILE"},
1149+
{0x0227, "MDICASCADE"},
1150+
{0x0228, "MDIICONARRANGE"},
1151+
{0x0229, "MDIGETACTIVE"},
1152+
{0x0230, "MDISETMENU"},
1153+
{0x0231, "ENTERSIZEMOVE"},
1154+
{0x0232, "EXITSIZEMOVE"},
1155+
{0x0233, "DROPFILES"},
1156+
{0x0234, "MDIREFRESHMENU"},
1157+
{0x0281, "IME_SETCONTEXT"},
1158+
{0x0282, "IME_NOTIFY"},
1159+
{0x0283, "IME_CONTROL"},
1160+
{0x0284, "IME_COMPOSITIONFULL"},
1161+
{0x0285, "IME_SELECT"},
1162+
{0x0286, "IME_CHAR"},
1163+
{0x0288, "IME_REQUEST"},
1164+
{0x0290, "IME_KEYDOWN"},
1165+
{0x0291, "IME_KEYUP"},
1166+
{0x02A1, "MOUSEHOVER"},
1167+
{0x02A3, "MOUSELEAVE"},
1168+
{0x02A0, "NCMOUSEHOVER"},
1169+
{0x02A2, "NCMOUSELEAVE"},
1170+
{0x02B1, "WTSSESSION_CHANGE"},
1171+
{0x02c0, "TABLET_FIRST"},
1172+
{0x02df, "TABLET_LAST"},
1173+
{0x0300, "CUT"},
1174+
{0x0301, "COPY"},
1175+
{0x0302, "PASTE"},
1176+
{0x0303, "CLEAR"},
1177+
{0x0304, "UNDO"},
1178+
{0x0305, "RENDERFORMAT"},
1179+
{0x0306, "RENDERALLFORMATS"},
1180+
{0x0307, "DESTROYCLIPBOARD"},
1181+
{0x0308, "DRAWCLIPBOARD"},
1182+
{0x0309, "PAINTCLIPBOARD"},
1183+
{0x030A, "VSCROLLCLIPBOARD"},
1184+
{0x030B, "SIZECLIPBOARD"},
1185+
{0x030C, "ASKCBFORMATNAME"},
1186+
{0x030D, "CHANGECBCHAIN"},
1187+
{0x030E, "HSCROLLCLIPBOARD"},
1188+
{0x030F, "QUERYNEWPALETTE"},
1189+
{0x0310, "PALETTEISCHANGING"},
1190+
{0x0311, "PALETTECHANGED"},
1191+
{0x0312, "HOTKEY"},
1192+
{0x0317, "PRINT"},
1193+
{0x0318, "PRINTCLIENT"},
1194+
{0x0319, "APPCOMMAND"},
1195+
{0x031A, "THEMECHANGED"},
1196+
{0x031D, "CLIPBOARDUPDATE"},
1197+
{0x031E, "DWMCOMPOSITIONCHANGED"},
1198+
{0x031F, "DWMNCRENDERINGCHANGED"},
1199+
{0x0320, "DWMCOLORIZATIONCOLORCHANGED"},
1200+
{0x0321, "DWMWINDOWMAXIMIZEDCHANGE"},
1201+
{0x033F, "GETTITLEBARINFOEX"},
1202+
{0x0358, "HANDHELDFIRST"},
1203+
{0x035F, "HANDHELDLAST"},
1204+
{0x0360, "AFXFIRST"},
1205+
{0x037F, "AFXLAST"},
1206+
{0x0380, "PENWINFIRST"},
1207+
{0x038F, "PENWINLAST"},
1208+
{0x8000, "APP"},
1209+
{0x0400, "USER"},
1210+
{0x1400, "CPL_LAUNCH"},
1211+
{0x1401, "CPL_LAUNCHED"},
1212+
{0x118, "SYSTIMER"},
1213+
{0x1300, "RUBBERDUCK_CHILD_FOCUS"},
1214+
{0x111E, "RUBBERDUCK_SINKING"}
1215+
};
1216+
}
1217+
1218+
#endif
9801219
}

0 commit comments

Comments
 (0)