|
Программирование >> Автоматически обновляемые приложения
Как двигать указателем мыши программно? Если мы знаем, как устанавливать указатель мыши в заданной позиции, то нам по плечу и более сложная задача. Например, если мы хотим заставить указатель мыши двигаться по замысловатой траектории, то можно воспользоваться свойством PathData.Points. Данное свойство позволяет получить координаты всех точек, входящих в траекторию. Таким образом можно создать траекторию в виде окружности и заставить указатель крутиться вдоль этой фигуры. Листинг 8.9 показывает, как это реализовать. .....................* ........ 1..........щггшт / - п........................................................X............ Листинг 8.9. Управление курсором мыши программным способом using System.Drawing.Drawing2D; / <summary> / Метод, позволяющий перемещать указатель мыши / по заданной траектории (например, вдоль окружности) / </summary> / <param name= times >Koличecтвo повторов</рагат> public void MoveMouse(int times) GraphicsPath gp = new GraphicsPath() ; Размеры экрана Rectangle screensize = Screen.GetBounds(new Point(0, 0)); Выберем произвольный прямоугольник в области экрана Rectangle rect = new Rectangle((int)screensize.Width/2-100, (int)screensize.Height/2-100, 200, 200) ; Добавим в траекторию окружность gp.AddEllipse(rect) ; Разобьем окружность на серию линий др.Flatten(); цикл повторений движения указателя мыши for (int repeat = 0; repeat <= times - 1; repeat++) вьшодим в заголовке формы число витков ские) и Control.PointToScreen (преобразовывает клиентские координаты в экранные). Соответствующие методы существуют и для прямоугольника: Control.RectangleToClient И Control.RectangleToScreen. Чуть ранее Я показывал пример с использованием этих методов (см. листинги 8.4 и 8.5). I Листинг 8.10. Движение курсора вокруг формы public void MoveAroundForm () ( GraphicsPath gp = new GraphicsPath(); gp.AddLine(this.DesktopLocation.X + 2, this.DesktopLocation.Y + 2, this.DesktopLocation.X + this.Size.Width - 2, this.DesktopLocation.Y - 2); gp.AddLine(this.DesktopLocation.X + this.Size.Width - 2, this.DesktopLocation.Y - 2, this.DesktopLocation.X + this.Size.Width - 2, this.DesktopLocation.Y + this.Size.Height - 2); gp.AddLine(this.DesktopLocation.X + this.Size.Width - 2, this.DesktopLocation.Y + this.Size.Height - 2, this.DesktopLocation.X + 2, this.DesktopLocation.Y + this.Size.Height + 2); this.Text = (repeat+1).ToStringО; проходим через все точки траектории for(int i=0; i <= gp.PathData.Points.Length-1; i++) организуем небольшую задержку System.Threading.Thread.Sleep(10); перемеш;аем указатель мыши Cursor.Position = new Point((int)gp.PathData.Points[i].X, (int)gp.PathData.Points[i].Y); gp. Dispose 0 ; private void butStart Click(object sender, EventArgs e) { MoveMouse(5); Поступая аналогично, можно заставить курсор мыши обрисовать контуры формы. Подобные приемы управления курсором (листинг 8.10) могут пригодиться для создания презентаций. private void butShowBorderForm Click(object sender, EventArgs e) { MoveAroundForm (); Примечание Пример управления курсором мыши находится в папке MovingMouse на прилагаемом диске. Как выполнить эмуляцию щелчков мыши? Чтобы эмулировать щелчки мышью, можно воспользоваться функциями Windows API sendinput или mouseevent. В листинге 8.11 приводится пример перемещения мыши в нижний левый угол экрана и нажатия правой кнопки мыши, что вызовет открытие контекстного меню кнопки Пуск. ; Листинг 8.11/Эмуляция щелчков мыши using System.Runtime.InteropServices; [Dlllmport ( user32.dll ) ] static extern void mouse event(int dwFlags, int dx, int dy, int dwData, UlntPtr dwExtralnfo); gp.AddLine(this.DesktopLocation.X + 2, this.DesktopLocation.Y + this.Size.Height + 2, this.DesktopLocation.X + 2, this.DesktopLocation.Y +2); int i; for (i = 0; i <= gp.PathData.Points.Length - 1; i++) { System.Threading.Thread.Sleep(1000); Cursor.Position = new Point((int)gp.PathData.Points[i].X, (int)gp.PathData.Points[i].Y); gp.Dispose 0;
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |