如何在C#中模拟鼠标点击?(我一直收到错误)

Vas*_*asu 4 c#

好吧,好吧,这就是事情.我使用了这个精彩的网站,找到了一个代码片段,帮助我创建了一个基本的点击脚本.问题是我在调试时遇到错误 - 指向我的鼠标点击线.下面,我在代码标签中添加了错误.

PInvokeStackImbalance was detected
Message: A call to PInvoke function 'MagicMouse!MagicMouse.Form1::mouse_event' has unbalanced the stack. This is likely because the managed PInvoke signature does not match the unmanaged target signature. Check that the calling convention and parameters of the PInvoke signature match the target unmanaged signature.
Run Code Online (Sandbox Code Playgroud)

我尽了最大的努力,并经历了几次谷歌搜索..但我找不到任何东西,也许我只是做错了.无论哪种方式,如果你们能帮助我,我会很高兴.以下是我的实际代码.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Runtime.InteropServices;

namespace MagicMouse
{
    public partial class Form1 : Form
    {
        //all this stuff has to do with being able to actually click a mouse
        [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;

        //this function will click the mouse using the parameters assigned to it
        public void DoMouseClickLeft()
        {
            //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);
        }

        public void NumberCheck(string ValidateNum)
        {
            long CanConvertOut = 0;
            bool CanConvertBool = long.TryParse(ValidateNum, out CanConvertOut);
            if (CanConvertBool == false)
            {
                MessageBox.Show("Please enter a valid number");
                return;
            }
        }

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        //button 1 is start alching
        private void button1_Click(object sender, EventArgs e)
        {
            //this section sends data to the number validation function
            string ValidateNum = NumberOfItems.Text;
            NumberCheck(ValidateNum);
            int Alchs = Convert.ToInt16(NumberOfItems.Text);

            for (int i = 1; i < Alchs; i++)
            {
                DoMouseClickLeft();
            }
        }

        //button 2 is exit
        private void button2_Click(object sender, EventArgs e)
        {
            Application.Exit();

        }


    }
}
Run Code Online (Sandbox Code Playgroud)

Yah*_*hia 6

这正是错误消息所说的 - 将DllImport声明更改为:

[DllImport("user32.dll")]
static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData,
   UIntPtr dwExtraInfo);
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅http://pinvoke.net/default.aspx/user32.mouse_event

但由于mouse_event已弃用,请考虑使用SendInput.

看到: