| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1328 人关注过本帖
标题:模拟鼠标
只看楼主 加入收藏
a185771876
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-2-9
收藏
 问题点数:0 回复次数:13 
模拟鼠标

using System;
using System.Runtime.InteropServices;
namespace ab
{
class ab
{
[DllImport("user32.dll")]
public static extern void mouse_event(long dwFlags,long dx,long dy ,long dwData ,long dwExtralnfo);
public const long MOUSEEVENTF_LEFTDOWN = 0x2;
public const long MOUSEEVENTF_LEFTUP = 0x4;
public const long MOUSEEVENTF_MIDDLEDOWN = 0x20;
public const long MOUSEEVENTF_MIDDLEUP = 0x40;
public const long MOUSEEVENTF_MOVE = 0x1;
public const long MOUSEEVENTF_ABSOLUTE = 0x8000;
public const long MOUSEEVENTF_RIGHTDOWN = 0x8;
public const long MOUSEEVENTF_RIGHTUP = 0x10;
public static void Main()
{
mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MOVE,10000,10000,0,0);
}
}
}
这段代码是模拟鼠标的绝对位置移动但是我执行的时候鼠标只上下移动不左右移动而且总在屏幕最旁边移动
我晕了大家能帮看下是那里的问题吗我实在是郁闷

搜索更多相关主题的帖子: long 鼠标 public MOUSEEVENTF const 
2006-02-09 17:08
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
的确~~~先帮你顶~~~
2006-02-11 02:29
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
先放出函数原型,方便看。
函数原型:VOID mouse_event(DWORD dwFlags,DWORD dx,DWORD dwFlags,OWORD dx,DWORD dy, DWORD dwData, DWORD dwExtralnfo);

参数:

dwFlags:标志位集,指定点击按钮和鼠标动作的多种情况。此参数里的各位可以是下列值的任何合理组合:

MOOSE_EVENTF_ABSOLOTE:表明参数dX,dy含有规范化的绝对坐标。如果不设置此位,参数含有相对数据:相对于上次位置的改动位置。此标志可被设置,也可不设置,不管鼠标的类型或与系统相连的类似于鼠标的设备的类型如何。要得到关于相对鼠标动作的信息,参见下面备注部分。

MOOSEEVENTFMOVE:表明发生移动。

M00SEEVENTF_LEFTDOWN:表明接按下鼠标左键。

M00SEEVENTF_LEFTUP:表明松开鼠标左键。

MOOSEEVENTF_RIGHTDOWN:表明按下鼠标右键。

MOOSEEVENTF_RIGHTUP:表明松开鼠标右键。

MOOSEEVENTF_MIDDLEDOWN:表明按下鼠标中键。

MOOSEEVENTF_MIDDLEUP:表明松开鼠标中键。

MOOSEEVENTF_WHEEL:在Windows NT中如果鼠标有一个轮,表明鼠标轮被移动。移动的数量由dwData给出。

dx:指定鼠标沿x轴的绝对位置或者从上次鼠标事件产生以来移动的数量,依赖于MOOSEEVENTF_ABSOLOTE的设置。给出的绝对数据作为鼠标的实际X坐标;给出的相对数据作为移动的mickeys数。一个mickey表示鼠标移动的数量,表明鼠标已经移动。

dy:指定鼠标沿y轴的绝对位置或者从上次鼠标事件产生以来移动的数量,依赖于MOOSEEVENTF_ABSOLVTE的设置。给出的绝对数据作为鼠标的实际y坐标,给出的相对数据作为移动的mickeys数。

dwData:如果dwFlags为MOOSEEVENTF_WHEEL,则dwData指定鼠标轮移动的数量。正值表明鼠标轮向前转动,即远离用户的方向;负值表明鼠标轮向后转动,即朝向用户。一个轮击定义为WHEEL_DELTA,即120。

如果dwFlagsS不是MOOSEEVENTF_WHEEL,则dWData应为零。

dwExtralnfo:指定与鼠标事件相关的附加32位值。应用程序调用函数GetMessgeExtrajnfo来获得此附加信息。

返回值:无。

备注:如果鼠标被移动,用设置MOUSEEVENTF_MOVE来表明,dX和dy保留移动的信息。给出的信息是绝对或相对整数值。
2006-02-11 02:31
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 

晕,大概知道什么问题了~~~

你的分辨率是 1024 * 768 吧?

我在网上见一句 kX * 65535 / 1024, kY * 65535 / 768

估计dx和dy的值虽然是绝对位置,但是是必须用dx和dy分别除以分辨率的x和y值,

最后得到的才是移动的路程。

而你这里1000和1000,dx明显超越了界限,所以停在了x轴上不动,dy除以768有剩余。

这个是个人估计,实际未知,你再试试,跟帖我再和你商量,不跟帖的话就罢了。

2006-02-11 02:51
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
不好意思,以上估计是错误的!

具体原因仍有待研究,不过如果楼主不跟帖,我也就不想再跟进了。
2006-02-11 02:53
a185771876
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-2-9
收藏
得分:0 
大家对不起我现在被这个问题搞的脑子都乱
希望大家能帮我解决下
谢谢各位上边的解答三楼的你刚的分析是错误的只要分屏幕后就和屏幕分辨没有任何关系了
2006-02-11 03:11
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 

回复得好快,嘻嘻,你QQ是多少?

2006-02-11 03:36
a185771876
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-2-9
收藏
得分:0 
我怀疑是我系统的问题现在我运行继承环境都报告错误我想重新安装下系统在这里感谢大家对我这个问题花费心思去考虑我先重新安装下系统看看那里的问题
2006-02-11 03:37
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
不是,我的也停靠在了最左边,而y轴就有一段距离。

你可以加逗号吗?
2006-02-11 03:42
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
你所指的各位和大家都是只有我一个人,楼上全部是在下回帖

可以的话留下联系方式,我和你讨论一下。
2006-02-11 03:43
快速回复:模拟鼠标
数据加载中...
 
   



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

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