我没有';当使用虚拟鼠标点击时,无法理解此错误的含义

本文关键字:错误 鼠标 虚拟 | 更新日期: 2023-09-27 18:20:22

我正在努力让鼠标点击当前的鼠标位置。使用此网站的代码时。

我收到一个错误:

调用PInvoke函数"Program!Program.Program::mouse_event'具有使堆栈不平衡。这可能是因为托管PInvoke签名与非托管目标签名不匹配。检查一下PInvoke签名匹配的调用约定和参数目标非托管签名。at line: 鼠标事件(MOUSEEVENTF_LEFTDOWN|MOUSEEVENTF_LEFTUP,X,Y,0,0);。

我不明白这个问题是什么原因?我该怎么解决这个问题?

我的代码:

[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
        public static extern void mouse_event(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo);
private const int MOUSEEVENTF_LEFTDOWN = 0x02;
private const int MOUSEEVENTF_LEFTUP = 0x04;
private const int MOUSEEVENTF_RIGHTDOWN = 0x08;
private const int MOUSEEVENTF_RIGHTUP = 0x10;
public void DoMouseClick()
{
    //Call the imported function with the cursor's current position
    int X = Cursor.Position.X;
    int Y = Cursor.Position.Y;
    mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
}
private void tmrClickInterval_Tick(object sender, EventArgs e)
{
    DoMouseClick();
}

我没有';当使用虚拟鼠标点击时,无法理解此错误的含义

您的DllImport签名无效。

dwFlagsdxdydwData的类型记录为DWORD,这是一个32位无符号整数。在C#中,long表示一个64位有符号整数。因此,您应该使用uint,它表示一个32位无符号整数。

最后一个参数dwExtraInfo是类型为ULONG_PTR(指向无符号32位整数的指针)的,它对应于C#中的UIntPtr

试试这个:

[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
        public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData, UIntPtr dwExtraInfo);