Co chcę zrobić, to manipulować myszą. Będzie to proste makro dla moich własnych celów. Więc przesunie moją mysz do określonej pozycji na ekranie i kliknie, jakbym kliknął z pewną przerwą.Jak mogę zasymulować kliknięcie myszą w określonej pozycji na ekranie?
Odpowiedz
Oto kod, który używa funkcji niezarządzanych symulować kliknięcia myszką:
//This is a replacement for Cursor.Position in WinForms
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern bool SetCursorPos(int x, int y);
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);
public const int MOUSEEVENTF_LEFTDOWN = 0x02;
public const int MOUSEEVENTF_LEFTUP = 0x04;
//This simulates a left mouse click
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);
}
Aby przytrzymać mysz przez określony czas, można Sleep()
wątek, który wykonuje tę funkcję, na przykład:
mouse_event(MOUSEEVENTF_LEFTDOWN, xpos, ypos, 0, 0);
System.Threading.Thread.Sleep(1000);
mouse_event(MOUSEEVENTF_LEFTUP, xpos, ypos, 0, 0);
Powyższy kod będzie utrzymywać myszy wciśnięty przez 1 sekundę, chyba że użytkownik naciśnie zwolni przycisk myszy. Upewnij się również, że nie wykonasz tego kodu w głównym wątku UI, ponieważ spowoduje on zawieszenie się.
To jest FAR prostsze niż inne rozwiązania, które widziałem tutaj. Dzięki – Yablargo
Ten kod działa dobrze, aby doprowadzić wskaźnik do pożądanych współrzędnych na ekranie, ale z jakiegoś powodu kliknięcie nie działa dla mnie. Każdy pomysł, dlaczego? – john
Tutaj możesz mieć kody dla innych przycisków myszy: https://msdn.microsoft.com/en-us/library/windows/desktop/ms646260(v=vs.85).aspx – Li3ro
Możesz poruszać się w pozycji XY. Przykład poniżej:
windows.Forms.Cursor.Position = New System.Drawing.Point(Button1.Location.X + Me.Location.X + 50, Button1.Location.Y + Me.Location.Y + 30)
Aby kliknąć, można użyć poniższy kod:
using System.Runtime.InteropServices;
private const UInt32 MOUSEEVENTF_LEFTDOWN = 0x0002;
private const UInt32 MOUSEEVENTF_LEFTUP = 0x0004;
[DllImport("user32.dll")]
private static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData, uint dwExtraInf);
private void btnSet_Click(object sender, EventArgs e)
{
int x = Convert.ToInt16(txtX.Text);//set x position
int y = Convert.ToInt16(txtY.Text);//set y position
Cursor.Position = new Point(x, y);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);//make left button down
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);//make left button up
}
kredytowej do JOHNYKUTTY
Pytanie dotyczy WPF, nie formularzy. – Vlad
nie działa: windows.Forms.Cursor.Position = New System.Drawing.Point (Button1.Location.X + Me.Location.X + 50, Button1.Location.Y + Me.Location.Y + 30). również próbowałem tego w formularzach, o których nie wspomnę, nie zadziała w wpf – MonsterMMORPG
Would [this] (http://stackoverflow.com/questions/8242409/simulate-mouse-clicks-at-a-ertain-position-on-inactive-window-in-c-sharp/8242484#8242484) być tym, czego potrzebujesz? Ponadto, jak ktoś zasugerował w komentarzach, możesz chcieć użyć UIAutomation. – Nasreddine
dzięki pracy :) – MonsterMMORPG
w porządku niezbyt dobrze działa. jak mogę ustawić czas trwania kliknięcia. jak 100 ms naciskaj mysz – MonsterMMORPG