@@ -97,6 +97,7 @@ private static MouseInput GetAbsoluteMouseInput(int x, int y)
97
97
input . dx = x ;
98
98
input . dy = y ;
99
99
input . dwFlags = ( int ) MouseFlags . MOUSEEVENTF_MOVE_NOCOALESCE ;
100
+ input . mouseData = 0 ;
100
101
input . time = 0 ;
101
102
return input ;
102
103
}
@@ -105,19 +106,27 @@ private static MouseInput GetVirtualMouseInput(int x, int y)
105
106
{
106
107
MouseInput input = new MouseInput ( ) ;
107
108
input . type = ( int ) ( InputType . INPUT_MOUSE ) ;
108
- input . dx = ( x * 65536 ) / GetSystemMetrics ( SM_CXSCREEN ) ; ;
109
- input . dy = ( y * 65536 ) / GetSystemMetrics ( SM_CYSCREEN ) ; ;
109
+ input . dx = ( x * 65536 ) / GetSystemMetrics ( SM_CXSCREEN ) ;
110
+ input . dy = ( y * 65536 ) / GetSystemMetrics ( SM_CYSCREEN ) ;
110
111
input . dwFlags = ( int ) ( MouseFlags . MOUSEEVENTF_MOVE_NOCOALESCE | MouseFlags . MOUSEEVENTF_VIRTUALDESK ) ;
112
+ input . mouseData = 0 ;
111
113
input . time = 0 ;
112
114
return input ;
113
115
}
114
116
115
- public static void MouseMoveTo ( int x , int y , MouseButtons buttons )
117
+ public static void MouseMoveTo ( int x , int y , MouseButtons buttons , bool buttonUp = false )
116
118
{
117
119
MouseInput input = GetVirtualMouseInput ( x , y ) ;
118
120
MouseFlags flags = ( MouseFlags ) input . dwFlags ;
119
121
flags |= MouseFlags . MOUSEEVENTF_MOVE | MouseFlags . MOUSEEVENTF_ABSOLUTE ;
120
- flags = AddMouseDownFlags ( flags , buttons ) ;
122
+ if ( buttonUp )
123
+ {
124
+ flags = AddMouseUpFlags ( flags , buttons ) ;
125
+ }
126
+ else
127
+ {
128
+ flags = AddMouseDownFlags ( flags , buttons ) ;
129
+ }
121
130
input . dwFlags = ( int ) flags ;
122
131
SendInput ( input ) ;
123
132
Application . DoEvents ( ) ;
@@ -132,8 +141,9 @@ public static void MouseDragDrop(Point start, Point end, int step, MouseButtons
132
141
MouseDown ( start , buttons ) ;
133
142
Application . DoEvents ( ) ;
134
143
Thread . Sleep ( DragDelayDrop ) ;
135
- MouseDragTo ( start , end , step , buttons ) ;
144
+ MouseDragTo ( start , end , step , buttons , true ) ;
136
145
Thread . Sleep ( DragDelayDrop ) ;
146
+ MouseDragTo ( end , end , step , buttons , true ) ;
137
147
MouseUp ( end , buttons ) ;
138
148
Application . DoEvents ( ) ;
139
149
Thread . Sleep ( DragDelayDrop ) ;
@@ -145,7 +155,7 @@ public static void MouseMoveTo(Point start, Point end, int step)
145
155
MouseDragTo ( start , end , step , MouseButtons . None ) ;
146
156
}
147
157
148
- public static void MouseDragTo ( Point start , Point end , int step , MouseButtons buttons )
158
+ public static void MouseDragTo ( Point start , Point end , int step , MouseButtons buttons , bool finishWithButtonUp = false )
149
159
{
150
160
// Interpolate and move mouse smoothly over to given location.
151
161
double dx = end . X - start . X ;
@@ -157,9 +167,11 @@ public static void MouseDragTo(Point start, Point end, int step, MouseButtons bu
157
167
int tx = start . X + ( int ) ( ( dx * i ) / length ) ;
158
168
int ty = start . Y + ( int ) ( ( dy * i ) / length ) ;
159
169
MouseMoveTo ( tx , ty , buttons ) ;
170
+ Thread . Sleep ( 1 ) ;
171
+ Application . DoEvents ( ) ;
160
172
}
161
173
162
- MouseMoveTo ( end . X , end . Y , buttons ) ;
174
+ MouseMoveTo ( end . X , end . Y , buttons , finishWithButtonUp ) ;
163
175
}
164
176
165
177
public static void MouseWheel ( AutomationWrapper w , int clicks )
0 commit comments