Windows 模拟单击而不单击

Windows 模拟单击而不单击,windows,winapi,click,mouse,Windows,Winapi,Click,Mouse,是否可以在不实际单击流程的情况下模拟流程上的单击 e、 g.我想在运行的计算器上单击,鼠标静止不动。这可能吗 如果您只是试图在一个相当典型的标签、字段和按钮应用程序中单击一个按钮,您可以使用一点p/Invoke来使用FindWindow和SendMessage 如果您还不熟悉Spy++,现在是开始的时候了 它与Visual Studio 2012 RC打包在:C:\Program Files\Microsoft Visual Studio 11.0\Common7\Tools。对于其他版本也应该

是否可以在不实际单击流程的情况下模拟流程上的
单击


e、 g.我想
在运行的计算器上单击
,鼠标静止不动。这可能吗

如果您只是试图在一个相当典型的标签、字段和按钮应用程序中单击一个按钮,您可以使用一点p/Invoke来使用
FindWindow
SendMessage

如果您还不熟悉Spy++,现在是开始的时候了

它与Visual Studio 2012 RC打包在:
C:\Program Files\Microsoft Visual Studio 11.0\Common7\Tools
。对于其他版本也应该类似地找到它

作为控制台C#应用程序尝试以下操作:

class Program
{
    [DllImport("user32.dll", SetLastError = true)]
    static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

    [DllImport("user32.dll")]
    static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

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

    private const uint BM_CLICK = 0x00F5;

    static void Main(string[] args)
    {
        // Get the handle of the window
        var windowHandle = FindWindow((string)null, "Form1");

        // Get button handle
        var buttonHandle = FindWindowEx(windowHandle, IntPtr.Zero, (string)null, "A Huge Button");

        // Send click to the button
        SendMessage(buttonHandle, BM_CLICK, 0, 0); 
    }
}
这将获取标题为“Form1”的窗口的句柄。使用该句柄,它将获得窗口中按钮的句柄。然后向按钮控件发送“BM_CLICK”类型的消息,该消息没有有用的参数

我使用了一个测试WinForms应用程序作为我的目标。一个按钮和一些代码可以增加计数器

在运行p/Invoke控制台应用程序时,应该会看到计数器增量。但是,您不会看到按钮动画

您还可以使用Spy++消息记录器功能。我建议使用一个过滤器来进行BM_CLICK,也可能是WM_LBUTTONDOWN/WM_LBUTTONUP(手动单击会给您带来什么)


希望有帮助

你想用什么语言来做这件事?您标记的WiAPI和C、C++、C都是有效的候选对象。还有,你想点击什么?按钮?一个特定的坐标?没关系。其中任何一个都可以:但是我更喜欢C,C++和Python。这就是他们的目的。