我正在使用C#,Framework 4(32位)的Windows窗体应用程序。
我有一个包含鼠标坐标的列表,我可以捕获它们。到目前为止一切都很好。
但是在某些时候,我想去那些坐标并点击鼠标左键。
这就是现在的样子:
for (int i = 0; i < coordsX.Count; i++)
{
Cursor.Position = new Point(coordsX[i], coordsY[i]);
Application.DoEvents();
Clicking.SendClick();
}
点击课程:
class Clicking
{
private const UInt32 MOUSEEVENTF_LEFTDOWN = 0x0002;
private const UInt32 MOUSEEVENTF_LEFTUP = 0x0004;
private static extern void mouse_event(
UInt32 dwFlags, // motion and click options
UInt32 dx, // horizontal position or change
UInt32 dy, // vertical position or change
UInt32 dwData, // wheel movement
IntPtr dwExtraInfo // application-defined information
);
// public static void SendClick(Point location)
public static void SendClick()
{
// Cursor.Position = location;
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, new System.IntPtr());
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, new System.IntPtr());
}
}
但是我收到了这个错误:
Could not load type 'program.Clicking' from assembly 'program, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because the method 'mouse_event' has no implementation (no RVA).
我真的不明白问题是什么......你们知道问题是什么吗?或者你知道一个更好的方法去做我想做的事吗?
答案 0 :(得分:8)
您是否包含以下内容?
[DllImport("user32.dll")]
static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData,
UIntPtr dwExtraInfo);
这将从mouse_event
dll导入函数user32
,这是您尝试在程序中使用的函数。目前你的程序在DLL中不知道这个方法,直到你指定它来自。
网站PInvoke.net user32 Mouse Event对于此类事情的基础非常方便。
Directing mouse events [DllImport(“user32.dll”)] click, double click的答案对你的理解也有很大的帮助。
flags
是您要发送到mouse_input
函数的命令,在该示例中,您可以看到他同时发送mouse down
和mouse up
line,这很好,因为mouse_event
函数会将这些标志分开并连续执行它们。
另请注意,此方法已被SendInput
命令取代,可以找到SendInput
和SetMousePos
的一个很好的示例At this Blog
答案 1 :(得分:1)
我猜你错过了以下一行
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]