鼠标模拟在.exe窗口中

时间:2014-03-09 10:31:59

标签: c# c++

我想制作一个鼠标宏器。哪个都可以模拟鼠标事件,或者在屏幕上使用我的计算机自己的光标。

应通过在IDE中键入方法来创建宏。然后,这些方法将在某个.exe的窗口上执行鼠标事件。通过使用坐标。

例如,这是我在某个.exe窗口上执行模拟或非模拟鼠标左键单击的方法的目标:

Psuedo代码:

//Following method left clicks with the offset (x, y) 
//from the windows top left corner. If the bool isSimulated 
//is set to true the click will be simulated else the computers 
//own mouse cursor will be moved and execute the mouse event.

LeftMouseClickOnWindow(x, y, isSimulated);

为了更好地解决问题,模拟鼠标点击应该在窗口最小化或未聚焦时起作用。

我想知道创建这种工具的最佳方法是什么。

user32.dll的功能是一个好方法吗?

用C ++而不是C#更容易吗?

非常感谢任何建议,来源,示例代码和评论!

1 个答案:

答案 0 :(得分:2)

C ++和C#都很棒。 AutoHotKey可以胜任,但我喜欢你 - 我喜欢写自己的东西。另一个选项是AutoIt,你可以在你的C#项目中使用它的dll ......但是你必须确保它安装在每个系统上...而不是我遇到过的奢侈品常。

这里有一些可以玩的东西。希望它会让你去...注意它是C#。在运行此代码之前,请确保在鼠标所在的位置没有任何重要的打开...这将在对角线的右下方移动20次,并在每次移动时执行单击。你不希望这意外地关闭你的东西。所以,在运行之前,只需将其全部最小化。

using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace ConsoleApplication
{
    class Program
    {
        [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
        public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint 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 DoMouseStuff()
        {
            Cursor.Current = new Cursor(Cursor.Current.Handle);
            var point = new Point(Cursor.Position.X, Cursor.Position.Y);
            for (int i = 0; i < 20; i++, point.X += 10, point.Y += 10)
            {
                Cursor.Position = point;
                Program.mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, (uint)Cursor.Position.X, (uint)Cursor.Position.Y, 0, 0);
                System.Threading.Thread.Sleep(100);
            }
        }

        static void Main(string[] args)
        {
            var prog = new Program();
            prog.DoMouseStuff();
        }
    }
}

您需要为System.Windows.Forms&amp; System.Drawing,如果您还没有这些设置。我把它作为一个控制台应用程序,因此,需要为我设置。正如您所注意到的那样,我加入了System.Threading.Thread.Sleep(100); ...这样您就可以看到发生了什么。所以,我基本上放慢了整个过程。它移动并且每次移动时都会发出咔嗒声(大约每100毫秒一次)。

熟悉Cursoruser32.dll

最后,但并非最不重要的,这里有关于鼠标和电子邮件的MSDN文档。键盘模拟:http://msdn.microsoft.com/en-us/library/ms171548.aspx