C# 创建一个';幽灵鼠标&x27;模拟鼠标点击

C# 创建一个';幽灵鼠标&x27;模拟鼠标点击,c#,C#,我知道关于这个问题已经有一百万条线索了,但我花了无数个小时试图找到一个解决方案,我希望我能在这里找到它 我的目标是创建一个“幽灵鼠标”,这意味着我希望能够在最小化的窗口中模拟鼠标在特定位置上的点击,而无需移动我自己的光标或鼠标。我想能够浏览互联网和点击其他东西,而程序做自己的事情。这是许多游戏机器人都具备的功能,但我的目的不是创建一个机器人,而只是体验一下 到目前为止,我已经设法模拟鼠标点击,但与我的实际鼠标 [DllImport("user32.dll", CharSet = CharSet.

我知道关于这个问题已经有一百万条线索了,但我花了无数个小时试图找到一个解决方案,我希望我能在这里找到它

我的目标是创建一个“幽灵鼠标”,这意味着我希望能够在最小化的窗口中模拟鼠标在特定位置上的点击,而无需移动我自己的光标或鼠标。我想能够浏览互联网和点击其他东西,而程序做自己的事情。这是许多游戏机器人都具备的功能,但我的目的不是创建一个机器人,而只是体验一下

到目前为止,我已经设法模拟鼠标点击,但与我的实际鼠标

[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
        public static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);

 private const int MOUSEEVENTF_LEFTDOWN = 0x02;
        private const int MOUSEEVENTF_LEFTUP = 0x04;

public static void LeftClick()
        {
            int X = Cursor.Position.X;
            int Y = Cursor.Position.Y;

            mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
        }

 static void Main(string[] args)
        {

 System.Threading.Thread.Sleep(5000);
                Point pt = new Point(1259, 560);
                Cursor.Position = pt;
                LeftClick();

}

据我所知,调用鼠标事件不会在最小化的窗口中单击。
您必须为此使用SendMessage WinApi。
首先,使用OpenProcess或process.GetProcessByName(processName).First().MainWindowHandle获取进程的句柄,然后可以使用以下代码:

[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);

public const uint WM_LBUTTONDOWN = 0x0201;
public const uint WM_LBUTTONUP = 0x0202;

public static IntPtr makeLParam(int x, int y)
{
    return (IntPtr)((y << 16) | x);
}

public static void sendMouseClick(IntPtr handle, int x, int y)
{
    SendMessage(handle, WM_LBUTTONDOWN, (IntPtr)1, makeLParam(x, y));
    SendMessage(handle, WM_LBUTTONUP, (IntPtr)1, makeLParam(x, y));
}
[DllImport(“user32.dll”,CharSet=CharSet.Auto)]
公共静态外部IntPtr SendMessage(IntPtr hWnd、UInt32 Msg、IntPtr wParam、IntPtr lParam);
公共警察WM_LBUTTONDOWN=0x0201;
公共警察WM_LBUTTONUP=0x0202;
公共静态IntPtr makeLParam(intx,inty)
{

返回(IntPtr)((y)这些游戏机器人最有可能直接进入游戏。通过模拟鼠标单击来单击最小化窗口中的元素是不可能的。模拟鼠标单击指向屏幕上的某个位置,如果窗口最小化,您只需单击同一位置,但此时它将命中任何位置。如果您想“悄悄地”浏览网页,可能会查看无头浏览器。您可能希望使用Microsoft UI Automation。它不要求应用程序具有焦点。我没有尝试过最小化,但您可能希望尝试一下。