Программирование >>  Автоматически обновляемые приложения 

1 ... 82 83 84 [ 85 ] 86 87 88 ... 170


Как двигать указателем мыши программно?

Если мы знаем, как устанавливать указатель мыши в заданной позиции, то нам по плечу и более сложная задача. Например, если мы хотим заставить указатель мыши двигаться по замысловатой траектории, то можно воспользоваться свойством 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;



1 ... 82 83 84 [ 85 ] 86 87 88 ... 170

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика