我查了很多资料,由于自己水平有限,总没有找到控制鼠标的好方法。
哪位能帮我示范一个例子,控制鼠标在屏幕上的位置,并在我需要的地方单击或双击或右击。
我知道这个问题应该不难,但是很多的资料都不介绍这个,只好到这里来寻求帮助了。

解决方案 »

  1.   

    API函数知道吗?
    知道在C#下怎么用吗?这些资料网上有的吧?
    以下是两个鼠标API函数的VB声明,希望你写成C#格式再使用:SetCursorPos VB声明 
    Declare Function SetCursorPos Lib "user32" Alias "SetCursorPos" (ByVal x As Long, ByVal y As Long) As Long 
    说明 
    设置指针的位置 
    返回值 
    Long,非零表示成功,零表示失败。会设置GetLastError 
    参数表 
    参数 类型及说明 
    x,y 鼠标指针在屏幕像素坐标系统中的X,Y位置 mouse_event VB声明 
    Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long) 
    说明 
    模拟一次鼠标事件 
    参数表 
    参数 类型及说明 
    dwFlags Long,下述标志的一个组合 
    MOUSEEVENTF_ABSOLUTE dx和dy指定鼠标坐标系统中的一个绝对位置。在鼠标坐标系统中,屏幕在水平和垂直方向上均匀分割成65535×65535个单元 
    MOUSEEVENTF_MOVE 移动鼠标 
    MOUSEEVENTF_LEFTDOWN 模拟鼠标左键按下 
    MOUSEEVENTF_LEFTUP 模拟鼠标左键抬起 
    MOUSEEVENTF_RIGHTDOWN 模拟鼠标右键按下 
    MOUSEEVENTF_RIGHTUP 模拟鼠标右键按下 
    MOUSEEVENTF_MIDDLEDOWN 模拟鼠标中键按下 
    MOUSEEVENTF_MIDDLEUP 模拟鼠标中键按下 
    dx Long,根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定水平方向的绝对位置或相对运动 
    dy Long,根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定垂直方向的绝对位置或相对运动 
    cButtons Long,未使用 
    dwExtraInfo Long,通常未用的一个值。用GetMessageExtraInfo函数可取得这个值。可用的值取决于特定的驱动程序 
    注解 
    进行相对运动的时候,由SystemParametersInfo函数规定的系统鼠标轨迹速度会应用于鼠标运行的速度
     
      

  2.   

    谢谢大家的关心。我是初学者,还请大家原谅我提这么初级的问题。
    我回去看了一下winAPI的相关书籍,再结合楼上的解答,做了一下。现在还有两个问题,请高手不吝赐教:
    1. 这个mouse_event函数的第一个参数如何赋值?
       我是这么做的,kk.mouse_event(MOOSEEVENTFMOVE,35536,35536,0,0),其中kk是我c#中的自定义类,里面是对user32.dll中mouse_event函数的引用。可是总是编译不过去。我把第一个参数赋一个具体的值,比如100,编译和运行没有问题,但结果不可预料阿,有一次运行以后把我的鼠标左键变成了右键。所以恳请专家再帮帮我,这第一个参数怎么赋值。
    2. .net环境下应该也有类似的模拟鼠标动作的函数,只是本人水平有限,还请高手赐告。
    谢谢了!
      

  3.   

    private void Form1_Load(object sender, System.EventArgs e)
    {
    this.Cursor = new Cursor(Cursor.Current.Handle);
    Cursor.Position = new Point(1024, 768);
    }
    这样鼠标就会在右下角出现了,具体可以查Cursor类
      

  4.   

    MOUSEEVENTF_MOVE 移动鼠标 
    MOUSEEVENTF_LEFTDOWN 模拟鼠标左键按下 
    MOUSEEVENTF_LEFTUP 模拟鼠标左键抬起 
    MOUSEEVENTF_RIGHTDOWN 模拟鼠标右键按下 
    MOUSEEVENTF_RIGHTUP 模拟鼠标右键按下 
    MOUSEEVENTF_MIDDLEDOWN 模拟鼠标中键按下 
    MOUSEEVENTF_MIDDLEUP 模拟鼠标中键按下 
    dx Long,根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定水平方向的绝对位置或相对运动 
    dy Long,根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定垂直方向的绝对位置或相对运动 
    cButtons Long,未使用 
    dwExtraInfo Long,通常未用的一个值。用GetMessageExtraInfo函数可取得这个值。可用的值取决于特定的驱动程序 
      

  5.   

    用C#重写过的#region Windows Api 定义 /// 
    /// 模拟鼠标事件
    /// 
    /// 鼠标事件的Enum
    /// X座标
    /// Y座标
    /// 
    /// 
    [DllImport("user32.dll")]
    public static extern void mouse_event (MouseEvents dwFlags,long dx, long dy,long cButtons,long dwExtraInfo); /// 
    /// 定义模拟鼠标的常数
    /// 
    public enum MouseEvents:uint
    {
    MOUSEEVENTF_LEFTDOWN = 0x2,
    MOUSEEVENTF_LEFTUP = 0x4,
    MOUSEEVENTF_MIDDLEDOWN = 0x20,
    MOUSEEVENTF_MIDDLEUP = 0x40,
    MOUSEEVENTF_MOVE = 0x1,
    MOUSEEVENTF_ABSOLUTE = 0x8000,
    MOUSEEVENTF_RIGHTDOWN = 0x8,
    MOUSEEVENTF_RIGHTUP = 0x10,
    } /// 
    /// 按指定标题寻找窗口,以获得指定窗口的句柄,为空则返回零。
    /// 
    /// 如未知则设置为NULL
    /// 窗口名
    /// 整型数据,代表窗口句柄
    [DllImport("user32.dll")]
    public static extern int FindWindow(String lpClassName,String lpWindowName); /// 
    /// 根据窗口句柄,获得窗口的类名
    /// 
    /// 窗口句柄
    /// 缓冲区
    /// 最大字节数
    /// 整型,代表类名
    [DllImport("user32.dll")]
    public static extern int GetClassName(int hwnd,System.Text.StringBuilder buf, int nMaxCount); /// 
    /// 根据窗口句柄,获得指定窗口的标题。
    /// 
    /// 窗口句柄
    /// 缓冲区
    /// 最大字节数
    /// 返回标题
    [DllImport("user32.dll")]
    public static extern int GetWindowText(int hwnd,System.Text.StringBuilder buf, int nMaxCount); /// 
    /// 根据窗口句柄,设置指定窗口为前置窗口。
    /// 
    /// 窗口句柄
    [DllImport("user32.dll")]
    public static extern void SetForegroundWindow(int hwnd);
      
    /// 
    /// 根据窗口句柄和显示的样式,显示窗口。
    /// 
    /// 窗口句柄
    /// 显示窗口的样式。
    /// 成功与否。
    [DllImport("user32.dll")]
    public static extern bool ShowWindow(int hWnd, nCmdShow nCmdShow);
    public enum nCmdShow:uint
    {
    SW_FORCEMINIMIZE=0x0,
    SW_HIDE=0x1,
    SW_MAXIMIZE=0x2,
    SW_MINIMIZE=0x3,
    SW_RESTORE=0x4,
    SW_SHOW=0x5,
    SW_SHOWDEFAULT=0x6,
    SW_SHOWMAXIMIZED=0x7,
    SW_SHOWMINIMIZED=0x8,
    SW_SHOWMINNOACTIVE=0x9,
    SW_SHOWNA=0xA,
    SW_SHOWNOACTIVATE=0xB,
    SW_SHOWNORMAL=0xC,
    } /// 
    /// 捕捉当前鼠标位置
    /// 
    /// 传入参数,代表鼠标的当前位置
    /// 
    [DllImport("user32.dll")]
    public static extern long GetCursorPos (ref System.Drawing.Point lpPoint);
    #endregion 
      

  6.   

    这次粘过去直接就可以用了。
    1. 这个mouse_event函数的第一个参数如何赋值?
    这个问题是因为你没有重写那个enum类型
      

  7.   

    分数不少了,我按照上面的搞了一下,怎么搞都只能控制它在y方向上动,无论如何x方向就是不动。我是这么写的:
    先写一个类: public class Class1
    {
    [DllImport("user32.dll", CharSet=CharSet.Auto)]
    public static extern int mouse_event(long dwFlags,long dx,long dy,long dwData,long dwExtralnfo);
    }
    然后在页面模块里这么引用: private void button1_Click(object sender, System.EventArgs e)
    {
    Class1.mouse_event(1,50,80,0,0);
    }当然我是把第一个参数16进制的1换成了10进制的1直接赋值,这样应该也是可以的。但是鼠标只在y方向移动50(不是80),怎么也控制不到x方向。
    请高手再解惑。