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。这就是他们的目的。