模拟鼠标向下滚动 http://bbs.2ccc.com/topic.asp?topicid=461769

我想模拟鼠标滚轮,下面的代码能向上滚动,怎么样下向滚动啊 

mouse_event( MOUSEEVENTF_WHEEL,0,0,WHEEL_DELTA,0);

我把参数设置为
mouse_event( MOUSEEVENTF_WHEEL,0,0,-WHEEL_DELTA,0);
编译通不过啊
----------------------------------------------
-
作者:
男 pcspace (庸人) ▲▲▲▲▲ -
盒子活跃会员
2014-8-23 17:09:14
1楼: http://baike.baidu.com/view/1080208.htm?fr=aladdin

自己注意看  dwData
----------------------------------------------
-
作者:
男 xfyserver (s) ▲▲▲▲▲ -
普通会员
2014-8-23 17:37:56
2楼: 鎴戞槸鐢ㄧ殑delphi锛岄偅涓�弬鏁颁笉鑳戒负璐熷晩锛岃礋鐨勪笉鑳界紪缁?
----------------------------------------------
-
作者:
男 xfyserver (s) ▲▲▲▲▲ -
普通会员
2014-8-23 17:38:34
3楼: 鎴戞槸鐢ㄧ殑delphi锛岄偅涓�弬鏁颁笉鑳戒负璐熷晩锛岃礋鐨勪笉鑳界紪缁?
----------------------------------------------
-
作者:
男 ptdelphi (Delphi) ▲▲△△△ -
注册会员
2014-8-23 19:42:23
4楼: 泰达星语,看懂啊,楼上
----------------------------------------------
还可以更好
作者:
男 xfyserver (s) ▲▲▲▲▲ -
普通会员
2014-8-23 21:34:42
5楼: 我用的是DELPHI XE6,mouse_event( MOUSEEVENTF_WHEEL,0,0,WHEEL_DELTA,0);这个代码只能往上移,百度说,往上为正,往下为负,但设置-WHEEL_DELTA 或 -10等 数值,都不能编译。
谁能教教我啊
----------------------------------------------
-
作者:
男 xfyserver (s) ▲▲▲▲▲ -
普通会员
2014-8-25 10:14:26
6楼: 没有人知道吗
----------------------------------------------
-
作者:
男 pcspace (庸人) ▲▲▲▲▲ -
盒子活跃会员
2014-8-26 10:24:39
7楼: var
i:integer;
begin
i:=-120;
mouse_event( MOUSEEVENTF_WHEEL,0,0,i,0)
end;

这样是可以编译通过的 , 但是是否可以运行 ,请自行测试
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2014-8-26 10:28:26
8楼: 如果不是看到楼上,我居然没看出楼主的语法错误。
也没看到,楼主不是代码没效果。
而是,编译不通过。
幸亏,从来没发言,不然就糗大了。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 pcspace (庸人) ▲▲▲▲▲ -
盒子活跃会员
2014-8-26 10:38:39
9楼: 依赖Delphi自身不是太好的习惯,Delphi也是在翻写Windows的API,还是向微软靠拢,深入研究的好。

WHEEL_DELTA 可以看一下Delphi内的定义,直接写死了 120 ,正数,表示正向 滚轮一圈。而微软的API呢 ,可以查MSDN的英文版,和百度百科上的中文解释是一样的,明确说明,负数表示反向。

我今天看了楼主的回复,实验了一下,的确编译不过,但是自己用变量呢,因为变量要在运行的时候赋值,编译的时候是无法检测的,肯定就可以编译了。但是楼主没给出具体的代码,是否可以运行,是否有效果,需要实际测试!
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2014-8-26 10:45:55
10楼: 楼主和楼上的请写
0 - WHEEL_DELTA

你们不懂啥叫语法吗?

特别是楼上,你不懂语法还敢搞开发?
还说什么向微软靠拢?

不过深入研究是对的(给楼上面子,居然不领情!)。

但是,你先把基础搞好,在深入也不迟!

好吧,刚才我也是纸上谈兵。下面的代码才是符合函数调用规则的。
  mouse_event( MOUSEEVENTF_WHEEL,0,0,DWORD(0 - WHEEL_DELTA),0);
----------------------------------------------
(C)(P)Flying Wang
作者:
男 pcspace (庸人) ▲▲▲▲▲ -
盒子活跃会员
2014-8-26 11:08:22
11楼: To : Flying Wang

Delphi编译器的代码你看过? 我是没看过的,至于说语法跟编译器自身有没有直接关联,语法的规则是编译器定的,编译器编译不过,你说语法没问题,它就是不给你编译,你能怎么办?

至于说基础,我感觉你还没资格来说这话,你什么时间把Win3.1的内核分析读透彻,什么是把Win2000的代码多读几遍再给我说基础吧。

0 - WHEEL_DELTA = -120  编译器能检测到是负值,不编译的,你如果不能看明白我说的含义,请闭上你高贵的嘴

另外,向微软靠拢没有错,除非你不开发windows平台的软件。
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2014-8-26 11:19:44
12楼: 我们的语法是看人家 DELPHI 教程来的。
人家 DELPHI 编译器肯定支持 教程中的语法。
不支持的,我们也学不到。

你那是高端内容,我们先学的是基础,基础有
计算机原理
离散数学
数据结构
数据库
操作系统
软件工程
某种编程语言

然后是 DELPHI 入门
然后是 DELPHI 开发。


这些都会了,才能表示你懂基础。

有一点点的不会,那就是基础不行。

你 WIN3.1 的内核 懂得再多。也都属于高端内容。和基础无关。

另外,我们应该向 LINUX 靠拢了,这是未来趋势。

刚才我是纸上谈兵,没去具体试试。
现在告诉你正确答案。
这是语法的基础问题,mouse_event 是一个函数,调用函数,需要提供正确的数据类型,发现错误,就应该知道如何去修改,而不是找外部责任。其实还是自己基础差,连一个语法错误都不知道如何修改!

  mouse_event( MOUSEEVENTF_WHEEL,0,0,DWORD(0 - WHEEL_DELTA),0);
----------------------------------------------
(C)(P)Flying Wang
作者:
男 pcspace (庸人) ▲▲▲▲▲ -
盒子活跃会员
2014-8-26 11:26:49
13楼: 问题是人家楼主说了,是编译器编译不过,那么你能去改编译器?我只不过告诉楼主如何去做,实际上能编译,是一个解决方法。

你讲语法,讲到天亮,编译器不给你编译,有什么用?

去研究一下编译器,再来给我说教吧,推荐你去研究一下Dev C++

至于懂基础,还不是你有资格说的,我是从DOS下用Turbo Pascal写到现在的,你说的课程哪个大学的计算机课程没教,难道就你读过书是怎么滴。

向Linux靠拢? 别告诉我你现在用的是Linux
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2014-8-26 11:31:24
14楼: 楼上的看不懂我的意思,是我的错,我的语文是体育老师教的。

我哪里说过要改 编译器的?

我们有那个水平,还在这里混?

地球人对付 编译不过的标准做法不是修改自己的代码吗?
修改自己的代码,直到编译通过为止啊。
不懂语法,能知道如何修改吗?
还有,除了要修改语法错误,还要记得,别搞出逻辑错误。


你语法都不懂,还能写出代码来?

你语法错误,不去改你自己的错误,你居然能理解成,修改编译器?

懒得理你这种思维奇怪的家伙。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 pcspace (庸人) ▲▲▲▲▲ -
盒子活跃会员
2014-8-26 11:47:54
15楼: Flying Wang:你是不是从精神病院出来的? 我写的代码你编译一下试试,哪个地方错误??神经病
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2014-8-26 11:49:19
16楼: 楼上的,老子可没说你代码有错误。

告诉你一个其他代码,不表示你的代码就有错误。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 pcspace (庸人) ▲▲▲▲▲ -
盒子活跃会员
2014-8-26 11:54:40
17楼:  。
----------------------------------------------
-
作者:
男 crystalmoon (黑夜杀手) ▲▲▲▲▲ -
盒子活跃会员
2014-8-26 15:32:48
18楼: 干嘛这么激烈呢,把问题说清楚不就得了。我的基础也不好,不过我知道百度和看源代码定义,所以我把我找到的情况写一下:
其实要看楼主为什么编译没有通过,原因是Delphi对mouse_event的定义(在Windows单元中),参数中第四个的类型是DWORD,DWORD=LongWord,那么它的范围是什么?32位,无正负符号标志,也就是0~4 294 967 295,好吧,这样子,楼主用负数来写,编译器肯定会出错(提示你范围边界出错 violates subrange bounds)。
pcspace所说用负数,来源于(http://msdn.microsoft.com/en-us/library/ms646260(VS.85).aspx):If dwFlags contains MOUSEEVENTF_WHEEL, then dwData specifies the amount of wheel movement. A positive value indicates that the wheel was rotated forward, away from the user; a negative value indicates that the wheel was rotated backward, toward the user. One wheel click is defined as WHEEL_DELTA, which is 120.,但我比较好奇的是DWORD难道在其它地方是可以负数的吗?所以我有必要怀疑微软的档案定义有问题,可能这里不是DWORD,而可能是一个有符号的类型(比如int32),pcspace用 i:integer;来写,实际做了一个隐形转换 DWORD(I),结果是什么?我测试了一下,是4294967176,经测试只要你这样子写
mouse_event( MOUSEEVENTF_WHEEL,0,0,4294967176,0);它就是下向滚动的,那什么下向滚的范围是多少呢?4294967176 downto 2147443648 (数字越小,跨度越大),这也映证了我的猜测,为什么?因为int32的范围  -2147443648 到 2147443647,假设它把DWORD的最高位当成符号位,它DWORD的(2147443648 - 4294967176) 就相当于是int32的负数范围。
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2014-8-26 15:43:15
19楼: 楼上分析的很对。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 hs_kill (hs_kill) ▲▲▲▲▲ -
普通会员
2014-8-27 8:59:16
20楼: 一个无符号类型数值的负数表示法而已....其实Flying Wang说的对, 楼主你基础不行, 参数类型规定是无符号的, 不代表就不能传递负数, 内核 2000源码什么的扯的太远了

楼主连最基本的数据在内存中表示方式和存储方式都还不清楚呢...

最简单的例子: 
x: Byte; {UINT8}
y: ShortInt; {INT8}

y := -100;
Move(y, x, sizeof(y));

吧X打印出来看看值是多少, 其实有没有符号什么的都是浮云, 关键是数据位, 只要长度一致, 值是多少只取决于你怎么去理解
----------------------------------------------
http://www.cnblogs.com/hs-kill/
作者:
男 pcspace (庸人) ▲▲▲▲▲ -
盒子活跃会员
2014-8-27 9:59:15
21楼: 我谈一下我的观点。Delphi的编译器是将程序编译好,程序本质上是调用的Windows的API,这是我所说的为什么要紧跟微软的原因,只要程序编译了,API运行起来就可以。

crystalmoon 说的在理,不管是我的方法还是 Flying Wang的做法,都是用了变量,我怀疑编译器在编译的时候,是不会去检测变量方式的。

hs_kill  说的2000的代码是有意义的,因为最终编译的结果是要基于操作系统的。脱离操作系统去谈编译没意义。

最后解释一下整个争论,我看到楼主的提问,就给楼主找了一下资料,因为一直是搜MSDN的,所以对微软的东西很少去怀疑(不是说微软的东西没BUG,而是因为官方的东西正确的可能性非常非常的大)

第二次呢,上来看了一下,楼主回复说,无法编译,我就随手写了代码测试了一下,可行,然后就放上来,这也是给楼主的一个例子罢了。

写这个代码,因为我猜测编译器在编译常量可以检测,编译变量无法检测,没去多想别的。

Flying Wang 的回复后,我接着回复的本意是从编译器的角度试图分析这个问题,而没有过多的去纠结语法什么的,也根本没考虑这个问题,包括很多Delphier平时习惯拿来就用,不去考虑深层次的问题,这些不管大家是否承认,但是的确存在。

但是Flying Wang的回复,没基础等等,这个话呢,说实在我感觉Wang真没资格说,看资料Wang似乎是80年的吧,我是78的,96年开始写程序,最初是用的C,后来上大学学Turo C,接触到Turbo Pascal,再后来Delphi也用,虽然因为工作原因很少用Delphi,但是我个人认为编程语言呢,是编译器最终定义出来的,语法这些东西不要过于去纠缠它,我的理解是不同的语言,基础语法大同小异,曾经有一段时间因为不同的编程语言交叉着用,结果经常会,在A语言内用B的语法,最后我才坚决的用最简易的教学式的语法,这样各种语言内基本都能通用。

最后还是声明一下,我的回复过多的是基于原理去考虑,给出的代码也是给楼主的问题一个变通的答案,跟Flying Wang的争论是因为Wang似乎有点过于高人的表现,我不怎么认可此种态度。至于以后的争论,本人概不参与。以后论坛的问题呢,也概不回答了,避免出现类似的纠结性的争论出现。
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2014-8-27 10:17:30
22楼: 我说你没基础,的确是我的错。

因为 我没注意到你谈的是 编译器。

我只注意到,你忽略语法错误。


我只是认为,明明是语法错误,不应该谈一些和该错误无关的内容。

我知道你的代码没问题,只是没有明确说出来。

我一开始说你没基础,是因为你不谈语法,去谈编译器。

看上去没基础。事实上你很厉害。但是,我一开始不知道你厉害。

而且,不能因为你厉害,就忽略语法错误的问题。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 lwsxln (lwsxln) ▲▲▲△△ -
注册会员
2014-8-27 21:30:23
23楼: 搞程序的最不缺的就是固执自负的人。不管是群里还是论坛上,总会有人在别人问问题的时候以一种高姿态的方式去俯视提问者。这个帖子里虽然没有俯视提问者,但是却针对了其他回答者。

老子天下第一,其他人都是傻逼。是不是在网上喷一下别人可以让自己很有优越感?


本来delphi的学习环境就不好了。一个问题居然能引来这样的争论。这下好了,又少了一个可以解答问题的高手。

奉劝一句那些自以为自己很牛B的人,不针对wang_80919 (Flying Wang),也不针对pcspace (庸人)。
----------------------------------------------
-
作者:
男 xfyserver (s) ▲▲▲▲▲ -
普通会员
2014-8-28 5:43:32
24楼: 各们一不要争了,问题已经解决了,谢谢各位大神,特别谢谢  pcspace (庸人),按照你的方法解决了
----------------------------------------------
-

作者:
男 cdp85 (cdp) ▲▲△△△ -
注册会员
2014-8-28 16:04:16
25楼: 这论坛很热闹嘛 有趣。。。
pcspace的这个是用的范围广,刚试试别的lang,这样搞真行。
wang_80919说的语法的,不怎么会Delphi不敢说。

delphi lazarus opengl 网页操作自动化, 图像分析破解,游戏开发
原文地址:https://www.cnblogs.com/delphi-xe5/p/7229644.html