From 82eddefe4e6f4a5fc2c26805c7f143950e01160a Mon Sep 17 00:00:00 2001 From: RKrom Date: Thu, 6 Dec 2012 13:47:17 +0000 Subject: [PATCH] Code cleanup, already made some changes (which are not active) for the next release so I can work on them without having multiple changed files which might cause check in conflicts. git-svn-id: http://svn.code.sf.net/p/greenshot/code/trunk@2359 7dccd23d-a4a3-4e1f-8c07-b4c1b4018ab4 --- Greenshot/Helpers/AnimationHelper.cs | 1 - GreenshotPlugin/Core/WindowsHelper.cs | 17 +- .../UnmanagedHelpers/Enumerations.cs | 83 ++++ GreenshotPlugin/UnmanagedHelpers/Structs.cs | 269 ++++++++++++ GreenshotPlugin/UnmanagedHelpers/User32.cs | 383 ++++-------------- 5 files changed, 435 insertions(+), 318 deletions(-) diff --git a/Greenshot/Helpers/AnimationHelper.cs b/Greenshot/Helpers/AnimationHelper.cs index e37f99a15..dd8702764 100644 --- a/Greenshot/Helpers/AnimationHelper.cs +++ b/Greenshot/Helpers/AnimationHelper.cs @@ -55,7 +55,6 @@ namespace Greenshot.Helpers { /// /// Type for the animation, like Point/Rectangle/Size public abstract class AnimatorBase : IAnimator { - private static readonly log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(AnimatorBase)); protected T first; protected T last; protected T current; diff --git a/GreenshotPlugin/Core/WindowsHelper.cs b/GreenshotPlugin/Core/WindowsHelper.cs index 34ea4badb..02de583b3 100644 --- a/GreenshotPlugin/Core/WindowsHelper.cs +++ b/GreenshotPlugin/Core/WindowsHelper.cs @@ -567,9 +567,7 @@ namespace GreenshotPlugin.Core { public string ClassName { get { if (className == null) { - StringBuilder classNameBuilder = new StringBuilder(260, 260); - User32.GetClassName(this.hWnd, classNameBuilder, classNameBuilder.Capacity); - className = classNameBuilder.ToString(); + className = GetClassName(this.hWnd); } return className; } @@ -1394,7 +1392,18 @@ namespace GreenshotPlugin.Core { } return this; } - + + /// + /// Retrieves the classname for a hWnd + /// + /// IntPtr with the windows handle + /// String with ClassName + public static String GetClassName(IntPtr hWnd) { + StringBuilder classNameBuilder = new StringBuilder(260, 260); + User32.GetClassName(hWnd, classNameBuilder, classNameBuilder.Capacity); + return classNameBuilder.ToString(); + } + /// /// Get all the visible top level windows /// diff --git a/GreenshotPlugin/UnmanagedHelpers/Enumerations.cs b/GreenshotPlugin/UnmanagedHelpers/Enumerations.cs index 81a4c16a5..d7af2757f 100644 --- a/GreenshotPlugin/UnmanagedHelpers/Enumerations.cs +++ b/GreenshotPlugin/UnmanagedHelpers/Enumerations.cs @@ -962,6 +962,10 @@ namespace GreenshotPlugin.UnmanagedHelpers { SND_FILENAME = 0x00020000, // name is file name } + /// + /// Used by GDI32.GetDeviceCaps + /// See: http://msdn.microsoft.com/en-us/library/windows/desktop/dd144877%28v=vs.85%29.aspx + /// public enum DeviceCaps { /// /// Device driver version @@ -1125,4 +1129,83 @@ namespace GreenshotPlugin.UnmanagedHelpers { /// BLTALIGNMENT = 119 } + + /// + /// Used for User32.SetWinEventHook + /// See: http://msdn.microsoft.com/en-us/library/windows/desktop/dd373640%28v=vs.85%29.aspx + /// + public enum WinEventHookFlags : int { + WINEVENT_SKIPOWNTHREAD = 1, + WINEVENT_SKIPOWNPROCESS = 2, + WINEVENT_OUTOFCONTEXT = 0, + WINEVENT_INCONTEXT = 4 + } + + /// + /// Used for User32.SetWinEventHook + /// See MSDN: http://msdn.microsoft.com/en-us/library/windows/desktop/dd318066%28v=vs.85%29.aspx + /// + public enum WinEvent : uint { + EVENT_OBJECT_ACCELERATORCHANGE = 32786, + EVENT_OBJECT_CREATE = 32768, + EVENT_OBJECT_DESTROY = 32769, + EVENT_OBJECT_DEFACTIONCHANGE = 32785, + EVENT_OBJECT_DESCRIPTIONCHANGE = 32781, + EVENT_OBJECT_FOCUS = 32773, + EVENT_OBJECT_HELPCHANGE = 32784, + EVENT_OBJECT_SHOW = 32770, + EVENT_OBJECT_HIDE = 32771, + EVENT_OBJECT_LOCATIONCHANGE = 32779, + EVENT_OBJECT_NAMECHANGE = 32780, + EVENT_OBJECT_PARENTCHANGE = 32783, + EVENT_OBJECT_REORDER = 32772, + EVENT_OBJECT_SELECTION = 32774, + EVENT_OBJECT_SELECTIONADD = 32775, + EVENT_OBJECT_SELECTIONREMOVE = 32776, + EVENT_OBJECT_SELECTIONWITHIN = 32777, + EVENT_OBJECT_STATECHANGE = 32778, + EVENT_OBJECT_VALUECHANGE = 32782, + EVENT_SYSTEM_ALERT = 2, + EVENT_SYSTEM_CAPTUREEND = 9, + EVENT_SYSTEM_CAPTURESTART = 8, + EVENT_SYSTEM_CONTEXTHELPEND = 13, + EVENT_SYSTEM_CONTEXTHELPSTART = 12, + EVENT_SYSTEM_DIALOGEND = 17, + EVENT_SYSTEM_DIALOGSTART = 16, + EVENT_SYSTEM_DRAGDROPEND = 15, + EVENT_SYSTEM_DRAGDROPSTART = 14, + EVENT_SYSTEM_FOREGROUND = 3, + EVENT_SYSTEM_MENUEND = 5, + EVENT_SYSTEM_MENUPOPUPEND = 7, + EVENT_SYSTEM_MENUPOPUPSTART = 6, + EVENT_SYSTEM_MENUSTART = 4, + EVENT_SYSTEM_MINIMIZEEND = 23, + EVENT_SYSTEM_MINIMIZESTART = 22, + EVENT_SYSTEM_MOVESIZEEND = 11, + EVENT_SYSTEM_MOVESIZESTART = 10, + EVENT_SYSTEM_SCROLLINGEND = 19, + EVENT_SYSTEM_SCROLLINGSTART = 18, + EVENT_SYSTEM_SOUND = 1, + EVENT_SYSTEM_SWITCHEND = 21, + EVENT_SYSTEM_SWITCHSTART = 20 + } + + /// + /// Used for User32.SetWinEventHook + /// See: http://msdn.microsoft.com/en-us/library/windows/desktop/dd373606%28v=vs.85%29.aspx#OBJID_WINDOW + /// + public enum EventObjects : int { + OBJID_ALERT = -10, + OBJID_CARET = -8, + OBJID_CLIENT = -4, + OBJID_CURSOR = -9, + OBJID_HSCROLL = -6, + OBJID_MENU = -3, + OBJID_SIZEGRIP = -7, + OBJID_SOUND = -11, + OBJID_SYSMENU = -1, + OBJID_TITLEBAR = -2, + OBJID_VSCROLL = -5, + OBJID_WINDOW = 0 + } } diff --git a/GreenshotPlugin/UnmanagedHelpers/Structs.cs b/GreenshotPlugin/UnmanagedHelpers/Structs.cs index ad4425d22..850e3a134 100644 --- a/GreenshotPlugin/UnmanagedHelpers/Structs.cs +++ b/GreenshotPlugin/UnmanagedHelpers/Structs.cs @@ -38,5 +38,274 @@ namespace GreenshotPlugin.UnmanagedHelpers { return new Size(width, height); } } + [StructLayout(LayoutKind.Sequential), Serializable()] + public struct POINT { + public int X; + public int Y; + + public POINT(int x, int y) { + this.X = x; + this.Y = y; + } + public POINT(Point point) { + this.X = point.X; + this.Y = point.Y; + } + + public static implicit operator System.Drawing.Point(POINT p) { + return new System.Drawing.Point(p.X, p.Y); + } + + public static implicit operator POINT(System.Drawing.Point p) { + return new POINT(p.X, p.Y); + } + + public Point ToPoint() { + return new Point(X, Y); + } + + override public string ToString() { + return X + "," + Y; + } + } + + [StructLayout(LayoutKind.Sequential), Serializable()] + public struct RECT { + private int _Left; + private int _Top; + private int _Right; + private int _Bottom; + + public RECT(RECT rectangle) + : this(rectangle.Left, rectangle.Top, rectangle.Right, rectangle.Bottom) { + } + public RECT(Rectangle rectangle) + : this(rectangle.Left, rectangle.Top, rectangle.Right, rectangle.Bottom) { + } + public RECT(int Left, int Top, int Right, int Bottom) { + _Left = Left; + _Top = Top; + _Right = Right; + _Bottom = Bottom; + } + + public int X { + get { + return _Left; + } + set { + _Left = value; + } + } + public int Y { + get { + return _Top; + } + set { + _Top = value; + } + } + public int Left { + get { + return _Left; + } + set { + _Left = value; + } + } + public int Top { + get { + return _Top; + } + set { + _Top = value; + } + } + public int Right { + get { + return _Right; + } + set { + _Right = value; + } + } + public int Bottom { + get { + return _Bottom; + } + set { + _Bottom = value; + } + } + public int Height { + get { + return _Bottom - _Top; + } + set { + _Bottom = value - _Top; + } + } + public int Width { + get { + return _Right - _Left; + } + set { + _Right = value + _Left; + } + } + public Point Location { + get { + return new Point(Left, Top); + } + set { + _Left = value.X; + _Top = value.Y; + } + } + public Size Size { + get { + return new Size(Width, Height); + } + set { + _Right = value.Width + _Left; + _Bottom = value.Height + _Top; + } + } + + public static implicit operator Rectangle(RECT Rectangle) { + return new Rectangle(Rectangle.Left, Rectangle.Top, Rectangle.Width, Rectangle.Height); + } + public static implicit operator RECT(Rectangle Rectangle) { + return new RECT(Rectangle.Left, Rectangle.Top, Rectangle.Right, Rectangle.Bottom); + } + public static bool operator ==(RECT Rectangle1, RECT Rectangle2) { + return Rectangle1.Equals(Rectangle2); + } + public static bool operator !=(RECT Rectangle1, RECT Rectangle2) { + return !Rectangle1.Equals(Rectangle2); + } + + public override string ToString() { + return "{Left: " + _Left + "; " + "Top: " + _Top + "; Right: " + _Right + "; Bottom: " + _Bottom + "}"; + } + + public override int GetHashCode() { + return ToString().GetHashCode(); + } + + public bool Equals(RECT Rectangle) { + return Rectangle.Left == _Left && Rectangle.Top == _Top && Rectangle.Right == _Right && Rectangle.Bottom == _Bottom; + } + + public Rectangle ToRectangle() { + return new Rectangle(Left, Top, Width, Height); + } + public override bool Equals(object Object) { + if (Object is RECT) { + return Equals((RECT)Object); + } else if (Object is Rectangle) { + return Equals(new RECT((Rectangle)Object)); + } + + return false; + } + } + + [StructLayout(LayoutKind.Sequential), Serializable()] + public struct WindowInfo { + public uint cbSize; + public RECT rcWindow; + public RECT rcClient; + public uint dwStyle; + public uint dwExStyle; + public uint dwWindowStatus; + public uint cxWindowBorders; + public uint cyWindowBorders; + public ushort atomWindowType; + public ushort wCreatorVersion; + // Allows automatic initialization of "cbSize" with "new WINDOWINFO(null/true/false)". + public WindowInfo(Boolean? filler) + : this() { + cbSize = (UInt32)(Marshal.SizeOf(typeof(WindowInfo))); + } + } + + /// + /// Contains information about the placement of a window on the screen. + /// + [StructLayout(LayoutKind.Sequential), Serializable()] + public struct WindowPlacement { + /// + /// The length of the structure, in bytes. Before calling the GetWindowPlacement or SetWindowPlacement functions, set this member to sizeof(WINDOWPLACEMENT). + /// + /// GetWindowPlacement and SetWindowPlacement fail if this member is not set correctly. + /// + /// + public int Length; + + /// + /// Specifies flags that control the position of the minimized window and the method by which the window is restored. + /// + public WindowPlacementFlags Flags; + + /// + /// The current show state of the window. + /// + public ShowWindowCommand ShowCmd; + + /// + /// The coordinates of the window's upper-left corner when the window is minimized. + /// + public POINT MinPosition; + + /// + /// The coordinates of the window's upper-left corner when the window is maximized. + /// + public POINT MaxPosition; + + /// + /// The window's coordinates when the window is in the restored position. + /// + public RECT NormalPosition; + + /// + /// Gets the default (empty) value. + /// + public static WindowPlacement Default { + get { + WindowPlacement result = new WindowPlacement(); + result.Length = Marshal.SizeOf(result); + return result; + } + } + } + + [StructLayout(LayoutKind.Sequential)] + public struct CursorInfo { + public Int32 cbSize; + public Int32 flags; + public IntPtr hCursor; + public POINT ptScreenPos; + } + + [StructLayout(LayoutKind.Sequential)] + public struct IconInfo { + public bool fIcon; + public Int32 xHotspot; + public Int32 yHotspot; + public IntPtr hbmMask; + public IntPtr hbmColor; + } + + [Serializable, StructLayout(LayoutKind.Sequential)] + public struct SCROLLINFO { + public int cbSize; + public int fMask; + public int nMin; + public int nMax; + public int nPage; + public int nPos; + public int nTrackPos; + } } diff --git a/GreenshotPlugin/UnmanagedHelpers/User32.cs b/GreenshotPlugin/UnmanagedHelpers/User32.cs index fb7252b29..2515a7aeb 100644 --- a/GreenshotPlugin/UnmanagedHelpers/User32.cs +++ b/GreenshotPlugin/UnmanagedHelpers/User32.cs @@ -26,239 +26,25 @@ using System.Runtime.InteropServices; using System.Text; namespace GreenshotPlugin.UnmanagedHelpers { + /// + /// Used with EnumWindows or EnumChildWindows + /// + /// + /// + /// public delegate int EnumWindowsProc(IntPtr hwnd, int lParam); - [StructLayout(LayoutKind.Sequential), Serializable()] - public struct POINT { - public int X; - public int Y; - - public POINT(int x, int y) { - this.X = x; - this.Y = y; - } - public POINT(Point point) { - this.X = point.X; - this.Y = point.Y; - } - - public static implicit operator System.Drawing.Point(POINT p) { - return new System.Drawing.Point(p.X, p.Y); - } - - public static implicit operator POINT(System.Drawing.Point p) { - return new POINT(p.X, p.Y); - } - - public Point ToPoint() { - return new Point(X, Y); - } - - override public string ToString() { - return X +","+Y; - } - } - - [StructLayout(LayoutKind.Sequential), Serializable()] - public struct RECT { - private int _Left; - private int _Top; - private int _Right; - private int _Bottom; - - public RECT(RECT rectangle) : this(rectangle.Left, rectangle.Top, rectangle.Right, rectangle.Bottom) { - } - public RECT(Rectangle rectangle) : this(rectangle.Left, rectangle.Top, rectangle.Right, rectangle.Bottom) { - } - public RECT(int Left, int Top, int Right, int Bottom) { - _Left = Left; - _Top = Top; - _Right = Right; - _Bottom = Bottom; - } - - public int X { - get { return _Left; } - set { _Left = value; } - } - public int Y { - get { return _Top; } - set { _Top = value; } - } - public int Left { - get { return _Left; } - set { _Left = value; } - } - public int Top { - get { return _Top; } - set { _Top = value; } - } - public int Right { - get { return _Right; } - set { _Right = value; } - } - public int Bottom { - get { return _Bottom; } - set { _Bottom = value; } - } - public int Height { - get { return _Bottom - _Top; } - set { _Bottom = value - _Top; } - } - public int Width { - get { return _Right - _Left; } - set { _Right = value + _Left; } - } - public Point Location { - get { return new Point(Left, Top); } - set { - _Left = value.X; - _Top = value.Y; - } - } - public Size Size { - get { return new Size(Width, Height); } - set { - _Right = value.Width + _Left; - _Bottom = value.Height + _Top; - } - } - - public static implicit operator Rectangle(RECT Rectangle) { - return new Rectangle(Rectangle.Left, Rectangle.Top, Rectangle.Width, Rectangle.Height); - } - public static implicit operator RECT(Rectangle Rectangle) { - return new RECT(Rectangle.Left, Rectangle.Top, Rectangle.Right, Rectangle.Bottom); - } - public static bool operator ==(RECT Rectangle1, RECT Rectangle2) - { - return Rectangle1.Equals(Rectangle2); - } - public static bool operator !=(RECT Rectangle1, RECT Rectangle2) { - return !Rectangle1.Equals(Rectangle2); - } - - public override string ToString() { - return "{Left: " + _Left + "; " + "Top: " + _Top + "; Right: " + _Right + "; Bottom: " + _Bottom + "}"; - } - - public override int GetHashCode() { - return ToString().GetHashCode(); - } - - public bool Equals(RECT Rectangle) { - return Rectangle.Left == _Left && Rectangle.Top == _Top && Rectangle.Right == _Right && Rectangle.Bottom == _Bottom; - } - - public Rectangle ToRectangle() { - return new Rectangle(Left, Top, Width, Height); - } - public override bool Equals(object Object) { - if (Object is RECT) { - return Equals((RECT)Object); - } else if (Object is Rectangle) { - return Equals(new RECT((Rectangle)Object)); - } - - return false; - } - } - - [StructLayout(LayoutKind.Sequential), Serializable()] - public struct WindowInfo { - public uint cbSize; - public RECT rcWindow; - public RECT rcClient; - public uint dwStyle; - public uint dwExStyle; - public uint dwWindowStatus; - public uint cxWindowBorders; - public uint cyWindowBorders; - public ushort atomWindowType; - public ushort wCreatorVersion; - // Allows automatic initialization of "cbSize" with "new WINDOWINFO(null/true/false)". - public WindowInfo(Boolean ? filler) : this() { - cbSize = (UInt32)(Marshal.SizeOf(typeof( WindowInfo ))); - } - } - /// - /// Contains information about the placement of a window on the screen. + /// Used with SetWinEventHook /// - [StructLayout(LayoutKind.Sequential), Serializable()] - public struct WindowPlacement { - /// - /// The length of the structure, in bytes. Before calling the GetWindowPlacement or SetWindowPlacement functions, set this member to sizeof(WINDOWPLACEMENT). - /// - /// GetWindowPlacement and SetWindowPlacement fail if this member is not set correctly. - /// - /// - public int Length; - - /// - /// Specifies flags that control the position of the minimized window and the method by which the window is restored. - /// - public WindowPlacementFlags Flags; - - /// - /// The current show state of the window. - /// - public ShowWindowCommand ShowCmd; - - /// - /// The coordinates of the window's upper-left corner when the window is minimized. - /// - public POINT MinPosition; - - /// - /// The coordinates of the window's upper-left corner when the window is maximized. - /// - public POINT MaxPosition; - - /// - /// The window's coordinates when the window is in the restored position. - /// - public RECT NormalPosition; - - /// - /// Gets the default (empty) value. - /// - public static WindowPlacement Default { - get { - WindowPlacement result = new WindowPlacement(); - result.Length = Marshal.SizeOf( result ); - return result; - } - } - } - - [StructLayout(LayoutKind.Sequential)] - public struct CursorInfo { - public Int32 cbSize; - public Int32 flags; - public IntPtr hCursor; - public POINT ptScreenPos; - } - - [StructLayout(LayoutKind.Sequential)] - public struct IconInfo { - public bool fIcon; - public Int32 xHotspot; - public Int32 yHotspot; - public IntPtr hbmMask; - public IntPtr hbmColor; - } - - [Serializable, StructLayout(LayoutKind.Sequential)] - public struct SCROLLINFO { - public int cbSize; - public int fMask; - public int nMin; - public int nMax; - public int nPage; - public int nPos; - public int nTrackPos; - } + /// + /// + /// + /// + /// + /// + /// + public delegate void WinEventDelegate(IntPtr hWinEventHook, WinEvent eventType, IntPtr hwnd, EventObjects idObject, int idChild, uint dwEventThread, uint dwmsEventTime); /// /// User32 Wrappers @@ -276,32 +62,6 @@ namespace GreenshotPlugin.UnmanagedHelpers { public const int MONITOR_DEFAULTTONULL = 0; public const int MONITOR_DEFAULTTOPRIMARY = 1; public const int MONITOR_DEFAULTTONEAREST = 2; - - /// - /// Stop flashing. The system restores the window to its original state. - /// - public const int FLASHW_STOP = 0; - /// - /// Flash the window caption. - /// - public const int FLASHW_CAPTION = 0x00000001; - /// - /// Flash the taskbar button. - /// - public const int FLASHW_TRAY = 0x00000002; - /// - /// Flash both the window caption and taskbar button. - /// - public const int FLASHW_ALL = (FLASHW_CAPTION | FLASHW_TRAY); - /// - /// Flash continuously, until the FLASHW_STOP flag is set. - /// - public const int FLASHW_TIMER = 0x00000004; - /// - /// Flash continuously until the window comes to the foreground. - /// - public const int FLASHW_TIMERNOFG = 0x0000000C; - public const Int32 CURSOR_SHOWING = 0x00000001; [DllImport("user32", SetLastError = true)] @@ -364,20 +124,6 @@ namespace GreenshotPlugin.UnmanagedHelpers { public static extern IntPtr MonitorFromWindow(IntPtr hwnd, uint dwFlags); [DllImport("user32", SetLastError = true)] public static extern IntPtr MonitorFromRect([In] ref RECT lprc, uint dwFlags); - - /// - /// Wrapper for the GetWindowLong which decides if the system is 64-bit or not and calls the right one. - /// - /// - /// - /// - public static uint GetWindowLongWrapper(IntPtr hwnd, int nIndex) { - if (IntPtr.Size == 8) { - return GetWindowLongPtr(hwnd, nIndex); - } else { - return GetWindowLong(hwnd, nIndex); - } - } [DllImport("user32", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool GetWindowInfo(IntPtr hwnd, ref WindowInfo pwi); @@ -420,7 +166,13 @@ namespace GreenshotPlugin.UnmanagedHelpers { [DllImport("user32", SetLastError = true, CharSet = CharSet.Auto)] public static extern bool ChangeClipboardChain(IntPtr hWndRemove, IntPtr hWndNewNext); - // Added for finding Metro apps + // Added for WinEventHook logic, Greenshot 1.2 + [DllImport("user32", SetLastError = true)] + public static extern bool UnhookWinEvent(IntPtr hWinEventHook); + [DllImport("user32", SetLastError = true)] + public static extern IntPtr SetWinEventHook(WinEvent eventMin, WinEvent eventMax, IntPtr hmodWinEventProc, WinEventDelegate lpfnWinEventProc, int idProcess, int idThread, WinEventHookFlags dwFlags); + + // Added for finding Metro apps, Greenshot 1.1 [DllImport("user32", SetLastError = true)] public static extern IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport("user32", SetLastError = true)] @@ -435,6 +187,53 @@ namespace GreenshotPlugin.UnmanagedHelpers { /// [DllImport("user32", SetLastError = true)] public static extern uint GetGuiResources(IntPtr hProcess, uint uiFlags); + [DllImport("user32", EntryPoint = "RegisterWindowMessageA", SetLastError = true)] + public static extern uint RegisterWindowMessage(string lpString); + [DllImport("user32", SetLastError=true, CharSet=CharSet.Auto)] + public static extern IntPtr SendMessageTimeout(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam, SendMessageTimeoutFlags fuFlags, uint uTimeout, out UIntPtr lpdwResult); + [DllImport("user32", SetLastError = true)] + public static extern bool GetPhysicalCursorPos(out POINT cursorLocation); + [DllImport("user32", SetLastError=true)] + public static extern int MapWindowPoints(IntPtr hwndFrom, IntPtr hwndTo, ref POINT lpPoints, [MarshalAs(UnmanagedType.U4)] int cPoints); + [DllImport("user32", SetLastError = true)] + public static extern int GetSystemMetrics(SystemMetric index); + + /// + /// The following is used for Icon handling + /// + /// + /// + [DllImport("user32", SetLastError = true)] + public static extern IntPtr CopyIcon(IntPtr hIcon); + [DllImport("user32", SetLastError = true)] + public static extern bool DestroyIcon(IntPtr hIcon); + [DllImport("user32", SetLastError = true)] + public static extern bool GetCursorInfo(out CursorInfo cursorInfo); + [DllImport("user32", SetLastError = true)] + public static extern bool GetIconInfo(IntPtr hIcon, out IconInfo iconInfo); + [DllImport("user32", SetLastError = true)] + public static extern bool DrawIcon(IntPtr hDC, int X, int Y, IntPtr hIcon); + [DllImport("user32", SetLastError = true)] + public static extern IntPtr SetCapture(IntPtr hWnd); + [DllImport("user32", SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool ReleaseCapture(); + [DllImport("user32", SetLastError = true)] + public static extern IntPtr CreateIconIndirect(ref IconInfo icon); + + /// + /// Wrapper for the GetWindowLong which decides if the system is 64-bit or not and calls the right one. + /// + /// + /// + /// + public static uint GetWindowLongWrapper(IntPtr hwnd, int nIndex) { + if (IntPtr.Size == 8) { + return GetWindowLongPtr(hwnd, nIndex); + } else { + return GetWindowLong(hwnd, nIndex); + } + } public static uint GetGuiResourcesGDICount() { return GetGuiResources(Process.GetCurrentProcess().Handle, 0); @@ -444,11 +243,6 @@ namespace GreenshotPlugin.UnmanagedHelpers { return GetGuiResources(Process.GetCurrentProcess().Handle, 1); } - [DllImport("user32", EntryPoint = "RegisterWindowMessageA", SetLastError = true)] - public static extern uint RegisterWindowMessage(string lpString); - [DllImport("user32", SetLastError=true, CharSet=CharSet.Auto)] - public static extern IntPtr SendMessageTimeout(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam, SendMessageTimeoutFlags fuFlags, uint uTimeout, out UIntPtr lpdwResult); - /// /// Helper method to create a Win32 exception with the windows message in it /// @@ -456,45 +250,8 @@ namespace GreenshotPlugin.UnmanagedHelpers { /// Exception public static Exception CreateWin32Exception(string method) { Win32Exception exceptionToThrow = new Win32Exception(); - exceptionToThrow.Data.Add("Method", method); + exceptionToThrow.Data.Add("Method", method); return exceptionToThrow; } - [DllImport("user32", SetLastError = true)] - public static extern bool GetPhysicalCursorPos(out POINT cursorLocation); - - [DllImport("user32", SetLastError=true)] - public static extern int MapWindowPoints(IntPtr hwndFrom, IntPtr hwndTo, ref POINT lpPoints, [MarshalAs(UnmanagedType.U4)] int cPoints); - - #region icon - [DllImport("user32", SetLastError = true)] - public static extern IntPtr CopyIcon(IntPtr hIcon); - - [DllImport("user32", SetLastError = true)] - public static extern bool DestroyIcon(IntPtr hIcon); - - [DllImport("user32", SetLastError = true)] - public static extern bool GetCursorInfo(out CursorInfo cursorInfo); - - [DllImport("user32", SetLastError = true)] - public static extern bool GetIconInfo(IntPtr hIcon, out IconInfo iconInfo); - - [DllImport("user32", SetLastError = true)] - public static extern bool DrawIcon(IntPtr hDC, int X, int Y, IntPtr hIcon); - - [DllImport("user32", SetLastError = true)] - public static extern IntPtr SetCapture(IntPtr hWnd); - - [DllImport("user32", SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool ReleaseCapture(); - - [DllImport("user32", SetLastError = true)] - public static extern int GetSystemMetrics(SystemMetric index); - - [DllImport("user32", SetLastError = true)] - public static extern IntPtr CreateIconIndirect(ref IconInfo icon); - - - #endregion } }