14

我正在使用 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();
}

和 Clicking 类:

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).

我真的不明白问题是什么......你们知道问题是什么吗?或者你知道更好的方法来做我想做的事吗?

4

2 回答 2

11

您是否包含以下行?

[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 upmouse_event


另请注意,此方法已被SendInput命令取代,这是一个很好的示例,SendInput可以SetMousePos此博客中找到

于 2012-11-22T22:22:50.687 回答
2

我猜你错过了以下行

[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
于 2012-11-22T22:22:49.570 回答