标题:关于mouse_event的问题
取消只看楼主
slb00814
Rank: 2
来 自:黑龙江
等 级:论坛游民
帖 子:41
专家分:47
注 册:2008-11-2
结帖率:100%
已结贴  问题点数:20 回复次数:5 
关于mouse_event的问题
想调用windows api中的mouse_event函数,原型如下:
VOID mouse_event(
  DWORD dwFlags, // motion and click options
  DWORD dx, // horizontal position or change
  DWORD dy, // vertical position or change
  DWORD dwData, // wheel movement
  ULONG_PTR dwExtraInfo // application-defined information
  );
其中,第一个参数的值如下
    MOUSEEVENTF_MOVE:表明发生移动。
  MOUSEEVENTF_LEFTDOWN:表明接按下鼠标左键。
  MOUSEEVENTF_LEFTUP:表明松开鼠标左键。
  MOUSEEVENTF_RIGHTDOWN:表明按下鼠标右键。
  MOUSEEVENTF_RIGHTUP:表明松开鼠标右键。
  MOUSEEVENTF_MIDDLEDOWN:表明按下鼠标中键。
  MOUSEEVENTF_MIDDLEUP:表明松开鼠标中键。
  MOUSEEVENTF_WHEEL:在Windows NT中如果鼠标有一个轮,表明鼠标轮被移动。移动的数量由dwData给出。

请问怎么把这个函数用C#的方式表现出来?
搜索更多相关主题的帖子: event mouse 
2010-04-29 16:46
slb00814
Rank: 2
来 自:黑龙江
等 级:论坛游民
帖 子:41
专家分:47
注 册:2008-11-2
得分:0 
回复 2楼 athenalux
    MOUSEEVENTF_MOVE:表明发生移动。
  MOUSEEVENTF_LEFTDOWN:表明接按下鼠标左键。
  MOUSEEVENTF_LEFTUP:表明松开鼠标左键。
  MOUSEEVENTF_RIGHTDOWN:表明按下鼠标右键。
  MOUSEEVENTF_RIGHTUP:表明松开鼠标右键。
  MOUSEEVENTF_MIDDLEDOWN:表明按下鼠标中键。
  MOUSEEVENTF_MIDDLEUP:表明松开鼠标中键。
  MOUSEEVENTF_WHEEL:在Windows NT中如果鼠标有一个轮,表明鼠标轮被移动。移动的数量由dwData给出。


这些值怎么转换成int类型呢?也就是说第一个参数应该传什么进去呢?

[ 本帖最后由 slb00814 于 2010-4-29 17:29 编辑 ]

曾经沧海,除却巫山。
2010-04-29 17:28
slb00814
Rank: 2
来 自:黑龙江
等 级:论坛游民
帖 子:41
专家分:47
注 册:2008-11-2
得分:0 
回复 4楼 封闭
using System;
using System.Collections.Generic;
using
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        
        enum dwFlags
        {
            MOUSEEVENTF_MOVE,//表明发生移动。
            MOUSEEVENTF_LEFTDOWN,//表明接按下鼠标左键。
            MOUSEEVENTF_LEFTUP,//表明松开鼠标左键。
            MOUSEEVENTF_RIGHTDOWN,//:表明按下鼠标右键。
            MOUSEEVENTF_RIGHTUP,//:表明松开鼠标右键。
            MOUSEEVENTF_MIDDLEDOWN,//:表明按下鼠标中键。
            MOUSEEVENTF_MIDDLEUP,//:表明松开鼠标中键。
            MOUSEEVENTF_WHEEL//:在Windows NT中如果鼠标有一个轮,表明鼠标轮被移动。移动的数量由dwData给出。
        }
        Point p = new Point();
        [DllImport("user32.dll")]
        public static extern void mouse_event(dwFlags dw, int dx, int dy, int dwData, int dwExtraInfo);

        [DllImport("user32.dll")]
        public static extern bool GetCursorPos(Point p);

        [DllImport("user32.dll")]
        public static extern bool SetCursorPos(int x,int y);
        private void Form1_Load(object sender, EventArgs e)
        {

        }
        private void button1_Click(object sender, EventArgs e)
        {
             GetCursorPos(p);
             Point p1 = new Point();
             p1.X = p.X + 40;
             p1.Y = p.Y + 10;
             SetCursorPos(p1.X,p1.Y);

             mouse_event(dwFlags.MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);
             mouse_event(dwFlags.MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
        }
    }
}


现在是这样写的,想把第一个参数设置成枚举,但是类型不对。第一个如果是INT的,诸如MOUSEEVENTF_RIGHTDOWN这些string的值也是没有办法传进去的,这个应该是什么样子的呢?

曾经沧海,除却巫山。
2010-04-29 17:38
slb00814
Rank: 2
来 自:黑龙江
等 级:论坛游民
帖 子:41
专家分:47
注 册:2008-11-2
得分:0 
回复 8楼 athenalux
谢谢,这个我试一下

曾经沧海,除却巫山。
2010-04-30 11:18
slb00814
Rank: 2
来 自:黑龙江
等 级:论坛游民
帖 子:41
专家分:47
注 册:2008-11-2
得分:0 
回复 10楼 qubo1982
谢谢,不过你这个枚举作为参数传进去了还是要报错,如果我直接这样传递            
             mouse_event(0x8, 0, 0, 0, 0);
             mouse_event(0x10, 0, 0, 0, 0);
就成功了。

曾经沧海,除却巫山。
2010-04-30 11:21
slb00814
Rank: 2
来 自:黑龙江
等 级:论坛游民
帖 子:41
专家分:47
注 册:2008-11-2
得分:0 
谢谢大家了,结贴。

曾经沧海,除却巫山。
2010-04-30 11:22



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-304870-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.058798 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved