diff --git a/ShareX.HelpersLib/Helpers/Helpers.cs b/ShareX.HelpersLib/Helpers/Helpers.cs index 81b56d02a..64a205c51 100644 --- a/ShareX.HelpersLib/Helpers/Helpers.cs +++ b/ShareX.HelpersLib/Helpers/Helpers.cs @@ -1267,5 +1267,22 @@ public static string NumberToLetters(int num) } return result; } + + public static bool TryFixHandCursor() + { + try + { + // https://referencesource.microsoft.com/#System.Windows.Forms/winforms/Managed/System/WinForms/Cursors.cs,423 + typeof(Cursors).GetField("hand", BindingFlags.NonPublic | BindingFlags.Static) + ?.SetValue(null, new Cursor(NativeMethods.LoadCursor(IntPtr.Zero, NativeConstants.IDC_HAND))); + + return true; + } + catch + { + // If it fails, we'll just have to live with the old hand. + return false; + } + } } } \ No newline at end of file diff --git a/ShareX.HelpersLib/Native/NativeConstants.cs b/ShareX.HelpersLib/Native/NativeConstants.cs index c54425eb2..3de69c04a 100644 --- a/ShareX.HelpersLib/Native/NativeConstants.cs +++ b/ShareX.HelpersLib/Native/NativeConstants.cs @@ -82,6 +82,7 @@ public static class NativeConstants public const uint ECM_FIRST = 0x1500; public const uint EM_SETCUEBANNER = ECM_FIRST + 1; + public const int IDC_HAND = 32649; public const uint MA_ACTIVATE = 1; public const uint MA_ACTIVATEANDEAT = 2; public const uint MA_NOACTIVATE = 3; diff --git a/ShareX.HelpersLib/Native/NativeMethods.cs b/ShareX.HelpersLib/Native/NativeMethods.cs index 5723fc581..91065e23c 100644 --- a/ShareX.HelpersLib/Native/NativeMethods.cs +++ b/ShareX.HelpersLib/Native/NativeMethods.cs @@ -193,6 +193,9 @@ public static partial class NativeMethods [return: MarshalAs(UnmanagedType.Bool)] public static extern bool IsZoomed(IntPtr hWnd); + [DllImport("user32.dll")] + public static extern IntPtr LoadCursor(IntPtr hInstance, int iconId); + [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool PrintWindow(IntPtr hwnd, IntPtr hDC, uint nFlags); diff --git a/ShareX/Program.cs b/ShareX/Program.cs index 0204e3c79..04bdb1843 100644 --- a/ShareX/Program.cs +++ b/ShareX/Program.cs @@ -226,8 +226,10 @@ public static string ScreenshotsFolder [STAThread] private static void Main(string[] args) { +#if !DEBUG // Allow Visual Studio to break on exceptions in Debug builds. Application.ThreadException += Application_ThreadException; AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; +#endif StartTimer = Stopwatch.StartNew(); // For be able to show startup time @@ -288,6 +290,7 @@ private static void Run() LanguageHelper.ChangeLanguage(Settings.Language); + Helpers.TryFixHandCursor(); DebugHelper.WriteLine("MainForm init started."); MainForm = new MainForm(); DebugHelper.WriteLine("MainForm init finished."); @@ -500,6 +503,7 @@ private static bool CheckAdminTasks() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); + Helpers.TryFixHandCursor(); Application.Run(new DNSChangerForm()); return true; }