我没有';当使用虚拟鼠标点击时,无法理解此错误的含义
本文关键字:错误 鼠标 虚拟 | 更新日期: 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签名无效。
dwFlags
、dx
、dy
和dwData
的类型记录为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);