powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Drag drop в чужом окне на C#
6 сообщений из 6, страница 1 из 1
Drag drop в чужом окне на C#
    #39181595
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне нужно перетащить элемент в чужом приложении, cымитировав работу пользователя

1. Клик по координатам (x,y)
2. Перетаскивание объекта на новые координаты (x1,y1)
3. Отпускание клавиши мыши

Как это можно сделать?
...
Рейтинг: 0 / 0
Drag drop в чужом окне на C#
    #39181863
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Drag drop в чужом окне на C#
    #39181896
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy

в десятке не работает
...
Рейтинг: 0 / 0
Drag drop в чужом окне на C#
    #39182613
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так идей надергай.
...
Рейтинг: 0 / 0
Drag drop в чужом окне на C#
    #39183291
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using System.Threading;


namespace drugdrop
{

    class MouseImpersonator
    {
        [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
        private static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);

        [Flags]
        public enum  MouseEventFlags:uint
        {
            LEFTDOWN = 0x00000002,
            LEFTUP = 0x00000004,
            MIDDLEDOWN = 0x00000020,
            MIDDLEUP = 0x00000040,
            MOVE = 0x00000001,
            ABSOLUTE = 0x00008000,
            RIGHTDOWN = 0x00000008,
            RIGHTUP = 0x00000010
        }

        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool SetCursorPos(int X, int Y);

        private const int leftDown = 0x02;
        private const int leftUp = 0x04;
        public static void Grab(int xPos, int yPos)
        {
            Cursor.Position = new Point(xPos  , yPos );
            mouse_event((uint)MouseEventFlags.LEFTDOWN    , (uint)xPos, (uint)yPos,  0, 0);
        }

        public static void Release(int xPos, int yPos)
        {
            Cursor.Position = new Point(xPos + 25, yPos + 25);
            mouse_event((uint)MouseEventFlags.LEFTUP , (uint)xPos, (uint)yPos, 0, 0);
        }
    
    
}

    class Program
    {
        [DllImport("user32.dll")]  static extern bool SetForegroundWindow(IntPtr hWnd);
        private const int leftDown = 0x02;
        private const int leftUp = 0x04;

         public static IntPtr GetWindowsHandle(string Name)
        {
            IntPtr hWnd = IntPtr.Zero;
            foreach (Process pList in Process.GetProcesses())
            {
                if (pList.MainWindowTitle.Contains(Name))
                {
                    hWnd = pList.MainWindowHandle;
                }
            }
            return hWnd;
        }

    
        static void Main(string[] args)
        {
            IntPtr hwnd = GetWindowsHandle("Мое окно:");
            Thread.Sleep(500);
            if (hwnd!=IntPtr.Zero )
            {
                SetForegroundWindow(hwnd);
                Thread.Sleep(500);
                SetForegroundWindow(hwnd);
                MouseImpersonator.Grab(390,320);
                Thread.Sleep(500);
                MouseImpersonator.Release(500, 472);
          
            }
        }
    }
}



Вот вариант нерабочего кода, мышкой он кликает по-контролу в чужом окне, но не перетаскивает его, просто двигает курсором.
Подскажите, чо тут не так.
...
Рейтинг: 0 / 0
Drag drop в чужом окне на C#
    #39183775
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разобрался сам, драгдроп делается двумя вызовами LEFTDOWN и MOVE

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
            Cursor.Position = new Point(xPos  , yPos );
            Application.DoEvents();
            Thread.Sleep(200);  
            mouse_event((uint)MouseEventFlags.LEFTDOWN, 0, 0, 0, 0);

            Application.DoEvents();
            mouse_event((uint)MouseEventFlags.MOVE, 0, 0, 0, 0);
            Application.DoEvents();
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Drag drop в чужом окне на C#
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]