是否可以Click
在不实际单击的情况下模拟一个过程?
例如,我想Click
在鼠标静止的情况下运行计算器。这可能吗?
如果您只是想在一个相当典型的标签、字段和按钮应用程序中单击一个按钮,您可以使用一点 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”的窗口的句柄。使用该句柄,它可以获取 Window 中 Button 的句柄。然后向按钮控件发送一条没有有用参数的“BM_CLICK”类型的消息。
我使用了一个测试 WinForms 应用程序作为我的目标。一个按钮和一些后面的代码来增加一个计数器。
当您运行 P/Invoke 控制台应用程序时,您应该会看到计数器增量。但是,您不会看到按钮动画。
您还可以使用 Spy++ 消息记录器功能。我向 BM_CLICK 和 WM_LBUTTONDOWN/WM_LBUTTONUP 推荐一个过滤器(手动点击会给你什么)。
希望有帮助!