diff --git a/WelsonJS.Toolkit/WelsonJS.Toolkit/Toolkit.cs b/WelsonJS.Toolkit/WelsonJS.Toolkit/Toolkit.cs index 6888f99..5e6de61 100644 --- a/WelsonJS.Toolkit/WelsonJS.Toolkit/Toolkit.cs +++ b/WelsonJS.Toolkit/WelsonJS.Toolkit/Toolkit.cs @@ -14,6 +14,7 @@ * - https://stackoverflow.com/questions/13547639/return-window-handle-by-its-name-title * - https://blog.naver.com/zlatmgpdjtiq/222016292758 * - https://stackoverflow.com/questions/5427020/prompt-dialog-in-windows-forms + * - https://stackoverflow.com/questions/60203135/set-delta-in-a-wm-mousewheel-message-to-send-with-postmessage */ using System; @@ -56,6 +57,32 @@ namespace WelsonJS WM_CHAR = 0x102, //char WM_COMMAND = 0x111 } + public enum WinMsgMouseKey : int + { + MK_NONE = 0x0000, + MK_LBUTTON = 0x0001, + MK_RBUTTON = 0x0002, + MK_SHIFT = 0x0004, + MK_CONTROL = 0x0008, + MK_MBUTTON = 0x0010, + MK_XBUTTON1 = 0x0020, + MK_XBUTTON2 = 0x0040 + } + + public int directionUp = 1; + public int directionDown = -1; + public const uint WM_MOUSEWHEEL = 0x020A; + + public IntPtr MAKEWPARAM(int direction, float multiplier, WinMsgMouseKey button) + { + int delta = (int)(SystemInformation.MouseWheelScrollDelta * multiplier); + return (IntPtr)(((delta << 16) * Math.Sign(direction) | (ushort)button)); + } + + public IntPtr MAKELPARAM(int low, int high) + { + return (IntPtr)((high << 16) | (low & 0xFFFF)); + } public IntPtr QueryHandleWindow(string wName) { @@ -137,5 +164,39 @@ namespace WelsonJS string result = WelsonJS.Prompt.ShowDialog(message, ApplicationName); return (result == "" ? _default : result); } + + [ComVisible(true)] + public bool MouseWheelDown(string wName) + { + bool result = false; + + IntPtr hWnd = QueryHandleWindow(wName); + if (hWnd != IntPtr.Zero) + { + // Scrolls [Handle] down by 1/2 wheel rotation with Left Button pressed + IntPtr wParam = MAKEWPARAM(directionDown, .5f, WinMsgMouseKey.MK_LBUTTON); + IntPtr lParam = MAKELPARAM(Cursor.Position.X, Cursor.Position.Y); + result = PostMessage(hWnd, WM_MOUSEWHEEL, (int)wParam, lParam); + } + + return result; + } + + [ComVisible(true)] + public bool MouseWheelUp(string wName) + { + bool result = false; + + IntPtr hWnd = QueryHandleWindow(wName); + if (hWnd != IntPtr.Zero) + { + // Scrolls [Handle] up by 1/2 wheel rotation with Left Button pressed + IntPtr wParam = MAKEWPARAM(directionUp, .5f, WinMsgMouseKey.MK_LBUTTON); + IntPtr lParam = MAKELPARAM(Cursor.Position.X, Cursor.Position.Y); + result = PostMessage(hWnd, WM_MOUSEWHEEL, (int)wParam, lParam); + } + + return result; + } } } diff --git a/WelsonJS.Toolkit/WelsonJS.Toolkit/WelsonJS.Toolkit.csproj b/WelsonJS.Toolkit/WelsonJS.Toolkit/WelsonJS.Toolkit.csproj index 2748e95..9c69927 100644 --- a/WelsonJS.Toolkit/WelsonJS.Toolkit/WelsonJS.Toolkit.csproj +++ b/WelsonJS.Toolkit/WelsonJS.Toolkit/WelsonJS.Toolkit.csproj @@ -43,6 +43,7 @@ +