私がやりたいのは、マウスを操作することです。それは私自身の目的のための単純なマクロになります。したがって、画面上の特定の位置にマウスを移動し、特定の間隔でクリックするようにクリックします。
以下に、アンマネージ関数を使用してマウスクリックをシミュレートするコードを示します。
_//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);
}
_
特定の時間マウスを押したままにするには、この関数を実行しているスレッドをSleep()
することができます。例えば:
_mouse_event(MOUSEEVENTF_LEFTDOWN, xpos, ypos, 0, 0);
System.Threading.Thread.Sleep(1000);
mouse_event(MOUSEEVENTF_LEFTUP, xpos, ypos, 0, 0);
_
上記のコードは、ユーザーがマウスボタンを離さない限り、マウスを1秒間押し続けます。 また、メインUIスレッドでこのコードを実行しないようにしてください。ハングする原因になります。
XY位置で移動できます。以下の例:
windows.Forms.Cursor.Position = New System.Drawing.Point(Button1.Location.X + Me.Location.X + 50, Button1.Location.Y + Me.Location.Y + 30)
クリックするには、次のコードを使用できます。
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
}