c#mouse_event不会在某些应用程序上触发

时间:2018-02-08 00:16:47

标签: c# winapi

我正在创建一个控制台应用程序,它应该模拟某个应用程序内的点击。

我正在玩外部方法,现在我只想让程序每秒点击当前鼠标位置:

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教程

0 个答案:

没有答案