Задать вопрос
Ответы пользователя по тегу C#
  • Как сымитировать нажатие мышки на определённый пиксель на экране?

    @crescent
    я использую свой класс
    public class MouseSimulator
        {
            public static void ClickLeftMouseButton()
            {
                INPUT mouseDownInput = new INPUT();
                mouseDownInput.type = SendInputEventType.InputMouse;
                mouseDownInput.mkhi.mi.dwFlags = MouseEventFlags.MOUSEEVENT_LEFTDOWN;
                User32.SendInput(1, ref mouseDownInput, Marshal.SizeOf(new INPUT()));
    
                INPUT mouseUpInput = new INPUT();
                mouseUpInput.type = SendInputEventType.InputMouse;
                mouseUpInput.mkhi.mi.dwFlags = MouseEventFlags.MOUSEEVENT_LEFTUP;
                User32.SendInput(1, ref mouseUpInput, Marshal.SizeOf(new INPUT()));
            }
            public static void ClickRightMouseButton()
            {
                INPUT mouseDownInput = new INPUT();
                mouseDownInput.type = SendInputEventType.InputMouse;
                mouseDownInput.mkhi.mi.dwFlags = MouseEventFlags.MOUSEEVENT_RIGHTDOWN;
                User32.SendInput(1, ref mouseDownInput, Marshal.SizeOf(new INPUT()));
    
                INPUT mouseUpInput = new INPUT();
                mouseUpInput.type = SendInputEventType.InputMouse;
                mouseUpInput.mkhi.mi.dwFlags = MouseEventFlags.MOUSEEVENT_RIGHTUP;
                User32.SendInput(1, ref mouseUpInput, Marshal.SizeOf(new INPUT()));
            }
    
            public static void MouseMove(int dx, int dy)
            {
                INPUT mouseMove = new INPUT();
                mouseMove.type = SendInputEventType.InputMouse;
                mouseMove.mkhi.mi.dwFlags = MouseEventFlags.MOUSEEVENT_ABSOLUTE | MouseEventFlags.MOUSEEVENT_MOVE;
                mouseMove.mkhi.mi.dx = dx;
                mouseMove.mkhi.mi.dy = dy;
                User32.SendInput(1, ref mouseMove, Marshal.SizeOf(new INPUT()));
            }
    
            public static void LinearSmoothMove(Point newPosition, TimeSpan duration)
            {
                var point = MouseOperations.GetCursorPosition();
                Point start = new Point(point.X, point.Y);
    
                // Find the vector between start and newPosition
                double deltaX = newPosition.X - start.X;
                double deltaY = newPosition.Y - start.Y;
    
                // start a timer
                Stopwatch stopwatch = new Stopwatch();
                stopwatch.Start();
    
                double timeFraction = 0.0;
    
                do
                {
                    timeFraction = (double)stopwatch.Elapsed.Ticks / duration.Ticks;
                    if (timeFraction > 1.0)
                        timeFraction = 1.0;
    
                    PointF curPoint = new PointF(Convert.ToInt32(start.X + timeFraction * deltaX),
                        Convert.ToInt32(start.Y + timeFraction * deltaY));
    
                    //MouseOperations.SetCursorPos(Convert.ToInt32(curPoint.X), Convert.ToInt32(curPoint.Y));
                    //MouseSimulator.MouseMove(Convert.ToInt32(curPoint.X), Convert.ToInt32(curPoint.Y));
                    int inputXinPixels = Convert.ToInt32(curPoint.X);
                    int inputYinPixels = Convert.ToInt32(curPoint.Y);
                    var screenBounds = Screen.PrimaryScreen.Bounds;
                    var outputX = inputXinPixels * 65535 / screenBounds.Width;
                    var outputY = inputYinPixels * 65535 / screenBounds.Height;
                    //Console.WriteLine(outputX);
                    MouseSimulator.MouseMove(outputX, outputY);
                    Thread.Sleep(50);
                } while (timeFraction < 1.0);
            }
        }
    
    
    
        [StructLayout(LayoutKind.Sequential)]
        public struct POINT
        {
            public int x;
            public int y;
        }
    
        [StructLayout(LayoutKind.Sequential)]
        public struct INPUT
        {
            public SendInputEventType type;
            public MOUSEANDKEYBOARDINPUT mkhi;
        }
    
        [StructLayout(LayoutKind.Sequential)]
        public struct KEYBOARDINPUT
        {
            public ushort wVk;
            public ushort wScan;
            public uint dwFlags;
            public uint time;
            public IntPtr dwExtraInfo;
        }
    
        [StructLayout(LayoutKind.Sequential)]
        public struct HARDWAREINPUT
        {
            public int uMsg;
            public short wParamL;
            public short wParamH;
        }
    
        [StructLayout(LayoutKind.Sequential)]
        public struct MOUSEINPUT
        {
            public int dx;
            public int dy;
            public uint mouseData;
            public MouseEventFlags dwFlags;
            public uint time;
            public IntPtr dwExtraInfo;
        }
    
        [StructLayout(LayoutKind.Explicit)]
        public struct MOUSEANDKEYBOARDINPUT
        {
            [FieldOffset(0)]
            public MOUSEINPUT mi;
    
            [FieldOffset(0)]
            public KEYBOARDINPUT ki;
    
            [FieldOffset(0)]
            public HARDWAREINPUT hi;
        }
    
        [Flags]
        public enum MouseEventFlags : uint
        {
            MOUSEEVENT_MOVE = 0x0001,
            MOUSEEVENT_LEFTDOWN = 0x0002,
            MOUSEEVENT_LEFTUP = 0x0004,
            MOUSEEVENT_RIGHTDOWN = 0x0008,
            MOUSEEVENT_RIGHTUP = 0x0010,
            MOUSEEVENT_MIDDLEDOWN = 0x0020,
            MOUSEEVENT_MIDDLEUP = 0x0040,
            MOUSEEVENT_XDOWN = 0x0080,
            MOUSEEVENT_XUP = 0x0100,
            MOUSEEVENT_WHEEL = 0x0800,
            MOUSEEVENT_VIRTUALDESK = 0x4000,
            MOUSEEVENT_ABSOLUTE = 0x8000
        }
    
        [Flags]
        public enum SendInputEventType : uint
        {
            InputMouse,
            InputKeyboard,
            InputHardware
        }
    
        public class User32
        {
            [DllImport("user32.dll")]
            public static extern long SetCursorPos(int x, int y);
    
            [DllImport("user32.dll")]
            public static extern bool ClientToScreen(IntPtr hWnd, ref POINT point);
    
            [DllImport("user32.dll")]
            [return: MarshalAs(UnmanagedType.Bool)]
            public static extern bool GetCursorPos(out POINT p);
    
            [DllImport("user32.dll", SetLastError = true)]
            public static extern uint SendInput(uint nInputs, ref INPUT pInputs, int cbSize);
    
            [DllImport("user32.dll")]
            public static extern IntPtr GetDesktopWindow();
    
            [DllImport("user32.dll")]
            public static extern IntPtr GetWindowDC(IntPtr ptr);
        }


    собственно чтобы кликнуть надо:
    LinearSmoothMove(Point newPosition, TimeSpan duration)
    ClickLeftMouseButton()

    я его использую что в вк куче народу писать) работает хорошо
    Ответ написан
    Комментировать
  • C# System.Windows.Input.KeyEventArgs в System.Windows.Forms.KeyEventArgs?

    @crescent Автор вопроса
    Нашел сам решение:
    private void PossessionField_OnPreviewKeyDown(object sender, KeyEventArgs e)
            {
                Keys formsKey;
                Key wpfKey = e.Key;
                formsKey = (Keys)KeyInterop.VirtualKeyFromKey(wpfKey);
                System.Windows.Forms.KeyEventArgs ev = new System.Windows.Forms.KeyEventArgs(formsKey);
                win.MainForm_KeyDown(sender, ev);
    Ответ написан
    Комментировать
  • Как поменять папку проекта в vs?

    @crescent Автор вопроса
    Нашел сам решение:
    1) меняем путь в .sln к проекту
    2) меняет название папки проекта
    3) в проекте находим .csproj и там меняет в хml название
    Ответ написан
    Комментировать