У меня этот код:Почему мой имитируемый щелчок мыши ничего не делает?
[DllImport("user32.dll")]
static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData, UIntPtr dwExtraInfo);
[Flags]
public enum MouseEventFlags
{
Move = 0x0001,
LeftDown = 0x0002,
LeftUp = 0x0004,
RightDown = 0x0008,
RightUp = 0x0010,
MiddleDown = 0x0020,
MiddleUp = 0x0040,
Absolute = 0x8000
}
public void SimMouseEvent(MouseEventFlags e, int x, int y)
{
mouse_event((uint)e, (uint)x, (uint)y, 0, UIntPtr.Zero);
}
public void SimLeftClick(int x, int y)
{
SimMouseEvent(MouseEventFlags.LeftUp | MouseEventFlags.RightUp, x, y);
}
Моя форма выглядит следующим образом:
При нажатии кнопки "Button" она работает следующим образом:
private void button3_Click(object sender, RoutedEventArgs e)
{
SimLeftClick(50, 50);
}
И мое окно У меня также есть это:
private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
MessageBox.Show("click");
}
Когда я нажимаю на окно, он говорит «нажмите», как ожидалось, но когда я нажимаю «Button», он ничего не делает.
Являются ли координаты абсолютными или относительными? Как насчет нескольких мониторов? Они работают только с ориентированным приложением?
Я бы ожидал, что 50,50, чтобы либо попасть в мое окно, либо пропустить обработчик «щелчок», либо нажать на какое-то случайное окно, потому что оно полностью упустило мое приложение и сосредоточилось на этом ... почему ничего не происходит?
Я смотрел на это, но не мог понять это. Я думаю, что у меня было это как LeftDown | LeftUp, но затем перепутал его где-то вдоль линии. Кажется, сейчас работает. Благодаря! – mpen
Справедливости ради, документация ужасно ужасна; он не говорит, что требуется «MOUSEEVENTF_MOVE». –
@Ian: «Если мышь перемещена, указанная« MOUSEEVENTF_MOVE »установлена, *' dx' * и * 'dy' * содержат информацию об этом движении." –