Можно ли через SendMessage отправить клик по координатам? - C#
Формулировка задачи:
Например, я знаю координаты элемента, в котором находятся кнопки, у которых нет хендла.
Поэтому можно ли нажать на 20 пикселей ниже позиции какого-нибудь элемента?
Вот, например, кнопка клик происходит по ней, а как можно кликнуть ниже на несколько пикселей?
int val = Convert.ToInt32("00380192", 16); IntPtr handle = new IntPtr(val); SendMessage(handle, (uint)WindowMessages.WM_LBUTTONDOWN, IntPtr.Zero, IntPtr.Zero); SendMessage(handle, (uint)WindowMessages.WM_LBUTTONUP, IntPtr.Zero, IntPtr.Zero);
Решение задачи: «Можно ли через SendMessage отправить клик по координатам?»
textual
Листинг программы
public class ClickOnPointTool { [DllImport("user32.dll")] static extern bool ClientToScreen(IntPtr hWnd, ref Point lpPoint); [DllImport("user32.dll")] internal static extern uint SendInput(uint nInputs, [MarshalAs(UnmanagedType.LPArray), In] INPUT[] pInputs, int cbSize); #pragma warning disable 649 internal struct INPUT { public UInt32 Type; public MOUSEKEYBDHARDWAREINPUT Data; } [StructLayout(LayoutKind.Explicit)] internal struct MOUSEKEYBDHARDWAREINPUT { [FieldOffset(0)] public MOUSEINPUT Mouse; } internal struct MOUSEINPUT { public Int32 X; public Int32 Y; public UInt32 MouseData; public UInt32 Flags; public UInt32 Time; public IntPtr ExtraInfo; } #pragma warning restore 649 public static void ClickOnPoint(IntPtr wndHandle , Point clientPoint) { var oldPos = Cursor.Position; /// get screen coordinates ClientToScreen(wndHandle, ref clientPoint); /// set cursor on coords, and press mouse Cursor.Position = new Point(clientPoint.X, clientPoint.Y); var inputMouseDown = new INPUT(); inputMouseDown.Type = 0; /// input type mouse inputMouseDown.Data.Mouse.Flags = 0x0002; /// left button down var inputMouseUp = new INPUT(); inputMouseUp.Type = 0; /// input type mouse inputMouseUp.Data.Mouse.Flags = 0x0004; /// left button up var inputs = new INPUT[] { inputMouseDown, inputMouseUp }; SendInput((uint)inputs.Length, inputs, Marshal.SizeOf(typeof(INPUT))); /// return mouse Cursor.Position = oldPos; } } // ... ClickOnPoint(this.Handle, new Point(375, 340));
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д