我正在创建一个控制台应用程序,它应该模拟某个应用程序内的点击。
我正在玩外部方法,现在我只想让程序每秒点击当前鼠标位置:
public class Navigation
{
private const uint MOUSEEVENTF_MOVE = 0x0001;
private const uint MOUSEEVENTF_LEFTDOWN = 0x0002;
private const uint MOUSEEVENTF_LEFTUP = 0x0004;
private const uint MOUSEEVENTF_RIGHTDOWN = 0x0008;
private const uint MOUSEEVENTF_RIGHTUP = 0x0010;
private const uint MOUSEEVENTF_ABSOLUTE = 0x8000;
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
static extern bool SetCursorPos(uint x, uint y);
[DllImport("user32.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, UIntPtr dwExtraInfo);
private string processName;
public Navigation(string processName)
{
this.processName = processName;
}
public void test()
{
while (true)
{
//SetForegroundWindow(Process.GetProcessesByName(processName)[0].MainWindowHandle);
Thread.Sleep(1000);
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN, 0, 0, 0, UIntPtr.Zero);
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP, 0, 0, 0, UIntPtr.Zero);
}
}
}
当启动程序并运行test()方法时,鼠标确实每秒都会点击,我可以在屏幕上移动鼠标,它会点击所有内容,记事本,Spotify等...执行我的一个应用程序想要目标...
也就是说,当我将鼠标悬停在我要点击的特定应用程序上方时,没有任何反应。我读到了将目标进程放在前台,如果我这样做,应用程序将放在前台,但它仍然没有收到任何点击。
例如,如果我将鼠标悬停在应用程序内部的按钮上方,我想要定位我的程序不会单击它。将鼠标移回外部时,它会再次开始模拟点击。有什么想法吗?
编辑:我正在关注this教程