try(PInspector.close())catch() ( local vr_Maxversion = undefined local sc_ExecPath = getFilenamePath(getSourceFileName()) local sc_Assembly = sc_ExecPath + "\\MinimalWinApi.dll" local vr_MaxDomain = dotnetclass "System.AppDomain" local vr_IsReady = false --//-- --if ((maxversion())[1] >= 10000) and ((maxversion())[1] <= 10999) then (vr_Maxversion = 2008) if ((maxversion())[1] >= 11000) and ((maxversion())[1] <= 11999) then (vr_Maxversion = 2009) if ((maxversion())[1] >= 12000) and ((maxversion())[1] <= 12999) then (vr_Maxversion = 2010) --//-- if vr_Maxversion != undefined then ( --//-- for f in vr_MaxDomain.CurrentDomain.GetAssemblies() do ( if (filterstring f.fullname ",")[1] == "MaxCustomControls" then ( vr_IsReady = true; exit ) ) --//-- if not vr_IsReady then ( dotNet.loadAssembly (getdir #maxroot + "\\MaxCustomControls.dll") ) --//-- vr_IsReady = false --//-- for f in vr_MaxDomain.CurrentDomain.GetAssemblies() do ( if (filterstring f.fullname ",")[1] == "MinimalWinApi" then ( vr_IsReady = true; exit ) ) --//-- if not vr_IsReady then ( CProvider = dotnetobject "Microsoft.CSharp.CSharpCodeProvider" CParams = dotnetobject "System.CodeDom.Compiler.CompilerParameters" StrBuild = Dotnetobject "System.Text.StringBuilder" --//-- CParams.GenerateInMemory = true CParams.CompilerOptions = "" --//-- CParams.ReferencedAssemblies.Add("system.dll") CParams.ReferencedAssemblies.Add("system.xml.dll") CParams.ReferencedAssemblies.Add("system.data.dll") CParams.ReferencedAssemblies.Add("System.Windows.Forms.dll") CParams.ReferencedAssemblies.Add("System.Drawing.dll") CParams.ReferencedAssemblies.Add("System.Management.dll") CParams.ReferencedAssemblies.Add("Accessibility.dll") CParams.OutputAssembly = sc_Assembly --//--(winapi source) StrBuild.Append("using System;\n") StrBuild.Append("using System.Collections.Generic;\n") StrBuild.Append("using System.Text;\n") StrBuild.Append("using System.Runtime.InteropServices;\n") StrBuild.Append("using System.ComponentModel;\n") StrBuild.Append("using System.Windows.Forms;\n") StrBuild.Append("using System.Diagnostics;\n") StrBuild.Append("using System.Drawing;\n") StrBuild.Append("using System.Drawing.Drawing2D;\n") --//-- StrBuild.Append("namespace MinimalWinapi.Windows\n") StrBuild.Append("{\n") --//-- StrBuild.Append(" internal class ApiHelper\n") StrBuild.Append(" {\n") StrBuild.Append(" internal static int FailIfZero(int returnValue)\n") StrBuild.Append(" {\n") StrBuild.Append(" if (returnValue == 0)\n") StrBuild.Append(" {\n") StrBuild.Append(" throw new Win32Exception(Marshal.GetLastWin32Error());\n") StrBuild.Append(" }\n") StrBuild.Append(" return returnValue;\n") StrBuild.Append(" }\n") StrBuild.Append(" internal static IntPtr FailIfZero(IntPtr returnValue)\n") StrBuild.Append(" {\n") StrBuild.Append(" if (returnValue == IntPtr.Zero)\n") StrBuild.Append(" {\n") StrBuild.Append(" throw new Win32Exception(Marshal.GetLastWin32Error());\n") StrBuild.Append(" }\n") StrBuild.Append(" return returnValue;\n") StrBuild.Append(" }\n") StrBuild.Append(" }\n") --//-- StrBuild.Append(" [StructLayout(LayoutKind.Sequential)]\n") StrBuild.Append(" public struct POINT\n") StrBuild.Append(" {\n") StrBuild.Append(" public int X;\n") StrBuild.Append(" public int Y;\n") StrBuild.Append(" public POINT(int x, int y)\n") StrBuild.Append(" {\n") StrBuild.Append(" this.X = x;\n") StrBuild.Append(" this.Y = y;\n") StrBuild.Append(" }\n") StrBuild.Append(" public static implicit operator System.Drawing.Point(POINT p)\n") StrBuild.Append(" {\n") StrBuild.Append(" return new System.Drawing.Point(p.X, p.Y);\n") StrBuild.Append(" }\n") StrBuild.Append(" public static implicit operator POINT(System.Drawing.Point p)\n") StrBuild.Append(" {\n") StrBuild.Append(" return new POINT(p.X, p.Y);\n") StrBuild.Append(" }\n") StrBuild.Append(" }\n") StrBuild.Append(" [Serializable, StructLayout(LayoutKind.Sequential)]\n") StrBuild.Append(" public struct RECT\n") StrBuild.Append(" {\n") StrBuild.Append(" public int Left;\n") StrBuild.Append(" public int Top;\n") StrBuild.Append(" public int Right;\n") StrBuild.Append(" public int Bottom;\n") StrBuild.Append(" public RECT(int left_, int top_, int right_, int bottom_)\n") StrBuild.Append(" {\n") StrBuild.Append(" Left = left_;\n") StrBuild.Append(" Top = top_;\n") StrBuild.Append(" Right = right_;\n") StrBuild.Append(" Bottom = bottom_;\n") StrBuild.Append(" }\n") StrBuild.Append(" public int Height { get { return Bottom - Top; } }\n") StrBuild.Append(" public int Width { get { return Right - Left; } }\n") StrBuild.Append(" public Size Size { get { return new Size(Width, Height); } }\n") StrBuild.Append(" public Point Location { get { return new Point(Left, Top); } }\n") StrBuild.Append(" public Rectangle ToRectangle()\n") StrBuild.Append(" { return Rectangle.FromLTRB(Left, Top, Right, Bottom); }\n") StrBuild.Append(" public static RECT FromRectangle(Rectangle rectangle)\n") StrBuild.Append(" {\n") StrBuild.Append(" return new RECT(rectangle.Left, rectangle.Top, rectangle.Right, rectangle.Bottom);\n") StrBuild.Append(" }\n") StrBuild.Append(" public override int GetHashCode()\n") StrBuild.Append(" {\n") StrBuild.Append(" return Left ^ ((Top << 13) | (Top >> 0x13))\n") StrBuild.Append(" ^ ((Width << 0x1a) | (Width >> 6))\n") StrBuild.Append(" ^ ((Height << 7) | (Height >> 0x19));\n") StrBuild.Append(" }\n") StrBuild.Append(" public static implicit operator Rectangle(RECT rect)\n") StrBuild.Append(" {\n") StrBuild.Append(" return Rectangle.FromLTRB(rect.Left, rect.Top, rect.Right, rect.Bottom);\n") StrBuild.Append(" }\n") StrBuild.Append(" public static implicit operator RECT(Rectangle rect)\n") StrBuild.Append(" {\n") StrBuild.Append(" return new RECT(rect.Left, rect.Top, rect.Right, rect.Bottom);\n") StrBuild.Append(" }\n") StrBuild.Append(" }\n") StrBuild.Append(" [Flags]\n") StrBuild.Append(" public enum WindowStyleFlags\n") StrBuild.Append(" {\n") StrBuild.Append(" OVERLAPPED = 0x00000000,\n") StrBuild.Append(" POPUP = unchecked((int)0x80000000),\n") StrBuild.Append(" CHILD = 0x40000000,\n") StrBuild.Append(" MINIMIZE = 0x20000000,\n") StrBuild.Append(" VISIBLE = 0x10000000,\n") StrBuild.Append(" DISABLED = 0x08000000,\n") StrBuild.Append(" CLIPSIBLINGS = 0x04000000,\n") StrBuild.Append(" CLIPCHILDREN = 0x02000000,\n") StrBuild.Append(" MAXIMIZE = 0x01000000,\n") StrBuild.Append(" BORDER = 0x00800000,\n") StrBuild.Append(" DLGFRAME = 0x00400000,\n") StrBuild.Append(" VSCROLL = 0x00200000,\n") StrBuild.Append(" HSCROLL = 0x00100000,\n") StrBuild.Append(" SYSMENU = 0x00080000,\n") StrBuild.Append(" THICKFRAME = 0x00040000,\n") StrBuild.Append(" GROUP = 0x00020000,\n") StrBuild.Append(" TABSTOP = 0x00010000,\n") StrBuild.Append(" MINIMIZEBOX = 0x00020000,\n") StrBuild.Append(" MAXIMIZEBOX = 0x00010000,\n") StrBuild.Append(" CAPTION = BORDER | DLGFRAME,\n") StrBuild.Append(" TILED = OVERLAPPED,\n") StrBuild.Append(" ICONIC = MINIMIZE,\n") StrBuild.Append(" SIZEBOX = THICKFRAME,\n") StrBuild.Append(" TILEDWINDOW = OVERLAPPEDWINDOW,\n") StrBuild.Append(" OVERLAPPEDWINDOW = OVERLAPPED | CAPTION | SYSMENU | THICKFRAME | MINIMIZEBOX | MAXIMIZEBOX,\n") StrBuild.Append(" POPUPWINDOW = POPUP | BORDER | SYSMENU,\n") StrBuild.Append(" CHILDWINDOW = CHILD,\n") StrBuild.Append(" }\n") StrBuild.Append(" [Flags]\n") StrBuild.Append(" public enum WindowExStyleFlags : uint\n") StrBuild.Append(" {\n") StrBuild.Append(" ACCEPTFILES = 0x00000010,\n") StrBuild.Append(" APPWINDOW = 0x00040000,\n") StrBuild.Append(" CLIENTEDGE = 0x00000200,\n") StrBuild.Append(" COMPOSITED = 0x02000000,\n") StrBuild.Append(" CONTEXTHELP = 0x00000400,\n") StrBuild.Append(" CONTROLPARENT = 0x00010000,\n") StrBuild.Append(" DLGMODALFRAME = 0x00000001,\n") StrBuild.Append(" LAYERED = 0x00080000,\n") StrBuild.Append(" LAYOUTRTL = 0x00400000,\n") StrBuild.Append(" LEFT = 0x00000000,\n") StrBuild.Append(" LEFTSCROLLBAR = 0x00004000,\n") StrBuild.Append(" LTRREADING = 0x00000000,\n") StrBuild.Append(" MDICHILD = 0x00000040,\n") StrBuild.Append(" NOACTIVATE = 0x08000000,\n") StrBuild.Append(" NOINHERITLAYOUT = 0x00100000,\n") StrBuild.Append(" NOPARENTNOTIFY = 0x00000004,\n") StrBuild.Append(" OVERLAPPEDWINDOW = WINDOWEDGE | CLIENTEDGE,\n") StrBuild.Append(" PALETTEWINDOW = WINDOWEDGE | TOOLWINDOW | TOPMOST,\n") StrBuild.Append(" RIGHT = 0x00001000,\n") StrBuild.Append(" RIGHTSCROLLBAR = 0x00000000,\n") StrBuild.Append(" RTLREADING = 0x00002000,\n") StrBuild.Append(" STATICEDGE = 0x00020000,\n") StrBuild.Append(" TOOLWINDOW = 0x00000080,\n") StrBuild.Append(" TOPMOST = 0x00000008,\n") StrBuild.Append(" TRANSPARENT = 0x00000020,\n") StrBuild.Append(" WINDOWEDGE = 0x00000100\n") StrBuild.Append(" }\n") StrBuild.Append(" public class SystemWindow\n") StrBuild.Append(" {\n") StrBuild.Append(" private static readonly Predicate ALL = delegate { return true; };\n") StrBuild.Append(" private IntPtr _hwnd;\n") StrBuild.Append(" public static SystemWindow ForegroundWindow\n") StrBuild.Append(" {\n") StrBuild.Append(" get{ return new SystemWindow(GetForegroundWindow()); }\n") StrBuild.Append(" set{ SetForegroundWindow(value.HWnd); }\n") StrBuild.Append(" }\n") StrBuild.Append(" public static SystemWindow DesktopWindow\n") StrBuild.Append(" {\n") StrBuild.Append(" get { return new SystemWindow(GetDesktopWindow()); }\n") StrBuild.Append(" }\n") StrBuild.Append(" public static SystemWindow[] AllToplevelWindows\n") StrBuild.Append(" {\n") StrBuild.Append(" get { return FilterToplevelWindows(new Predicate(ALL)); }\n") StrBuild.Append(" }\n") StrBuild.Append(" public static SystemWindow[] FilterToplevelWindows(Predicate predicate)\n") StrBuild.Append(" {\n") StrBuild.Append(" List wnds = new List();\n") StrBuild.Append(" EnumWindows(new EnumWindowsProc(delegate(IntPtr hwnd, IntPtr lParam)\n") StrBuild.Append(" {\n") StrBuild.Append(" SystemWindow tmp = new SystemWindow(hwnd);\n") StrBuild.Append(" if (predicate(tmp))\n") StrBuild.Append(" wnds.Add(tmp);\n") StrBuild.Append(" return 1;\n") StrBuild.Append(" }), new IntPtr(0));\n") StrBuild.Append(" return wnds.ToArray();\n") StrBuild.Append(" }\n") StrBuild.Append(" public static SystemWindow FromPoint(int x, int y)\n") StrBuild.Append(" {\n") StrBuild.Append(" IntPtr hwnd = WindowFromPoint(new POINT(x, y));\n") StrBuild.Append(" if (hwnd.ToInt64() == 0)\n") StrBuild.Append(" {\n") StrBuild.Append(" return null;\n") StrBuild.Append(" }\n") StrBuild.Append(" return new SystemWindow(hwnd);\n") StrBuild.Append(" }\n") StrBuild.Append(" public static SystemWindow FromPointEx(int x, int y, bool toplevel, bool enabledOnly)\n") StrBuild.Append(" {\n") StrBuild.Append(" SystemWindow sw = FromPoint(x, y);\n") StrBuild.Append(" if (sw == null) return null;\n") StrBuild.Append(" while (sw.ParentSymmetric != null)\n") StrBuild.Append(" sw = sw.ParentSymmetric;\n") StrBuild.Append(" if (toplevel)\n") StrBuild.Append(" return sw;\n") StrBuild.Append(" int area;\n") StrBuild.Append(" area = getArea(sw);\n") StrBuild.Append(" SystemWindow result = sw;\n") StrBuild.Append(" foreach (SystemWindow w in sw.AllDescendantWindows)\n") StrBuild.Append(" {\n") StrBuild.Append(" if (w.Visible && (w.Enabled || !enabledOnly))\n") StrBuild.Append(" {\n") StrBuild.Append(" if (w.Rectangle.ToRectangle().Contains(x, y))\n") StrBuild.Append(" {\n") StrBuild.Append(" int ar2 = getArea(w);\n") StrBuild.Append(" if (ar2 <= area)\n") StrBuild.Append(" {\n") StrBuild.Append(" area = ar2;\n") StrBuild.Append(" result = w;\n") StrBuild.Append(" }\n") StrBuild.Append(" }\n") StrBuild.Append(" }\n") StrBuild.Append(" }\n") StrBuild.Append(" return result;\n") StrBuild.Append(" }\n") StrBuild.Append(" private static int getArea(SystemWindow sw)\n") StrBuild.Append(" {\n") StrBuild.Append(" RECT rr = sw.Rectangle;\n") StrBuild.Append(" return rr.Height * rr.Width;\n") StrBuild.Append(" }\n") StrBuild.Append(" public SystemWindow(IntPtr HWnd)\n") StrBuild.Append(" {\n") StrBuild.Append(" _hwnd = HWnd;\n") StrBuild.Append(" }\n") StrBuild.Append(" public SystemWindow(Control control)\n") StrBuild.Append(" {\n") StrBuild.Append(" _hwnd = control.Handle;\n") StrBuild.Append(" }\n") StrBuild.Append(" public SystemWindow[] AllDescendantWindows\n") StrBuild.Append(" {\n") StrBuild.Append(" get\n") StrBuild.Append(" {\n") StrBuild.Append(" return FilterDescendantWindows(false, ALL);\n") StrBuild.Append(" }\n") StrBuild.Append(" }\n") StrBuild.Append(" public SystemWindow[] AllChildWindows\n") StrBuild.Append(" {\n") StrBuild.Append(" get\n") StrBuild.Append(" {\n") StrBuild.Append(" return FilterDescendantWindows(true, ALL);\n") StrBuild.Append(" }\n") StrBuild.Append(" }\n") StrBuild.Append(" public SystemWindow[] FilterDescendantWindows(bool directOnly, Predicate predicate)\n") StrBuild.Append(" {\n") StrBuild.Append(" List wnds = new List();\n") StrBuild.Append(" EnumChildWindows(_hwnd, delegate(IntPtr hwnd, IntPtr lParam)\n") StrBuild.Append(" {\n") StrBuild.Append(" SystemWindow tmp = new SystemWindow(hwnd);\n") StrBuild.Append(" bool add = true;\n") StrBuild.Append(" if (directOnly)\n") StrBuild.Append(" {\n") StrBuild.Append(" add = tmp.Parent._hwnd == _hwnd;\n") StrBuild.Append(" }\n") StrBuild.Append(" if (add && predicate(tmp))\n") StrBuild.Append(" wnds.Add(tmp);\n") StrBuild.Append(" return 1;\n") StrBuild.Append(" }, new IntPtr(0));\n") StrBuild.Append(" return wnds.ToArray();\n") StrBuild.Append(" }\n") StrBuild.Append(" public IntPtr HWnd { get { return _hwnd; } }\n") StrBuild.Append(" public string Title\n") StrBuild.Append(" {\n") StrBuild.Append(" get\n") StrBuild.Append(" {\n") StrBuild.Append(" StringBuilder sb = new StringBuilder(GetWindowTextLength(_hwnd) + 1);\n") StrBuild.Append(" GetWindowText(_hwnd, sb, sb.Capacity);\n") StrBuild.Append(" return sb.ToString();\n") StrBuild.Append(" }\n") StrBuild.Append(" set { SetWindowText(_hwnd, value); }\n") StrBuild.Append(" }\n") StrBuild.Append(" public string ClassName\n") StrBuild.Append(" {\n") StrBuild.Append(" get\n") StrBuild.Append(" {\n") StrBuild.Append(" int length = 64;\n") StrBuild.Append(" while (true)\n") StrBuild.Append(" {\n") StrBuild.Append(" StringBuilder sb = new StringBuilder(length);\n") StrBuild.Append(" ApiHelper.FailIfZero(GetClassName(_hwnd, sb, sb.Capacity));\n") StrBuild.Append(" if (sb.Length != length - 1)\n") StrBuild.Append(" {\n") StrBuild.Append(" return sb.ToString();\n") StrBuild.Append(" }\n") StrBuild.Append(" length *= 2;\n") StrBuild.Append(" }\n") StrBuild.Append(" }\n") StrBuild.Append(" }\n") StrBuild.Append(" public bool Visible\n") StrBuild.Append(" {\n") StrBuild.Append(" get { return IsWindowVisible(_hwnd); }\n") StrBuild.Append(" }\n") StrBuild.Append(" public bool TopMost\n") StrBuild.Append(" {\n") StrBuild.Append(" get { return (ExtendedStyle & WindowExStyleFlags.TOPMOST) != 0; }\n") StrBuild.Append(" set\n") StrBuild.Append(" {\n") StrBuild.Append(" if (value)\n") StrBuild.Append(" {\n") StrBuild.Append(" SetWindowPos(_hwnd, new IntPtr(-1), 0, 0, 0, 0, 3);\n") StrBuild.Append(" }\n") StrBuild.Append(" else\n") StrBuild.Append(" {\n") StrBuild.Append(" SetWindowPos(_hwnd, new IntPtr(-2), 0, 0, 0, 0, 3);\n") StrBuild.Append(" }\n") StrBuild.Append(" }\n") StrBuild.Append(" }\n") StrBuild.Append(" public bool Enabled\n") StrBuild.Append(" {\n") StrBuild.Append(" get{ return IsWindowEnabled(_hwnd); }\n") StrBuild.Append(" set{ EnableWindow(_hwnd, value); }\n") StrBuild.Append(" }\n") StrBuild.Append(" public bool VisibilityFlag\n") StrBuild.Append(" {\n") StrBuild.Append(" get{ return (Style & WindowStyleFlags.VISIBLE) != 0; }\n") StrBuild.Append(" set\n") StrBuild.Append(" {\n") StrBuild.Append(" if (value)\n") StrBuild.Append(" {\n") StrBuild.Append(" ShowWindow(_hwnd, 5);\n") StrBuild.Append(" }\n") StrBuild.Append(" else\n") StrBuild.Append(" {\n") StrBuild.Append(" ShowWindow(_hwnd, 0);\n") StrBuild.Append(" }\n") StrBuild.Append(" }\n") StrBuild.Append(" }\n") StrBuild.Append(" public WindowStyleFlags Style\n") StrBuild.Append(" {\n") StrBuild.Append(" get{ return (WindowStyleFlags)GetWindowLongPtr(_hwnd, (int)(GWL.GWL_STYLE)); }\n") StrBuild.Append(" set{ SetWindowLong(_hwnd, (int)GWL.GWL_STYLE, (int)value); }\n") StrBuild.Append(" }\n") StrBuild.Append(" public WindowExStyleFlags ExtendedStyle\n") StrBuild.Append(" {\n") StrBuild.Append(" get{ return (WindowExStyleFlags)GetWindowLongPtr(_hwnd, (int)(GWL.GWL_EXSTYLE)); }\n") StrBuild.Append(" set{ SetWindowLong(_hwnd, (int)GWL.GWL_EXSTYLE, (int)value); }\n") StrBuild.Append(" }\n") StrBuild.Append(" public SystemWindow Parent\n") StrBuild.Append(" {\n") StrBuild.Append(" get{ return new SystemWindow(GetParent(_hwnd)); }\n") StrBuild.Append(" }\n") StrBuild.Append(" public SystemWindow ParentSymmetric\n") StrBuild.Append(" {\n") StrBuild.Append(" get\n") StrBuild.Append(" {\n") StrBuild.Append(" SystemWindow result = Parent;\n") StrBuild.Append(" if (!this.IsDescendantOf(result)) result = null;\n") StrBuild.Append(" return result;\n") StrBuild.Append(" }\n") StrBuild.Append(" }\n") StrBuild.Append(" public RECT Position\n") StrBuild.Append(" {\n") StrBuild.Append(" get\n") StrBuild.Append(" {\n") StrBuild.Append(" WINDOWPLACEMENT wp = new WINDOWPLACEMENT();\n") StrBuild.Append(" wp.length = Marshal.SizeOf(wp);\n") StrBuild.Append(" GetWindowPlacement(_hwnd, ref wp);\n") StrBuild.Append(" return wp.rcNormalPosition;\n") StrBuild.Append(" }\n") StrBuild.Append(" set\n") StrBuild.Append(" {\n") StrBuild.Append(" WINDOWPLACEMENT wp = new WINDOWPLACEMENT();\n") StrBuild.Append(" wp.length = Marshal.SizeOf(wp);\n") StrBuild.Append(" GetWindowPlacement(_hwnd, ref wp);\n") StrBuild.Append(" wp.rcNormalPosition = value;\n") StrBuild.Append(" SetWindowPlacement(_hwnd, ref wp);\n") StrBuild.Append(" }\n") StrBuild.Append(" }\n") StrBuild.Append(" public Point Location\n") StrBuild.Append(" {\n") StrBuild.Append(" get { return Position.Location; }\n") StrBuild.Append(" set\n") StrBuild.Append(" {\n") StrBuild.Append(" WINDOWPLACEMENT wp = new WINDOWPLACEMENT();\n") StrBuild.Append(" wp.length = Marshal.SizeOf(wp);\n") StrBuild.Append(" GetWindowPlacement(_hwnd, ref wp);\n") StrBuild.Append(" wp.rcNormalPosition.Bottom = value.Y + wp.rcNormalPosition.Height;\n") StrBuild.Append(" wp.rcNormalPosition.Right = value.X + wp.rcNormalPosition.Width;\n") StrBuild.Append(" wp.rcNormalPosition.Top = value.Y;\n") StrBuild.Append(" wp.rcNormalPosition.Left = value.X;\n") StrBuild.Append(" SetWindowPlacement(_hwnd, ref wp);\n") StrBuild.Append(" }\n") StrBuild.Append(" }\n") StrBuild.Append(" public Size Size\n") StrBuild.Append(" {\n") StrBuild.Append(" get{ return Position.Size; }\n") StrBuild.Append(" set\n") StrBuild.Append(" {\n") StrBuild.Append(" WINDOWPLACEMENT wp = new WINDOWPLACEMENT();\n") StrBuild.Append(" wp.length = Marshal.SizeOf(wp);\n") StrBuild.Append(" GetWindowPlacement(_hwnd, ref wp);\n") StrBuild.Append(" wp.rcNormalPosition.Right = wp.rcNormalPosition.Left + value.Width;\n") StrBuild.Append(" wp.rcNormalPosition.Bottom = wp.rcNormalPosition.Top + value.Height;\n") StrBuild.Append(" SetWindowPlacement(_hwnd, ref wp);\n") StrBuild.Append(" }\n") StrBuild.Append(" }\n") StrBuild.Append(" public RECT Rectangle\n") StrBuild.Append(" {\n") StrBuild.Append(" get\n") StrBuild.Append(" {\n") StrBuild.Append(" RECT r = new RECT();\n") StrBuild.Append(" GetWindowRect(_hwnd, out r);\n") StrBuild.Append(" return r;\n") StrBuild.Append(" }\n") StrBuild.Append(" }\n") StrBuild.Append(" public bool IsDescendantOf(SystemWindow ancestor)\n") StrBuild.Append(" {\n") StrBuild.Append(" return IsChild(ancestor._hwnd, _hwnd);\n") StrBuild.Append(" }\n") StrBuild.Append(" public Process Process\n") StrBuild.Append(" {\n") StrBuild.Append(" get\n") StrBuild.Append(" {\n") StrBuild.Append(" int pid;\n") StrBuild.Append(" GetWindowThreadProcessId(HWnd, out pid);\n") StrBuild.Append(" return Process.GetProcessById(pid);\n") StrBuild.Append(" }\n") StrBuild.Append(" }\n") StrBuild.Append(" public ProcessThread Thread\n") StrBuild.Append(" {\n") StrBuild.Append(" get\n") StrBuild.Append(" {\n") StrBuild.Append(" int pid;\n") StrBuild.Append(" int tid = GetWindowThreadProcessId(HWnd, out pid);\n") StrBuild.Append(" foreach (ProcessThread t in Process.GetProcessById(pid).Threads)\n") StrBuild.Append(" {\n") StrBuild.Append(" if (t.Id == tid) return t;\n") StrBuild.Append(" }\n") StrBuild.Append(" throw new Exception(\"Thread not found\");\n") StrBuild.Append(" }\n") StrBuild.Append(" }\n") StrBuild.Append(" public FormWindowState WindowState\n") StrBuild.Append(" {\n") StrBuild.Append(" get\n") StrBuild.Append(" {\n") StrBuild.Append(" WINDOWPLACEMENT wp = new WINDOWPLACEMENT();\n") StrBuild.Append(" wp.length = Marshal.SizeOf(wp);\n") StrBuild.Append(" GetWindowPlacement(HWnd, ref wp);\n") StrBuild.Append(" switch (wp.showCmd % 4)\n") StrBuild.Append(" {\n") StrBuild.Append(" case 2: return FormWindowState.Minimized;\n") StrBuild.Append(" case 3: return FormWindowState.Maximized;\n") StrBuild.Append(" default: return FormWindowState.Normal;\n") StrBuild.Append(" }\n") StrBuild.Append(" }\n") StrBuild.Append(" set\n") StrBuild.Append(" {\n") StrBuild.Append(" int showCommand;\n") StrBuild.Append(" switch (value)\n") StrBuild.Append(" {\n") StrBuild.Append(" case FormWindowState.Normal:\n") StrBuild.Append(" showCommand = 1;\n") StrBuild.Append(" break;\n") StrBuild.Append(" case FormWindowState.Minimized:\n") StrBuild.Append(" showCommand = 2;\n") StrBuild.Append(" break;\n") StrBuild.Append(" case FormWindowState.Maximized:\n") StrBuild.Append(" showCommand = 3;\n") StrBuild.Append(" break;\n") StrBuild.Append(" default: return;\n") StrBuild.Append(" }\n") StrBuild.Append(" ShowWindow(HWnd, showCommand);\n") StrBuild.Append(" }\n") StrBuild.Append(" }\n") StrBuild.Append(" public bool Movable\n") StrBuild.Append(" {\n") StrBuild.Append(" get{ return (Style & WindowStyleFlags.SYSMENU) != 0; }\n") StrBuild.Append(" }\n") StrBuild.Append(" public bool Resizable\n") StrBuild.Append(" {\n") StrBuild.Append(" get{ return (Style & WindowStyleFlags.THICKFRAME) != 0; }\n") StrBuild.Append(" }\n") StrBuild.Append(" public Image Image\n") StrBuild.Append(" {\n") StrBuild.Append(" get\n") StrBuild.Append(" {\n") StrBuild.Append(" Bitmap bmp = new Bitmap(Position.Width, Position.Height);\n") StrBuild.Append(" Graphics g = Graphics.FromImage(bmp);\n") StrBuild.Append(" IntPtr pTarget = g.GetHdc();\n") StrBuild.Append(" IntPtr pSource = CreateCompatibleDC(pTarget);\n") StrBuild.Append(" IntPtr pOrig = SelectObject(pSource, bmp.GetHbitmap());\n") StrBuild.Append(" PrintWindow(HWnd, pTarget, 0);\n") StrBuild.Append(" IntPtr pNew = SelectObject(pSource, pOrig);\n") StrBuild.Append(" DeleteObject(pOrig);\n") StrBuild.Append(" DeleteObject(pNew);\n") StrBuild.Append(" DeleteObject(pSource);\n") StrBuild.Append(" g.ReleaseHdc(pTarget);\n") StrBuild.Append(" g.Dispose();\n") StrBuild.Append(" return bmp;\n") StrBuild.Append(" }\n") StrBuild.Append(" }\n") StrBuild.Append(" public Region Region\n") StrBuild.Append(" {\n") StrBuild.Append(" get\n") StrBuild.Append(" {\n") StrBuild.Append(" IntPtr rgn = CreateRectRgn(0, 0, 0, 0);\n") StrBuild.Append(" int r = GetWindowRgn(HWnd, rgn);\n") StrBuild.Append(" if (r == (int)GetWindowRegnReturnValues.ERROR)\n") StrBuild.Append(" {\n") StrBuild.Append(" return null;\n") StrBuild.Append(" }\n") StrBuild.Append(" return Region.FromHrgn(rgn);\n") StrBuild.Append(" }\n") StrBuild.Append(" set\n") StrBuild.Append(" {\n") StrBuild.Append(" Bitmap bmp = new Bitmap(1, 1);\n") StrBuild.Append(" Graphics g = Graphics.FromImage(bmp);\n") StrBuild.Append(" SetWindowRgn(HWnd, value.GetHrgn(g), true);\n") StrBuild.Append(" g.Dispose();\n") StrBuild.Append(" }\n") StrBuild.Append(" }\n") StrBuild.Append(" public char PasswordCharacter\n") StrBuild.Append(" {\n") StrBuild.Append(" get{ return (char)SendGetMessage(EM_GETPASSWORDCHAR); }\n") StrBuild.Append(" set\n") StrBuild.Append(" {\n") StrBuild.Append(" SendSetMessage(EM_SETPASSWORDCHAR, value);\n") StrBuild.Append(" }\n") StrBuild.Append(" }\n") StrBuild.Append(" public int DialogID\n") StrBuild.Append(" {\n") StrBuild.Append(" get{ return GetWindowLong32(_hwnd, (int)GWL.GWL_ID); }\n") StrBuild.Append(" }\n") StrBuild.Append(" public SystemWindow WindowBelow\n") StrBuild.Append(" {\n") StrBuild.Append(" get\n") StrBuild.Append(" {\n") StrBuild.Append(" IntPtr res = GetWindow(HWnd, (uint)GetWindow_Cmd.GW_HWNDNEXT);\n") StrBuild.Append(" if (res == IntPtr.Zero) return null;\n") StrBuild.Append(" return new SystemWindow(res);\n") StrBuild.Append(" }\n") StrBuild.Append(" }\n") StrBuild.Append(" public SystemWindow WindowAbove\n") StrBuild.Append(" {\n") StrBuild.Append(" get\n") StrBuild.Append(" {\n") StrBuild.Append(" IntPtr res = GetWindow(HWnd, (uint)GetWindow_Cmd.GW_HWNDPREV);\n") StrBuild.Append(" if (res == IntPtr.Zero) return null;\n") StrBuild.Append(" return new SystemWindow(res);\n") StrBuild.Append(" }\n") StrBuild.Append(" }\n") StrBuild.Append(" public WindowDeviceContext GetDeviceContext(bool clientAreaOnly)\n") StrBuild.Append(" {\n") StrBuild.Append(" if (clientAreaOnly)\n") StrBuild.Append(" {\n") StrBuild.Append(" return new WindowDeviceContext(this, GetDC(_hwnd));\n") StrBuild.Append(" }\n") StrBuild.Append(" else\n") StrBuild.Append(" {\n") StrBuild.Append(" return new WindowDeviceContext(this, GetWindowDC(_hwnd));\n") StrBuild.Append(" }\n") StrBuild.Append(" }\n") StrBuild.Append(" public CheckState CheckState\n") StrBuild.Append(" {\n") StrBuild.Append(" get{ return (CheckState)SendGetMessage(BM_GETCHECK); }\n") StrBuild.Append(" set{ SendSetMessage(BM_SETCHECK, (uint)value); }\n") StrBuild.Append(" }\n") StrBuild.Append(" public bool IsValid()\n") StrBuild.Append(" {\n") StrBuild.Append(" return _hwnd != IntPtr.Zero;\n") StrBuild.Append(" }\n") StrBuild.Append(" public void SendClose()\n") StrBuild.Append(" {\n") StrBuild.Append(" SendSetMessage(WM_CLOSE, 0);\n") StrBuild.Append(" }\n") StrBuild.Append(" public void Highlight()\n") StrBuild.Append(" {\n") StrBuild.Append(" RECT rect;\n") StrBuild.Append(" GetWindowRect(_hwnd, out rect);\n") StrBuild.Append(" using (WindowDeviceContext windowDC = GetDeviceContext(false))\n") StrBuild.Append(" {\n") StrBuild.Append(" using (Graphics g = windowDC.CreateGraphics())\n") StrBuild.Append(" {\n") StrBuild.Append(" g.DrawRectangle(new Pen(Color.Red, 4), 0, 0, rect.Right - rect.Left, rect.Bottom - rect.Top);\n") StrBuild.Append(" }\n") StrBuild.Append(" }\n") StrBuild.Append(" }\n") StrBuild.Append(" public void Refresh()\n") StrBuild.Append(" {\n") StrBuild.Append(" IntPtr hwndToRefresh = this._hwnd;\n") StrBuild.Append(" SystemWindow parentWindow = this.ParentSymmetric;\n") StrBuild.Append(" if (parentWindow != null)\n") StrBuild.Append(" {\n") StrBuild.Append(" hwndToRefresh = parentWindow._hwnd;\n") StrBuild.Append(" }\n") StrBuild.Append(" InvalidateRect(hwndToRefresh, IntPtr.Zero, true);\n") StrBuild.Append(" RedrawWindow(hwndToRefresh, IntPtr.Zero, IntPtr.Zero, RDW.RDW_FRAME | RDW.RDW_INVALIDATE | RDW.RDW_UPDATENOW | RDW.RDW_ALLCHILDREN | RDW.RDW_ERASENOW);\n") StrBuild.Append(" }\n") StrBuild.Append(" internal int SendGetMessage(uint message)\n") StrBuild.Append(" {\n") StrBuild.Append(" return SendGetMessage(message, 0);\n") StrBuild.Append(" }\n") StrBuild.Append(" internal int SendGetMessage(uint message, uint param)\n") StrBuild.Append(" {\n") StrBuild.Append(" return SendMessage(new HandleRef(this, HWnd), message, new IntPtr(param), new IntPtr(0)).ToInt32();\n") StrBuild.Append(" }\n") StrBuild.Append(" internal void SendSetMessage(uint message, uint value)\n") StrBuild.Append(" {\n") StrBuild.Append(" SendMessage(new HandleRef(this, HWnd), message, new IntPtr(value), new IntPtr(0));\n") StrBuild.Append(" }\n") StrBuild.Append(" public override bool Equals(System.Object obj)\n") StrBuild.Append(" {\n") StrBuild.Append(" if (obj == null)\n") StrBuild.Append(" {\n") StrBuild.Append(" return false;\n") StrBuild.Append(" }\n") StrBuild.Append(" SystemWindow sw = obj as SystemWindow;\n") StrBuild.Append(" return Equals(sw);\n") StrBuild.Append(" }\n") StrBuild.Append(" public bool Equals(SystemWindow sw)\n") StrBuild.Append(" {\n") StrBuild.Append(" if ((object)sw == null)\n") StrBuild.Append(" {\n") StrBuild.Append(" return false;\n") StrBuild.Append(" }\n") StrBuild.Append(" return _hwnd == sw._hwnd;\n") StrBuild.Append(" }\n") StrBuild.Append(" public override int GetHashCode()\n") StrBuild.Append(" {\n") StrBuild.Append(" return unchecked((int)_hwnd.ToInt64());\n") StrBuild.Append(" }\n") StrBuild.Append(" public static bool operator ==(SystemWindow a, SystemWindow b)\n") StrBuild.Append(" {\n") StrBuild.Append(" if (System.Object.ReferenceEquals(a, b))\n") StrBuild.Append(" {\n") StrBuild.Append(" return true;\n") StrBuild.Append(" }\n") StrBuild.Append(" if (((object)a == null) || ((object)b == null))\n") StrBuild.Append(" {\n") StrBuild.Append(" return false;\n") StrBuild.Append(" }\n") StrBuild.Append(" return a._hwnd == b._hwnd;\n") StrBuild.Append(" }\n") StrBuild.Append(" public static bool operator !=(SystemWindow a, SystemWindow b)\n") StrBuild.Append(" {\n") StrBuild.Append(" return !(a == b);\n") StrBuild.Append(" }\n") StrBuild.Append(" [DllImport(\"user32.dll\")]\n") StrBuild.Append(" [return: MarshalAs(UnmanagedType.Bool)]\n") StrBuild.Append(" private static extern bool SetForegroundWindow(IntPtr hWnd);\n") StrBuild.Append(" [DllImport(\"user32.dll\")]\n") StrBuild.Append(" private static extern IntPtr GetForegroundWindow();\n") StrBuild.Append(" [DllImport(\"user32.dll\", SetLastError = true, CharSet = CharSet.Auto)]\n") StrBuild.Append(" private static extern int GetWindowText(IntPtr hWnd, [Out] StringBuilder lpString, int nMaxCount);\n") StrBuild.Append(" [DllImport(\"user32.dll\", SetLastError = true, CharSet = CharSet.Auto)]\n") StrBuild.Append(" private static extern int GetWindowTextLength(IntPtr hWnd);\n") StrBuild.Append(" [DllImport(\"user32.dll\")]\n") StrBuild.Append(" static extern bool SetWindowText(IntPtr hWnd, string lpString);\n") StrBuild.Append(" [DllImport(\"user32.dll\")]\n") StrBuild.Append(" private static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount);\n") StrBuild.Append(" [DllImport(\"user32.dll\")]\n") StrBuild.Append(" [return: MarshalAs(UnmanagedType.Bool)]\n") StrBuild.Append(" private static extern bool EnumWindows(EnumWindowsProc lpEnumFunc, IntPtr lParam);\n") StrBuild.Append(" private delegate int EnumWindowsProc(IntPtr hWnd, IntPtr lParam);\n") StrBuild.Append(" [DllImport(\"user32.dll\")]\n") StrBuild.Append(" private static extern bool IsWindowVisible(IntPtr hWnd);\n") StrBuild.Append(" [DllImport(\"user32.dll\")]\n") StrBuild.Append(" private static extern bool IsWindowEnabled(IntPtr hWnd);\n") StrBuild.Append(" [DllImport(\"user32.dll\")]\n") StrBuild.Append(" private static extern bool EnableWindow(IntPtr hWnd, bool bEnable);\n") StrBuild.Append(" private static IntPtr GetWindowLongPtr(IntPtr hWnd, int nIndex)\n") StrBuild.Append(" {\n") StrBuild.Append(" if (IntPtr.Size == 8)\n") StrBuild.Append(" return GetWindowLongPtr64(hWnd, nIndex);\n") StrBuild.Append(" else\n") StrBuild.Append(" return new IntPtr(GetWindowLong32(hWnd, nIndex));\n") StrBuild.Append(" }\n") StrBuild.Append(" [DllImport(\"user32.dll\", EntryPoint = \"GetWindowLong\")]\n") StrBuild.Append(" private static extern int GetWindowLong32(IntPtr hWnd, int nIndex);\n") StrBuild.Append(" [DllImport(\"user32.dll\", EntryPoint = \"GetWindowLongPtr\")]\n") StrBuild.Append(" private static extern IntPtr GetWindowLongPtr64(IntPtr hWnd, int nIndex);\n") StrBuild.Append(" private enum GWL : int\n") StrBuild.Append(" {\n") StrBuild.Append(" GWL_WNDPROC = (-4),\n") StrBuild.Append(" GWL_HINSTANCE = (-6),\n") StrBuild.Append(" GWL_HWNDPARENT = (-8),\n") StrBuild.Append(" GWL_STYLE = (-16),\n") StrBuild.Append(" GWL_EXSTYLE = (-20),\n") StrBuild.Append(" GWL_USERDATA = (-21),\n") StrBuild.Append(" GWL_ID = (-12)\n") StrBuild.Append(" }\n") StrBuild.Append(" [DllImport(\"user32.dll\")]\n") StrBuild.Append(" private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);\n") StrBuild.Append(" [DllImport(\"user32.dll\", ExactSpelling = true, CharSet = CharSet.Auto)]\n") StrBuild.Append(" private static extern IntPtr GetParent(IntPtr hWnd);\n") StrBuild.Append(" [DllImport(\"user32.dll\")]\n") StrBuild.Append(" static extern bool IsChild(IntPtr hWndParent, IntPtr hWnd);\n") StrBuild.Append(" [StructLayout(LayoutKind.Sequential)]\n") StrBuild.Append(" private struct WINDOWPLACEMENT\n") StrBuild.Append(" {\n") StrBuild.Append(" public int length;\n") StrBuild.Append(" public int flags;\n") StrBuild.Append(" public int showCmd;\n") StrBuild.Append(" public POINT ptMinPosition;\n") StrBuild.Append(" public POINT ptMaxPosition;\n") StrBuild.Append(" public RECT rcNormalPosition;\n") StrBuild.Append(" }\n") StrBuild.Append(" [DllImport(\"user32.dll\")]\n") StrBuild.Append(" static extern bool GetWindowPlacement(IntPtr hWnd,\n") StrBuild.Append(" ref WINDOWPLACEMENT lpwndpl);\n") StrBuild.Append(" [DllImport(\"user32.dll\")]\n") StrBuild.Append(" static extern bool SetWindowPlacement(IntPtr hWnd,\n") StrBuild.Append(" [In] ref WINDOWPLACEMENT lpwndpl);\n") StrBuild.Append(" [DllImport(\"user32.dll\")]\n") StrBuild.Append(" [return: MarshalAs(UnmanagedType.Bool)]\n") StrBuild.Append(" static extern bool EnumChildWindows(IntPtr hwndParent, EnumWindowsProc lpEnumFunc, IntPtr lParam);\n") StrBuild.Append(" [DllImport(\"user32.dll\")]\n") StrBuild.Append(" private static extern IntPtr WindowFromPoint(POINT Point);\n") StrBuild.Append(" [DllImport(\"user32.dll\", SetLastError = true)]\n") StrBuild.Append(" static extern int GetWindowThreadProcessId(IntPtr hWnd, out int lpdwProcessId);\n") StrBuild.Append(" [DllImport(\"user32.dll\")]\n") StrBuild.Append(" static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);\n") StrBuild.Append(" [DllImport(\"user32.dll\")]\n") StrBuild.Append(" static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);\n") StrBuild.Append(" [DllImport(\"gdi32.dll\")]\n") StrBuild.Append(" static extern IntPtr CreateRectRgn(int nLeftRect, int nTopRect, int nRightRect,\n") StrBuild.Append(" int nBottomRect);\n") StrBuild.Append(" [DllImport(\"user32.dll\")]\n") StrBuild.Append(" static extern int GetWindowRgn(IntPtr hWnd, IntPtr hRgn);\n") StrBuild.Append(" [DllImport(\"user32.dll\")]\n") StrBuild.Append(" static extern int SetWindowRgn(IntPtr hWnd, IntPtr hRgn, bool bRedraw);\n") StrBuild.Append(" [DllImport(\"gdi32.dll\")]\n") StrBuild.Append(" static extern bool BitBlt(IntPtr hObject, int nXDest, int nYDest, int nWidth,\n") StrBuild.Append(" int nHeight, IntPtr hObjSource, int nXSrc, int nYSrc, int dwRop);\n") StrBuild.Append(" [DllImport(\"user32.dll\", SetLastError = true)]\n") StrBuild.Append(" static extern bool PrintWindow(IntPtr hwnd, IntPtr hDC, uint nFlags);\n") StrBuild.Append(" [DllImport(\"user32.dll\")]\n") StrBuild.Append(" static extern IntPtr GetWindowDC(IntPtr hWnd);\n") StrBuild.Append(" [DllImport(\"user32.dll\")]\n") StrBuild.Append(" static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);\n") StrBuild.Append(" [DllImport(\"gdi32.dll\", ExactSpelling = true, SetLastError = true)]\n") StrBuild.Append(" static extern IntPtr CreateCompatibleDC(IntPtr hdc);\n") StrBuild.Append(" [DllImport(\"gdi32.dll\", ExactSpelling = true, SetLastError = true)]\n") StrBuild.Append(" static extern bool DeleteDC(IntPtr hdc);\n") StrBuild.Append(" [DllImport(\"gdi32.dll\", ExactSpelling = true, SetLastError = true)]\n") StrBuild.Append(" static extern IntPtr SelectObject(IntPtr hdc, IntPtr hgdiobj);\n") StrBuild.Append(" [DllImport(\"gdi32.dll\", ExactSpelling = true, SetLastError = true)]\n") StrBuild.Append(" static extern bool DeleteObject(IntPtr hObject);\n") StrBuild.Append(" enum TernaryRasterOperations : uint\n") StrBuild.Append(" {\n") StrBuild.Append(" SRCCOPY = 0x00CC0020,\n") StrBuild.Append(" SRCPAINT = 0x00EE0086,\n") StrBuild.Append(" SRCAND = 0x008800C6,\n") StrBuild.Append(" SRCINVERT = 0x00660046,\n") StrBuild.Append(" SRCERASE = 0x00440328,\n") StrBuild.Append(" NOTSRCCOPY = 0x00330008,\n") StrBuild.Append(" NOTSRCERASE = 0x001100A6,\n") StrBuild.Append(" MERGECOPY = 0x00C000CA,\n") StrBuild.Append(" MERGEPAINT = 0x00BB0226,\n") StrBuild.Append(" PATCOPY = 0x00F00021,\n") StrBuild.Append(" PATPAINT = 0x00FB0A09,\n") StrBuild.Append(" PATINVERT = 0x005A0049,\n") StrBuild.Append(" DSTINVERT = 0x00550009,\n") StrBuild.Append(" BLACKNESS = 0x00000042,\n") StrBuild.Append(" WHITENESS = 0x00FF0062\n") StrBuild.Append(" }\n") StrBuild.Append(" enum GetWindowRegnReturnValues : int\n") StrBuild.Append(" {\n") StrBuild.Append(" ERROR = 0,\n") StrBuild.Append(" NULLREGION = 1,\n") StrBuild.Append(" SIMPLEREGION = 2,\n") StrBuild.Append(" COMPLEXREGION = 3\n") StrBuild.Append(" }\n") StrBuild.Append(" static readonly uint EM_GETPASSWORDCHAR = 0xD2, EM_SETPASSWORDCHAR = 0xCC;\n") StrBuild.Append(" static readonly uint BM_GETCHECK = 0xF0, BM_SETCHECK = 0xF1;\n") StrBuild.Append(" [DllImport(\"user32.dll\", CharSet = CharSet.Auto, SetLastError = false)]\n") StrBuild.Append(" internal static extern IntPtr SendMessage(HandleRef hWnd, uint Msg, IntPtr wParam, IntPtr lParam);\n") StrBuild.Append(" [DllImport(\"user32.dll\", CharSet = CharSet.Unicode, SetLastError = false)]\n") StrBuild.Append(" internal static extern IntPtr SendMessage(HandleRef hWnd, uint Msg, IntPtr wParam, [Out] StringBuilder lParam);\n") StrBuild.Append(" [DllImport(\"user32.dll\")]\n") StrBuild.Append(" private static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X,\n") StrBuild.Append(" int Y, int cx, int cy, uint uFlags);\n") StrBuild.Append(" [DllImport(\"user32.dll\")]\n") StrBuild.Append(" private static extern IntPtr GetWindow(IntPtr hWnd, uint uCmd);\n") StrBuild.Append(" [DllImport(\"user32.dll\", SetLastError = false)]\n") StrBuild.Append(" static extern IntPtr GetDesktopWindow();\n") StrBuild.Append(" [DllImport(\"user32.dll\")]\n") StrBuild.Append(" static extern IntPtr GetDC(IntPtr hWnd);\n") StrBuild.Append(" private const int WM_CLOSE = 16;\n") StrBuild.Append(" private enum GetWindow_Cmd\n") StrBuild.Append(" {\n") StrBuild.Append(" GW_HWNDFIRST = 0,\n") StrBuild.Append(" GW_HWNDLAST = 1,\n") StrBuild.Append(" GW_HWNDNEXT = 2,\n") StrBuild.Append(" GW_HWNDPREV = 3,\n") StrBuild.Append(" GW_OWNER = 4,\n") StrBuild.Append(" GW_CHILD = 5,\n") StrBuild.Append(" GW_ENABLEDPOPUP = 6\n") StrBuild.Append(" }\n") StrBuild.Append(" [DllImport(\"user32.dll\")]\n") StrBuild.Append(" private static extern bool InvalidateRect(IntPtr hWnd, IntPtr lpRect, bool bErase);\n") StrBuild.Append(" private enum RDW : uint\n") StrBuild.Append(" {\n") StrBuild.Append(" RDW_INVALIDATE = 0x0001,\n") StrBuild.Append(" RDW_INTERNALPAINT = 0x0002,\n") StrBuild.Append(" RDW_ERASE = 0x0004,\n") StrBuild.Append(" RDW_VALIDATE = 0x0008,\n") StrBuild.Append(" RDW_NOINTERNALPAINT = 0x0010,\n") StrBuild.Append(" RDW_NOERASE = 0x0020,\n") StrBuild.Append(" RDW_NOCHILDREN = 0x0040,\n") StrBuild.Append(" RDW_ALLCHILDREN = 0x0080,\n") StrBuild.Append(" RDW_UPDATENOW = 0x0100,\n") StrBuild.Append(" RDW_ERASENOW = 0x0200,\n") StrBuild.Append(" RDW_FRAME = 0x0400,\n") StrBuild.Append(" RDW_NOFRAME = 0x0800,\n") StrBuild.Append(" }\n") StrBuild.Append(" [DllImport(\"user32.dll\")]\n") StrBuild.Append(" private static extern bool RedrawWindow(IntPtr hWnd, IntPtr lprcUpdate, IntPtr hrgnUpdate, RDW flags);\n") StrBuild.Append(" }\n") StrBuild.Append(" public class WindowDeviceContext : IDisposable\n") StrBuild.Append(" {\n") StrBuild.Append(" IntPtr hDC;\n") StrBuild.Append(" SystemWindow sw;\n") StrBuild.Append(" internal WindowDeviceContext(SystemWindow sw, IntPtr hDC)\n") StrBuild.Append(" {\n") StrBuild.Append(" this.sw = sw;\n") StrBuild.Append(" this.hDC = hDC;\n") StrBuild.Append(" }\n") StrBuild.Append(" public IntPtr HDC { get { return hDC; } }\n") StrBuild.Append(" public Graphics CreateGraphics()\n") StrBuild.Append(" {\n") StrBuild.Append(" return Graphics.FromHdc(hDC);\n") StrBuild.Append(" }\n") StrBuild.Append(" public void Dispose()\n") StrBuild.Append(" {\n") StrBuild.Append(" if (hDC != IntPtr.Zero)\n") StrBuild.Append(" {\n") StrBuild.Append(" ReleaseDC(sw.HWnd, hDC);\n") StrBuild.Append(" hDC = IntPtr.Zero;\n") StrBuild.Append(" }\n") StrBuild.Append(" }\n") StrBuild.Append(" [DllImport(\"user32.dll\")]\n") StrBuild.Append(" private static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);\n") StrBuild.Append(" }\n") StrBuild.Append("}\n") --//--) result = CProvider.CompileAssemblyFromSource CParams #(StrBuild.tostring()) deletefile sc_Assembly --//-- -- for f in 0 to result.errors.count - 1 do ( -- print (result.errors.item[f].ErrorText) -- print ( result.errors.item[f].Line as string) -- ) --//-- vr_IsReady = result.errors.count == 0 ) --//-- ) --//-- if vr_IsReady then ( if heapsize < 32000000 do heapsize += 32000000 - heapsize --//-- Main Form global PInspector=dotnetobject "maxcustomcontrols.maxform" --//-- Form Controls local PI_Logo = dotnetobject "System.Windows.Forms.Label" local PI_Dock = dotnetobject "System.Windows.Forms.Tablelayoutpanel" local PI_DockTop = dotnetobject "System.Windows.Forms.Tablelayoutpanel" local PI_Grid = dotnetobject "System.Windows.Forms.PropertyGrid" local PI_Input = dotnetobject "System.Windows.Forms.TextBox" local PI_Output = dotnetobject "System.Windows.Forms.RichTextBox" local PI_Bout = dotnetobject "System.Windows.Forms.Label" local PI_Bout_opta = dotnetobject "System.Windows.Forms.Checkbox" local PI_Bout_optb = dotnetobject "System.Windows.Forms.Checkbox" --//-- Needed Class local CPer = (dotnetclass "SizeType").Percent local CAbs = (dotnetclass "SizeType").Absolute local CAuto = (dotnetclass "SizeType").AutoSize local GraphClass = dotnetclass "System.Drawing.Graphics" local Colorclass = dotnetclass "system.drawing.color" local ConvertClass = dotnetclass "System.Convert" local Dn_manager = (dotnetclass "System.Drawing.BufferedGraphicsManager").Current local CursorsClass = dotnetclass "System.Windows.Forms.Cursors" local CurrentCursor = dotnetclass "System.Windows.Forms.Cursor" local Cs_Cross = CursorsClass.Cross local Pen_Black = dotnetobject "System.Drawing.Pen" colorclass.black 2 --//-- Needed Value local MaxHwnd = windows.getMAXHWND() local MaxIntptr = dotnetobject "system.intptr" MaxHwnd local Syswin = dotnetobject "MinimalWinapi.Windows.SystemWindow" MaxIntptr local IsDraging = false local Find = undefined local PFind = undefined local Win32Window = undefined local StrObject = undefined local returnstr = undefined local Logo_Buffer = undefined local FillBrush = undefined --//-- Script Behavior local colortoname = false local NullObject --//-- --//-- Eventshandler --//-- fn PI_Grid_PropertyValueChanged s e = ( if StrObject != undefined and s.SelectedGridItem.IsValueEditable then ( returnstr=StrObject --//-- local PType=s.SelectedGridItem.PropertyType.tostring() local Pvalue=try(s.SelectedGridItem.PropertyValue)catch() local eval=(dotnetobject "system.string" s.SelectedGridItem.fulllabel).split "." for f in 3 to eval.count do returnstr+=("."+eval[f]) --//-- local pr=case PType of ( "System.Void":("") "System.Single":("="+(Pvalue as string)) "System.Byte":("="+(Pvalue as string)) "System.Double":("="+(Pvalue as string)) "System.Int32":("="+(Pvalue as string)) "System.Decimal":("="+(Pvalue as string)) "System.Object":("="+(Pvalue as string)) "System.Boolean":("="+(Pvalue as string)) "System.String":(if Pvalue != undefined then "="+"\""+(Pvalue as string)+"\"" else "="+(Pvalue as string)) "System.Windows.Media.Color":() "System.Drawing.Color":( if colortoname then ("="+"(dotnetclass \"System.Drawing.Color\")."+s.SelectedGridItem.GetPropertyTextValue()) else ("="+"(dotnetclass \"System.Drawing.Color\").fromargb "+((Pvalue.a as string)+" "+(Pvalue.r as string)+" "+(Pvalue.g as string)+" "+(Pvalue.b as string)))) "System.Drawing.Point":("="+"dotnetobject \"System.Drawing.Point\" "+(Pvalue.x as string)+" "+(Pvalue.y as string)) "System.Drawing.Size":("="+"dotnetobject \"System.Drawing.Size\" "+(Pvalue.Width as string)+" "+(Pvalue.Height as string)) "System.Windows.Forms.Padding":("="+"dotnetobject \"Padding\" "+(Pvalue.left as string)+" "+(Pvalue.Top as string)+" "+(Pvalue.Right as string)+" "+(Pvalue.Bottom as string)) "System.Windows.Forms.Cursor":("="+"(dotnetclass \"System.Windows.Forms.Cursors\")."+s.SelectedGridItem.GetPropertyTextValue()) --//-- "System.Windows.Forms.AnchorStyles":( TNumb=filterstring (Pvalue.tostring()) " ," CombineString=("="+"(dotnet.combineEnums ") for f in TNumb do (CombineString+=(returnstr+"."+f+" ")) CombineString[CombineString.count]=")" CombineString ) --//-- "System.Drawing.Font":( Ft_Size=Pvalue.Size as string Ft_FontFamily=Pvalue.FontFamily.Name Style_array=#() Ft_Style="" --//-- if Pvalue.Underline then append Style_array "Underline" if Pvalue.Strikeout then append Style_array "Strikeout" if Pvalue.Italic then append Style_array "Italic" if Pvalue.Bold then append Style_array "Bold" --//-- if Style_array.count > 1 then ( Ft_Style=" (dotnet.combineEnums " for f in Style_array do Ft_Style+=(" (dotnetclass \"System.Drawing.FontStyle\")."+f+" ") Ft_Style[Ft_Style.count]=")" ) else (if Style_array.count == 1 then Ft_Style=(" (dotnetclass \"System.Drawing.FontStyle\")."+Style_array[1])) --//-- ("="+"(dotnetobject \"System.Drawing.Font\" "+"\""+Ft_FontFamily+"\" "+Ft_Size+Ft_Style+")") ) --//-- "System.Drawing.Image":(" ----> UNSUPPORTED <----") "System.Drawing.Bitmap":(" ----> UNSUPPORTED <----") --//-- default:((try("="+returnstr+"."+Pvalue.tostring())catch(" ----> INTERNAL ERROR <----"))) ) --//-- if pr==undefined then pr="undefined" --//-- returnstr+=pr --//-- PI_Output.Clear() PI_Output.AppendText returnstr ) else ( PI_Output.Clear() ) ) --//-- fn PI_Grid_SelectedGridItemChanged s e = ( PI_Grid_PropertyValueChanged s "" ) --//-- fn PInspector_Resize s e = ( Dn_manager.MaximumBuffer = dotnetobject "System.Drawing.Size" (PInspector.Height+1) (PInspector.Width+1) if FillBrush != undefined then FillBrush.Dispose() if Logo_Buffer != undeinfed then (Logo_Buffer.Dispose() ; Logo_Buffer = undefined) FillBrush = dotnetobject "System.Drawing.Drawing2D.LinearGradientBrush" PI_Logo.ClientRectangle (colorclass.Teal) (colorclass.SkyBlue) 90 ) --//-- fn PI_Input_KeyDown s e = ( if e.keycode==e.keycode.enter then ( if s.Text != "" then ( StrObject=s.Text PI_Input.AutoCompleteCustomSource.Add StrObject PI_Grid.SelectedObject=execute StrObject s.Clear() ) ) ) --//-- fn PInspector_closed s e = ( Pen_Black.Dispose() Logo_Buffer.Dispose() PInspector=undefined (dotnetclass "system.gc").collect() gc() ) --//-- fn PI_Logo_Paint s e = ( if Logo_Buffer == undefined then ( Logo_Buffer = Dn_manager.Allocate e.Graphics s.ClientRectangle Logo_Buffer.Graphics.InterpolationMode = Logo_Buffer.Graphics.InterpolationMode.NearestNeighbor Logo_Buffer.Graphics.CompositingMode = Logo_Buffer.Graphics.CompositingMode.SourceOver--SourceCopy if FillBrush != undefined then Logo_Buffer.Graphics.FillRectangle FillBrush s.ClientRectangle strb = "Martin Dufour" strc = "martroyx@hotmail.com" newfontb = dotnetobject "System.Drawing.Font" "Arial" 10.0 Ssizeb = Logo_Buffer.Graphics.MeasureString strb newfontb Ssizec = Logo_Buffer.Graphics.MeasureString strc newfontb TextBrushb = dotnetobject "System.Drawing.SolidBrush" Colorclass.Black Logo_Buffer.Graphics.DrawString strb newfontb TextBrushb ((s.Width-Ssizeb.Width)/2) 6 Logo_Buffer.Graphics.DrawString strc newfontb TextBrushb ((s.Width-Ssizec.Width)/2) 22 --//-- TextBrushb.Dispose() ) Logo_Buffer.Render e.Graphics ) --//-- fn PI_Bout_Paint s e = ( ) --//-- fn PI_Bout_MouseDown s e = ( IsDraging = true ) --//-- fn PI_Bout_MouseUp s e = ( IsDraging = false --//-- if PFind != undefined then ( PFind.refresh() --//-- NullObject = PInspector.FromHandle (dotnetobject "System.IntPtr" PFind.HWnd) --//-- if NullObject != undefined then ( if not (PInspector.Equals PInspector NullObject) and not (PInspector.Contains NullObject) then ( if NullObject.name == "" then ( StrObject="NullObject" PI_Grid.SelectedObject = NullObject ) else ( StrObject = NullObject.name PI_Grid.SelectedObject = NullObject ) ) else ( format ("You're not allowed to edit '.NET Property Inspector'...sorry :-)"+"\n") ) ) --//-- if NullObject == undefined then ( StrObject="Win32" PI_Grid.SelectedObject = PFind ) ) --//-- ) --//-- fn PI_Bout_MouseMove s e = ( if IsDraging then ( CurrentCursor.Current = Cs_Cross --//-- Mpos = PInspector.MousePosition --//-- if PI_Bout_opta.checked or PI_Bout_optb.checked then ( Find = Syswin.FromPointEx Mpos.x Mpos.y PI_Bout_optb.checked PI_Bout_opta.checked ) else ( Find = Syswin.FromPoint Mpos.x Mpos.y ) --//-- if PFind != undefined and PFind != Find then PFind.refresh() --//-- Pred = GraphClass.FromHwnd (dotnetobject "System.IntPtr" Find.HWnd) Pred.clear (Colorclass.Teal) DrawRectangle = dotnetobject "System.Drawing.Rectangle" 0 0 (Pred.VisibleClipBounds.width) (Pred.VisibleClipBounds.height-1) Pred.DrawRectangle Pen_Black DrawRectangle Pred.Dispose() --//-- PFind = Find ) ) --//-- fn Initialisation = ( PI_Grid.helpvisible=true PI_Grid.ToolbarVisible=false PI_Grid.dock=PI_Grid.dock.fill PI_Grid.Margin=dotNetobject "Padding" 0 0 0 0 PI_Grid.backcolor=colorclass.DarkGray PI_Grid.viewbackcolor=colorclass.silver PI_Grid.viewforecolor=colorclass.black PI_Grid.linecolor=colorclass.DimGray PI_Grid.categoryforecolor=colorclass.white PI_Grid.helpbackcolor=colorclass.DarkGray PI_Grid.helpforecolor=colorclass.black dotnet.addeventhandler PI_Grid "SelectedGridItemChanged" PI_Grid_SelectedGridItemChanged dotnet.addeventhandler PI_Grid "PropertyValueChanged" PI_Grid_PropertyValueChanged PI_Grid.tag=dotnetmxsvalue PI_Grid --//-- PI_Input.HideSelection=true PI_Input.Dock=PI_Input.Dock.Fill PI_Input.ForeColor=Colorclass.black PI_Input.BackColor=Colorclass.silver PI_Input.TextAlign=PI_Input.TextAlign.Center PI_Input.BorderStyle=PI_Input.BorderStyle.none PI_Input.Margin=dotNetobject "Padding" 0 1 0 1 PI_Input.Font=(dotNetobject "System.Drawing.Font" "Arial" 14.0) PI_Input.AutoCompleteMode=PI_Input.AutoCompleteMode.Suggest PI_Input.AutoCompleteSource=PI_Input.AutoCompleteSource.CustomSource dotnet.addeventhandler PI_Input "keydown" PI_Input_KeyDown PI_Input.tag=dotnetmxsvalue PI_Input --//-- PI_Output.WordWrap=false PI_Output.AcceptsTab=true PI_Output.DetectUrls=false PI_Output.HideSelection=true PI_Output.AutoWordSelection=true PI_Output.ShowSelectionMargin=true PI_Output.Dock=PI_Output.Dock.Fill PI_Output.BorderStyle=PI_Output.BorderStyle.None PI_Output.ScrollBars=PI_Output.ScrollBars.ForcedHorizontal PI_Output.ForeColor=colorclass.white PI_Output.BackColor=colorclass.black PI_Output.Margin=dotNetobject "Padding" 0 1 0 0 PI_Output.Font=(dotNetobject "System.Drawing.Font" "Arial" 10.0) --//-- PI_Dock.Dock=PI_Dock.Dock.Fill PI_Dock.BackColor=Colorclass.black PI_Dock.Margin=dotNetobject "Padding" 0 0 0 0 PI_Dock.RowCount=5 PI_Dock.ColumnCount=1 PI_Dock.ColumnStyles.Add(dotNetobject "ColumnStyle" cper 100) PI_Dock.RowStyles.Add(dotNetobject "RowStyle" cabs 40) PI_Dock.RowStyles.Add(dotNetobject "RowStyle" cabs 30) PI_Dock.RowStyles.Add(dotNetobject "RowStyle" cabs 24) PI_Dock.RowStyles.Add(dotNetobject "RowStyle" cper 100) PI_Dock.RowStyles.Add(dotNetobject "RowStyle" cabs 60) --//-- PI_DockTop.Dock=PI_DockTop.Dock.Fill PI_DockTop.BackColor=Colorclass.SkyBlue PI_DockTop.Margin=dotNetobject "Padding" 0 0 0 0 PI_DockTop.RowCount=1 PI_DockTop.ColumnCount=5 PI_DockTop.ColumnStyles.Add(dotNetobject "ColumnStyle" cper 50) PI_DockTop.ColumnStyles.Add(dotNetobject "ColumnStyle" cabs 34) PI_DockTop.ColumnStyles.Add(dotNetobject "ColumnStyle" cabs 100) PI_DockTop.ColumnStyles.Add(dotNetobject "ColumnStyle" cabs 100) PI_DockTop.ColumnStyles.Add(dotNetobject "ColumnStyle" cper 50) PI_DockTop.RowStyles.Add(dotNetobject "RowStyle" cper 100) --//-- PI_Logo.backcolor = colorclass.red PI_Logo.dock = PI_Logo.dock.fill PI_Logo.Margin = dotnetobject "Padding" 0 0 0 0 dotnet.addeventhandler PI_Logo "Paint" PI_Logo_Paint PI_Logo.tag=dotnetmxsvalue PI_Logo --//-- PI_Bout.dock=PI_Bout.dock.fill PI_Bout.BorderStyle=PI_Bout.BorderStyle.Fixed3D PI_Bout.Margin = dotnetobject "Padding" 4 4 4 4 PI_Bout.backcolor=colorclass.LightGray PI_Bout.forecolor=colorclass.black dotnet.addeventhandler PI_Bout "MouseDown" PI_Bout_MouseDown dotnet.addeventhandler PI_Bout "MouseUp" PI_Bout_MouseUp dotnet.addeventhandler PI_Bout "MouseMove" PI_Bout_MouseMove dotnet.addeventhandler PI_Bout "Paint" PI_Bout_Paint PI_Bout.tag=dotnetmxsvalue PI_Bout --//-- PI_Bout_opta.dock = PI_Bout_opta.dock.fill PI_Bout_opta.backcolor = colorclass.Gainsboro PI_Bout_opta.forecolor = colorclass.DarkBlue PI_Bout_opta.text = "Enabled Only" PI_Bout_opta.checked = true PI_Bout_opta.Margin = dotnetobject "Padding" 3 3 3 3 PI_Bout_opta.Appearance = PI_Bout_opta.Appearance.Button PI_Bout_opta.TextAlign = PI_Bout_opta.TextAlign.MiddleCenter --//-- PI_Bout_optb.backcolor = colorclass.Gainsboro PI_Bout_optb.forecolor = colorclass.DarkBlue PI_Bout_optb.dock = PI_Bout_optb.dock.fill PI_Bout_optb.text = "Top Level" PI_Bout_optb.Margin = dotnetobject "Padding" 3 3 3 3 PI_Bout_optb.Appearance = PI_Bout_optb.Appearance.Button PI_Bout_optb.TextAlign = PI_Bout_optb.TextAlign.MiddleCenter --//-- PInspector.startposition=PInspector.startposition.centerscreen PInspector.Size=dotNetobject "System.Drawing.Size" 360 760 PInspector.MinimumSize=dotnetobject "System.Drawing.Size" 300 260 PInspector.Text=".NET Property Inspector" PInspector.ShowIcon=true PInspector.showintaskbar=false PInspector.topmost=false dotnet.addeventhandler PInspector "Resize" PInspector_Resize dotnet.addeventhandler PInspector "Closed" PInspector_closed PInspector.tag=dotnetmxsvalue PInspector --//-- PInspector.controls.add PI_Dock PI_Dock.controls.add PI_Logo 0 0 PI_Dock.controls.add PI_DockTop 0 1 PI_Dock.controls.add PI_Input 0 2 PI_Dock.controls.add PI_Grid 0 3 PI_Dock.controls.add PI_Output 0 4 PI_DockTop.controls.add PI_Bout 1 0 PI_DockTop.controls.add PI_Bout_opta 2 0 PI_DockTop.controls.add PI_Bout_optb 3 0 ) --//-- Initialisation() FillBrush = dotnetobject "System.Drawing.Drawing2D.LinearGradientBrush" PI_Logo.ClientRectangle (colorclass.Teal) (colorclass.SkyBlue) 90 PInspector.ShowModeless() ) ok --//-- )