Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
120 / 102 / 45
Регистрация: 08.02.2013
Сообщений: 598
1

Ребят, подскажите как можно прогрммно щелкнуть мышкой в окне сторонней программы?

25.02.2013, 20:17. Просмотров 1604. Ответов 6
Метки нет (Все метки)


На с++, делал так.
C++
1
2
3
4
5
6
7
void ClickPos (int x, int y)
{
SetCursorPos(x,y);
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); // нажали левую кнопку мыши
Sleep(30);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); // отпустили левую кнопку мыши
}
Подскажите пожалуйста, как это можно реализовать на C#.
Заранее Вас благодарю.

Добавлено через 43 минуты
Сорри )) Нашел
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[DllImport("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)]
   public static extern void mouse_event(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo);
 
   private const int MOUSEEVENTF_LEFTDOWN = 0x02;
   private const int MOUSEEVENTF_LEFTUP = 0x04;
   private const int MOUSEEVENTF_RIGHTDOWN = 0x08;
   private const int MOUSEEVENTF_RIGHTUP = 0x10;
 
public void DoMouseClick()
   {
      int X = Cursor.Position.X;
      int Y = Cursor.Position.Y;
      mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, X, Y, 0, 0);
   }
Добавлено через 16 минут
Немного подругому сделал. ))

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
public partial class Form1 : Form
    {
        [DllImport("user32.dll")]
        static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);
        [Flags]
        public enum MouseEventFlags
        {
            LEFTDOWN = 0x00000002,
            LEFTUP = 0x00000004,
 
        }
        public Form1()
        {
 
            InitializeComponent();
 
        }
 
        public static void LeftClick(int x, int y)
        {
            Cursor.Position = new System.Drawing.Point(x, y);
            mouse_event((int)(MouseEventFlags.LEFTDOWN), 0, 0, 0, 0);
            mouse_event((int)(MouseEventFlags.LEFTUP), 0, 0, 0, 0);
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            LeftClick(0,0);
        }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.02.2013, 20:17
Ответы с готовыми решениями:

Как сделать так, чтобы после нажатия кнопки можно было щелкнуть мышкой в PictureBox и там бы нарисовался круг?
В общем, допустим, что есть Button1 - добавить круг, PictureBoх, в котором этот круг рисуется и...

Подскажите, как реализовать отрисовку своего меню в окне сторонней игры(cs 1.6)?
Подскажите, как реализовать отрисовку своего меню в окне сторонней игры(cs 1.6) ? Так то понятно,...

Можно ли (и как) на С++ перехватить действия сторонней программы в windows?
Например фотожопа. Возможно ли на С++ написать некоторую программу, которая бы фиксировала все...

Поиск текста в окне сторонней программы через VBA
Добрый вечер, Подскажите, как осуществить поиск текста в окне стороннего процесса (хэндл окна...

6
Заблокирован
25.02.2013, 20:25 2
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
namespace MouseKeyboardLibrary
{
 
    /// <summary>
    /// Mouse buttons that can be pressed
    /// </summary>
    public enum MouseButton
    {
        Left = 0x2,
        Right = 0x8,
        Middle = 0x20
    }
 
    /// <summary>
    /// Operations that simulate mouse events
    /// </summary>
    public static class MouseSimulator
    {
 
        #region Windows API Code
 
        [DllImport("user32.dll")]
        static extern int ShowCursor(bool show);
 
        [DllImport("user32.dll")]
        static extern void mouse_event(int flags, int dX, int dY, int buttons, int extraInfo);
 
        const int MOUSEEVENTF_MOVE = 0x1;
        const int MOUSEEVENTF_LEFTDOWN = 0x2;
        const int MOUSEEVENTF_LEFTUP = 0x4;
        const int MOUSEEVENTF_RIGHTDOWN = 0x8;
        const int MOUSEEVENTF_RIGHTUP = 0x10;
        const int MOUSEEVENTF_MIDDLEDOWN = 0x20;
        const int MOUSEEVENTF_MIDDLEUP = 0x40;
        const int MOUSEEVENTF_WHEEL = 0x800;
        const int MOUSEEVENTF_ABSOLUTE = 0x8000;
 
        #endregion
 
        #region Properties
 
        /// <summary>
        /// Gets or sets a structure that represents both X and Y mouse coordinates
        /// </summary>
        public static Point Position
        {
            get
            {
                return new Point(Cursor.Position.X, Cursor.Position.Y);
            }
            set
            {
                Cursor.Position = value;
            }
        }
 
        /// <summary>
        /// Gets or sets only the mouse's x coordinate
        /// </summary>
        public static int X
        {
            get
            {
                return Cursor.Position.X;
            }
            set
            {
                Cursor.Position = new Point(value, Y);
            }
        }
 
        /// <summary>
        /// Gets or sets only the mouse's y coordinate
        /// </summary>
        public static int Y
        {
            get
            {
                return Cursor.Position.Y;
            }
            set
            {
                Cursor.Position = new Point(X, value);
            }
        }
 
        #endregion
 
        #region Methods
 
        /// <summary>
        /// Press a mouse button down
        /// </summary>
        /// <param name="button"></param>
        public static void MouseDown(MouseButton button)
        {
            mouse_event(((int)button), 0, 0, 0, 0);
        }
 
        /// <summary>
        /// Press a mouse button down
        /// </summary>
        /// <param name="button"></param>
        public static void MouseDown(MouseButtons button)
        {
            switch (button)
            {
                case MouseButtons.Left:
                    MouseDown(MouseButton.Left);
                    break;
                case MouseButtons.Middle:
                    MouseDown(MouseButton.Middle);
                    break;
                case MouseButtons.Right:
                    MouseDown(MouseButton.Right);
                    break;
            }
        }
 
        /// <summary>
        /// Let a mouse button up
        /// </summary>
        /// <param name="button"></param>
        public static void MouseUp(MouseButton button)
        {
            mouse_event(((int)button) * 2, 0, 0, 0, 0);
        }
 
        /// <summary>
        /// Let a mouse button up
        /// </summary>
        /// <param name="button"></param>
        public static void MouseUp(MouseButtons button)
        {
            switch (button)
            {
                case MouseButtons.Left:
                    MouseUp(MouseButton.Left);
                    break;
                case MouseButtons.Middle:
                    MouseUp(MouseButton.Middle);
                    break;
                case MouseButtons.Right:
                    MouseUp(MouseButton.Right);
                    break;
            }
        }
 
        /// <summary>
        /// Click a mouse button (down then up)
        /// </summary>
        /// <param name="button"></param>
        public static void Click(MouseButton button)
        {
            MouseDown(button);
            MouseUp(button);
        }
 
        /// <summary>
        /// Click a mouse button (down then up)
        /// </summary>
        /// <param name="button"></param>
        public static void Click(MouseButtons button)
        {
            switch (button)
            {
                case MouseButtons.Left:
                    Click(MouseButton.Left);
                    break;
                case MouseButtons.Middle:
                    Click(MouseButton.Middle);
                    break;
                case MouseButtons.Right:
                    Click(MouseButton.Right);
                    break;
            }
        }
 
        /// <summary>
        /// Double click a mouse button (down then up twice)
        /// </summary>
        /// <param name="button"></param>
        public static void DoubleClick(MouseButton button)
        {
            Click(button);
            Click(button);
        }
 
        /// <summary>
        /// Double click a mouse button (down then up twice)
        /// </summary>
        /// <param name="button"></param>
        public static void DoubleClick(MouseButtons button)
        {
            switch (button)
            {
                case MouseButtons.Left:
                    DoubleClick(MouseButton.Left);
                    break;
                case MouseButtons.Middle:
                    DoubleClick(MouseButton.Middle);
                    break;
                case MouseButtons.Right:
                    DoubleClick(MouseButton.Right);
                    break;
            }
        }
 
        /// <summary>
        /// Roll the mouse wheel. Delta of 120 wheels up once normally, -120 wheels down once normally
        /// </summary>
        /// <param name="delta"></param>
        public static void MouseWheel(int delta)
        {
 
            mouse_event(MOUSEEVENTF_WHEEL, 0, 0, delta, 0);
 
        }
 
        /// <summary>
        /// Show a hidden current on currently application
        /// </summary>
        public static void Show()
        {
            ShowCursor(true);
        }
 
        /// <summary>
        /// Hide mouse cursor only on current application's forms
        /// </summary>
        public static void Hide()
        {
            ShowCursor(false);
        }
 
        #endregion
 
    }
 
}
Добавлено через 2 минуты
на заметку:
Эта функция была заменена. Вместо нее используйте функцию SendInput.

http://vsokovikov.narod.ru/New... _event.htm
1
120 / 102 / 45
Регистрация: 08.02.2013
Сообщений: 598
25.02.2013, 20:42  [ТС] 3
Еще небольшой вопрос, как таймер поставить на паузу. То бишь
Вызываю в таймере
C++
1
2
3
4
5
{
LeftClick(x,y);
Пауза. ( В С++ Sleep(время))
LeftClick(x,y);
}
Как сделать это в C#
0
Заблокирован
25.02.2013, 20:44 4
C#
1
Thread.Sleep(1000); //усыпить текущий поток на 1 с
1
120 / 102 / 45
Регистрация: 08.02.2013
Сообщений: 598
25.02.2013, 21:08  [ТС] 5
C#
1
2
3
4
LeftClick(50, 100);
          Thread.Sleep(1000);
            LeftClick(1000, 50);
          Thread.Sleep(1000);
Я так сделал, но это останавливает все приложение целиком, то есть главную форму нельзя двигать во время паузы. Как сделать так, чтобы это действовало, только на таймер.

Вот код
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
 public partial class Form1 : Form
    {
        [DllImport("user32.dll")]
        static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);
        [Flags]
        public enum MouseEventFlags
        {
            LEFTDOWN = 0x00000002,
            LEFTUP = 0x00000004,
        }
        public Form1()
        {
 
            InitializeComponent();
 
        }
 
        public static void LeftClick(int x, int y)
        {
            Cursor.Position = new System.Drawing.Point(x, y);
            mouse_event((int)(MouseEventFlags.LEFTDOWN), 0, 0, 0, 0);
            mouse_event((int)(MouseEventFlags.LEFTUP), 0, 0, 0, 0);
           
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
 
 
            EasyTimer.Enabled = true;
        }
 
       
            private void EasyTimer_Tick(object sender, EventArgs e)
        {
            LeftClick(50, 100);
          Thread.Sleep(1000);
            LeftClick(1000, 50);
          Thread.Sleep(1000);
                    
        }
0
120 / 102 / 45
Регистрация: 08.02.2013
Сообщений: 598
25.02.2013, 21:26  [ТС] 7
Можно пример, а то мозг начинает плавиться?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.02.2013, 21:26

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Имитировать клик мышью по обьекту в окне сторонней программы
Есть программа-панель управления звуковой картой, с фиксированным размером окна, так вот если...

Ребят подскажите что можно дописать в главную таблицу по БД и как ее назвать
тема : информация об абонентах телефонной сети главная: абонент оператор тариф номер...

Подскажите, пожалуйста, как на Form загрузить картинку, т.е. щелкнуть по Form и на ней появилась картинка
Подскажите, пожалуйста, как на Form загрузить картинку, т.е. щелкнуть по Form и на ней появилась...

Как сделать чтобы кнопка в диалоговом окне не подсвечивалась до того, как на нее наведешь мышкой? (MFC)
Как сделать чтобы кнопка в диалоговом окне не подсвечивалась mfc до того, как на нее наведешь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.