The Decompiler decompiles .NET Assemblies and generates a high quality readable source-code which can be recompiled in most cases and produces the same behavior as the binary.
The Decompiler Backends renderes the final output. Version 1.3 of the decompiler comes with 5 Backends:
we are working to add new backends ( J#, Delpho etc ).
The Decompiler is integrated into the browser's GUI. Decompiled code can be saved to Disk.
The decompilation engine produces readable formatted code. A Name inference engine produces readable Names for local variables.
void WndProc (
System.Windows.Forms.Message& m)
{
System.Guid guid;
RECT rECT;
PAINTSTRUCT pAINTSTRUCT;
System.Windows.Forms.Design.IMouseHandler iMouseHandler = null;
if ((m.Msg == 132) && (this.inHitTest == null))
{
this.inHitTest = 1;
System.Drawing.Point point = new System.Drawing.Point (Util.LOWORD (IntPtr.op_Explicit (m.LParam)), Util.HIWORD (IntPtr.op_Explicit (m.LParam)));
try
{
this.liveRegion = this.GetHitTest (point);
}
catch (Exception )
{
this.liveRegion = 0;
}
this.inHitTest = 0;
}
bool f = m.Msg == 123;
if ((this.liveRegion != null) && ( (this.IsMouseMessage (m.Msg)) || (f)))
{
if (m.Msg == 123)
{
ControlDesigner.inContextMenu = 1;
}
try
{
this.DefWndProc (&m);
}
finally {
if (m.Msg == 123)
{
ControlDesigner.inContextMenu = 0;
}
}
return;
}
int k = 0;
int i = 0;
if (((m.Msg >= 512) && (m.Msg <= 522)) || ((m.Msg >= 160) && (m.Msg <= 169)) || (m.Msg == 32))
{
if (this.eventSvc == null)
{
this.eventSvc = (IEventHandlerService) base.GetService (Type.GetTypeFromHandle (IEventHandlerService));
}
if (this.eventSvc != null)
{
iMouseHandler = (IMouseHandler) this.eventSvc.GetHandler (Type.GetTypeFromHandle (IMouseHandler));
}
}
if ((m.Msg >= 512) && (m.Msg <= 522))
{
POINT pOINT = new NMHEADER ();
pOINT.x = Util.SignedLOWORD (IntPtr.op_Explicit (m.LParam));
pOINT.y = Util.SignedHIWORD (IntPtr.op_Explicit (m.LParam));
NativeMethods.MapWindowPoints (m.HWnd, IntPtr.Zero, pOINT, 1);
k = pOINT.x;
i = pOINT.y;
}
else {
if ((m.Msg >= 160) && (m.Msg <= 169))
{
k = Util.SignedLOWORD (IntPtr.op_Explicit (m.LParam));
i = Util.SignedHIWORD (IntPtr.op_Explicit (m.LParam));
}
}
System.Windows.Forms.MouseButtons mouseButtons = 0;
int m = m.Msg;
switch (m)
{
case 1:
this.DefWndProc (&m);
(IntPtr(m.HWnd == this.Control.Handle) == null)
this.OnCreateHandle ();
return;
case 61:
if (-4 == IntPtr.op_Explicit (m.LParam))
{
guid = new System.Guid ("{618736E0-3C3D-11CF-810C-00AA00389B71}");
try
{
Accessibility.IAccessible iAccessible = this.AccessibilityObject;
if (iAccessible == null)
{
m.Result = IntPtr.op_Explicit (0);
}
else {
j = Marshal.GetIUnknownForObject (iAccessible);
try
{
m.Result = UnsafeNativeMethods.LresultFromObject (&guid, m.WParam, j);
}
finally {
Marshal.Release (j);
}
}
}
catch (Exception exception)
{
throw exception;
}
}
this.DefWndProc (&m);
return;
case 673:
if (iMouseHandler != null)
{
iMouseHandler.OnMouseHover (base.Component);
return;
}
this.OnMouseHover ();
return;
case 675:
this.OnMouseLeave ();
this.BaseWndProc (&m);
return;
case 163:
case 166:
case 515:
case 518:
if ((m.Msg == 166) || (m.Msg == 518))
{
mouseButtons = 2097152;
}
else {
mouseButtons = 1048576;
}
(mouseButtons != 1048576)
if (iMouseHandler != null)
{
iMouseHandler.OnMouseDoubleClick (base.Component);
return;
}
this.OnMouseDoubleClick ();
return;
case 161:
case 164:
case 513:
case 516:
if ((m.Msg == 164) || (m.Msg == 516))
{
mouseButtons = 2097152;
}
else {
mouseButtons = 1048576;
}
NativeMethods.SendMessage (this.Control.Handle, 7, 0, 0);
if ((mouseButtons == 1048576) && (this.IsDoubleClick (k, i)))
{
if (iMouseHandler != null)
{
iMouseHandler.OnMouseDoubleClick (base.Component);
return;
}
this.OnMouseDoubleClick ();
return;
}
this.toolPassThrough = 0;
if (! (this.EnableDragRect) && (mouseButtons == 1048576))
{
if (this.toolboxSvc == null)
{
this.toolboxSvc = (IToolboxService) base.GetService (Type.GetTypeFromHandle (IToolboxService));
}
if ((this.toolboxSvc != null) && (this.toolboxSvc.GetSelectedToolboxItem ((IDesignerHost) base.GetService (Type.GetTypeFromHandle (IDesignerHost))) != null))
{
this.toolPassThrough = 1;
}
this.toolPassThrough = 0;
}
IL_04e0:if (this.toolPassThrough != null)
{
NativeMethods.SendMessage (this.Control.Parent.Handle, m.Msg, m.WParam, IntPtr.op_Explicit (this.GetParentPointFromLparam (m.LParam)));
return;
}
if (iMouseHandler != null)
{
iMouseHandler.OnMouseDown (base.Component, mouseButtons, k, i);
}
else {
if (mouseButtons == 1048576)
{
this.OnMouseDragBegin (k, i);
}
if (mouseButtons == 2097152)
{
System.ComponentModel.Design.ISelectionService iSelectionService = (ISelectionService) base.GetService (Type.GetTypeFromHandle (ISelectionService));
if (iSelectionService != null)
{
object[ ] obj = new System.Object [1];
obj [0] = base.Component;
iSelectionService.SetSelectedComponents (obj, 16);
}
}
}
IL_0587:this.lastMoveScreenX = k;
this.lastMoveScreenY = i;
return;
case 160:
case 512:
if ((IntPtr.op_Explicit (m.WParam) & 1) != null)
{
mouseButtons = 1048576;
}
else {
if ((IntPtr.op_Explicit (m.WParam) & 2) != null)
{
mouseButtons = 2097152;
this.toolPassThrough = 0;
}
this.toolPassThrough = 0;
}
IL_05d5:if ((this.lastMoveScreenX != k) || (this.lastMoveScreenY != i))
{
if (this.toolPassThrough != null)
{
NativeMethods.SendMessage (this.Control.Parent.Handle, m.Msg, m.WParam, IntPtr.op_Explicit (this.GetParentPointFromLparam (m.LParam)));
return;
}
if (iMouseHandler != null)
{
iMouseHandler.OnMouseMove (base.Component, k, i);
}
if (mouseButtons == 1048576)
{
this.OnMouseDragMove (k, i);
}
}
IL_064a:this.lastMoveScreenX = k;
this.lastMoveScreenY = i;
this.BaseWndProc (&m);
return;
case 162:
case 165:
case 514:
case 517:
if ((m.Msg == 164) || (m.Msg == 516))
{
mouseButtons = 2097152;
}
else {
mouseButtons = 1048576;
}
if (iMouseHandler != null)
{
iMouseHandler.OnMouseUp (base.Component, mouseButtons);
}
else {
if (this.toolPassThrough != null)
{
NativeMethods.SendMessage (this.Control.Parent.Handle, m.Msg, m.WParam, IntPtr.op_Explicit (this.GetParentPointFromLparam (m.LParam)));
this.toolPassThrough = 0;
return;
}
if (mouseButtons == 1048576)
{
this.OnMouseDragEnd (0);
}
}
this.toolPassThrough = 0;
this.BaseWndProc (&m);
return;
case 15:
if (OleDragDropHandler.FreezePainting)
{
NativeMethods.ValidateRect (m.HWnd, IntPtr.Zero);
return;
}
rECT = (RECT) null;
n = NativeMethods.CreateRectRgn (0, 0, 0, 0);
NativeMethods.GetUpdateRgn (m.HWnd, n, 0);
NativeMethods.GetUpdateRect (m.HWnd, &rECT, 0);
System.Drawing.Region region = Region.FromHrgn (n);
try
{
if (this.thrownException == null)
{
this.DefWndProc (&m);
}
System.Drawing.Graphics graphics = Graphics.FromHwnd (m.HWnd);
if (IntPtr.op_Inequality (m.HWnd, this.Control.Handle))
{
POINT pOINT1 = new NMHEADER ();
pOINT1.x = 0;
pOINT1.y = 0;
NativeMethods.MapWindowPoints (m.HWnd, this.Control.Handle, pOINT1, 1);
graphics.TranslateTransform (- (pOINT1.x), - (pOINT1.y));
NativeMethods.MapWindowPoints (m.HWnd, this.Control.Handle, &rECT, 2);
}
System.Drawing.Rectangle rectangle = new System.Drawing.Rectangle (rECT.left, rECT.top, (rECT.right - rECT.left), (rECT.bottom - rECT.top));
System.Windows.Forms.PaintEventArgs paintEventArgs = new System.Windows.Forms.PaintEventArgs (graphics, rectangle);
try
{
graphics.Clip = region;
if (this.thrownException == null)
{
this.OnPaintAdornments (paintEventArgs);
}
else {
pAINTSTRUCT = (PAINTSTRUCT) null;
UnsafeNativeMethods.BeginPaint (m.HWnd, &pAINTSTRUCT);
this.PaintException (paintEventArgs, this.thrownException);
UnsafeNativeMethods.EndPaint (m.HWnd, &pAINTSTRUCT);
}
}
finally {
if (paintEventArgs != null)
{
paintEventArgs.Dispose ();
}
graphics.Dispose ();
}
}
finally {
region.Dispose ();
NativeMethods.DeleteObject (n);
}
goto case 32;
case 32:
if (this.liveRegion != null)
{
this.DefWndProc (&m);
return;
}
if (iMouseHandler != null)
{
iMouseHandler.OnSetCursor (base.Component);
return;
}
this.OnSetCursor ();
return;
case 5:
if (this.thrownException != null)
{
this.Control.Invalidate ();
}
this.DefWndProc (&m);
return;
case 31:
this.OnMouseDragEnd (1);
this.DefWndProc (&m);
return;
case 7:
if ((this.host != null) && (this.host.RootComponent != null))
{
System.ComponentModel.Design.IDesigner iDesigner = this.host.GetDesigner (this.host.RootComponent);
if (iDesigner is IRootDesigner)
{
System.ComponentModel.Design.IRootDesigner iRootDesigner = (IRootDesigner) iDesigner;
System.ComponentModel.Design.ViewTechnology[ ] viewTechnology = iRootDesigner.SupportedTechnologies;
System.ComponentModel.Design.ViewTechnology[ ] viewTechnology2 = viewTechnology;
for (m = 0; m < viewTechnology2.Length; m++)
{
System.ComponentModel.Design.ViewTechnology viewTechnology1 = viewTechnology2 [m];
if (viewTechnology1 == 1)
{
(Control) iRootDesigner.GetView (viewTechnology1).Focus ();
return;
}
};
return;
}
}
goto case 123;
case 123:
case 6:
};
return;
}
The Decompiler decompiles .NET code referring to Native Code:
private static void Win32Native ()
{
Win32Native.INVALID_HANDLE_VALUE.ctor
(-1);
Win32Native.NULL = IntPtr.Zero;
return;
}
public void Win32Native ()
{
base ();
return;
}
[DllImport ("kernel32.dll", CharSet = None)]
internal static bool CloseHandle (
int handle)
;
[DllImport ("kernel32.dll", CharSet = Auto)]
internal static bool CopyFile (
string src
,string dst
,bool failIfExists)
;