2016-08-23 6 views
0

Как я уже сказал в заголовке, мне нужно переместить/пожать курсор на выбранный элемент управления (положение управления).Переместить курсор над выбранным управлением (положение x, y)

Это, как я это сделал, прежде чем что я получаю позицию управления (кнопки под названием btnMinimize является контролем я говорю), что я хочу, чтобы поместить мой курсор. Это, как я получаю X и Y положения:

relativePoint = this.btnMinimize.TransformToAncestor(this).Transform(new Point(0, 0)); 

LeftMouseClick(relativePoint.X, relativePoint.Y); 

Вот определение метода LeftMouseClick:

[System.Runtime.InteropServices.DllImport("user32.dll")] 
static extern bool SetCursorPos(int x, int y); 

public static void LeftMouseClick(int xpos, int ypos) 
{ 
     SetCursorPos(xpos, ypos); 
     // mouse_event(MOUSEEVENTF_LEFTDOWN, xpos, ypos, 0,0); 
     // mouse_event(MOUSEEVENTF_LEFTUP, xpos, ypos, 0, 0); 

} 

Теперь, что я хочу сделать после того, как я расположил мой курсор выбранного элемента управления является переместите эту мышь на 1 пиксель влево или вправо, как кто-то косвенно коснулся мыши и переместил его, потому что на этом пути, как и я, я не вижу, как мой курсор позиционируется (даже если он есть) над выбранным элементом управления, пока я действительно не двигаю мышью. .

ЗДЕСЬ ДВА ИЗОБРАЖЕНИЯ:

первый один, когда я бег приложение:

enter image description here Я помеченный желтой окнеМа btnMinize и как вы можете видеть, приложение запущенно, но курсор не отображается там ...

И вот еще одно изображение, когда я прикасаюсь MY MOUSE PHYSYCALI

enter image description here

КАК ВЫ МОЖЕТЕ УВИДЕТЬ НА ВТОРОЕ IMAGE MOUSE Курсор отображается ЕГО НЕ HIDDEN ANYMORE, потому что я коснулся мыши, подключенных к компьютеру, так как я могу имитировать реальный ход или что-то еще, чтобы показать мой курсор над моим управлением и немного переместить его влево или вправо или что-то еще, я просто хочу его переместить над btnMinimize, чтобы сделать его видимым.

Спасибо, ребята, CHEERS

ответ

0

после двух дней изо всех сил, я нашел решение этой проблемы, и потому, что никто не писал какой-либо из ответов, которые я думаю, что это нормально, чтобы ответить на мой собственный вопрос, а не удалять его, потому что я вы нашли ответ.

Вот как я решил эту проблему:

System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer(); 

public void LeftMouseClick(int xpos, int ypos) 
{ 
     SetCursorPos(xpos, ypos); 

     mouse_event(MOUSEEVENTF_LEFTDOWN, xpos, ypos, 0,0); 
     mouse_event(MOUSEEVENTF_LEFTUP, xpos, ypos, 0, 0); 
     mouse_event(MOUSEEVENTF_MOVE, xpos+5, ypos+5, 0, 0); 

     timer.Interval = 1000; // here time in milliseconds 
     timer.Tick += timer_Tick; 
     timer.Start(); 

} 

void timer_Tick(object sender, System.EventArgs e) 
{ 
     SetCursorPos(1500, 28); 
     timer.Stop(); 
} 

Как вы можете видеть, ребята, я добавил несколько новых строк кода: mouse_event(MOUSEEVENTF_MOVE, xpos+5, ypos+5, 0, 0); // Я использовал эту строку, чтобы переместить курсор на 5 пикселей по х и у, только чтобы зарегистрировать некоторое движение, и после этого я сделал следующий, я использовал таймер для перемещения курсора в определенную позицию на экране через 1 секунду, и похоже, что это был ответ, который я искал, потому что после 1 секунды курсор позиционируется и показан на новом месте: SetCursorPos(1500, 28); и это то, что я искал.

Спасибо всем, ребята, Cheers