找回密码
 加入
搜索
查看: 2209|回复: 8

[AU3基础] 如何用方向键控制屏幕鼠标移动?[已解决]

  [复制链接]
发表于 2017-12-26 16:41:15 | 显示全部楼层 |阅读模式
本帖最后由 cashiba 于 2017-12-31 11:13 编辑

一般在文本编辑软件中,可以用方向键移动鼠标
如果想在全屏幕区域使鼠标响应方向键而自由移动,要怎么做呢?
以及鼠标的形态、鼠标移动的精度是不是也可以改变.....
      

      
感觉又需要用到API了,但是对AU3的Dllcall调用API还是不得要领.

Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2017-12-29 13:36:52 | 显示全部楼层
可以用微软自带的辅助功能选项实现
用au3的话,如下:
HotKeySet("{ESC}", "Terminate")
HotKeySet("#{LEFT}", "ZuoYi")
HotKeySet("#{RIGHT}", "YouYi")
HotKeySet("#{UP}", "ShangYi")
HotKeySet("#{DOWN}", "XiaYi")
HotKeySet("#!{LEFT}", "ZuoJi")
HotKeySet("#!{RIGHT}", "YouJi")

Local $dll = DllOpen("user32.dll")

While 1
    Sleep(100)
WEnd

Func ZuoYi()
        me(1,-5)
EndFunc
Func YouYi()
        me(1,5)
EndFunc
Func ShangYi()
        me(1,0,-5)
EndFunc
Func XiaYi()
        me(1,0,5)
EndFunc

Func ZuoJi()
        me(2)
        me(4)
EndFunc
Func YouJi()
        Sleep(200)
        me(8)
        me(16)
EndFunc
Func me($Flags, $X = 0, $Y = 0, $Data = 0, $ExtraInfo = 0)
        DllCall($dll, "none", "mouse_event", "dword", $Flags, "dword", $X, "dword", $Y, "dword", $Data, "ulong_ptr", $ExtraInfo)
EndFunc

Func Terminate()
    Exit 0
        DllClose($dll)
EndFunc




#cs
$Flags值:
鼠标移动    1
左键按下    2
左键释放    4
右键按下    8
右键释放    16
中键按下    32
中键释放    64
滚轮移动    2048
X 键按下    128
X 键释放    256
#ce

评分

参与人数 1金钱 +20 收起 理由
cashiba + 20 谢谢!

查看全部评分

发表于 2017-12-29 13:37:51 | 显示全部楼层
其他功能可以自由组合实现
 楼主| 发表于 2017-12-29 17:27:51 | 显示全部楼层
可以用微软自带的辅助功能选项实现
用au3的话,如下:
vuivui 发表于 2017-12-29 13:36

感谢关注这个问题!
代码运行后,直接按方向键好像看不到效果阿,要怎么使用呢?
发表于 2017-12-29 18:28:25 | 显示全部楼层
简单点就好,没必要一定用api
HotKeySet("{UP}", "_up")
HotKeySet("{DOWN}", "_down")
HotKeySet("{LEFT}", "_left")
HotKeySet("{RIGHT}", "_right")
Global $X = MouseGetPos(0)
Global $Y = MouseGetPos(1)
Global Const $f = 10

While 1
        Sleep(10)
WEnd

Func _down()
        $Y += $f
        MouseMove($X,$Y,1)
EndFunc

Func _up()
        $Y -= $f
        MouseMove($X,$Y,1)
EndFunc

Func _left()
        $X -= $f
        MouseMove($X,$Y,1)
EndFunc

Func _right()
        $X += $f
        MouseMove($X,$Y,1)
EndFunc

评分

参与人数 1金钱 +20 收起 理由
cashiba + 20 谢谢!

查看全部评分

发表于 2017-12-30 18:07:28 | 显示全部楼层
感谢关注这个问题!
代码运行后,直接按方向键好像看不到效果阿,要怎么使用呢?
cashiba 发表于 2017-12-29 17:27




HotKeySet("#{LEFT}", "ZuoYi")
上面的#是win键的意思,如果你要直接用方向键把#去掉就行了,请看send的帮助。
退出请按Esc键,这样调用的dll才能关闭。
左击是:Win + Alt + 左方向键
移动中键,拖动鼠标等都比较容易实现的,根据$Flags值组合就行。

评分

参与人数 1金钱 +10 收起 理由
cashiba + 10

查看全部评分

发表于 2017-12-30 18:19:45 | 显示全部楼层
简单点就好,没必要一定用api
风行者 发表于 2017-12-29 18:28


各有利弊吧,其实au3八个鼠标函数都是由mouse_event组合产生的,用mouse_event更自由灵活,可自定义更多的功能。
当然简单的功能还是用au3函数直接来实现方便。
 楼主| 发表于 2017-12-31 10:51:40 | 显示全部楼层
简单点就好,没必要一定用api
风行者 发表于 2017-12-29 18:28

谢谢风侠~
代码可用,只是刚开始按方向键的时候,鼠标会有一次乾坤大挪移....之后才正常
 楼主| 发表于 2017-12-31 11:07:08 | 显示全部楼层
HotKeySet("#{LEFT}", "ZuoYi")
上面的#是win键的意思,如果你要直接用方向键把#去掉就行了,请看 ...
vuivui 发表于 2017-12-30 18:07

原来可以去掉#,还以为有特殊作用......
去掉#后就可以了
用win快捷键,很多程序以及桌面窗口会发生大小改变或出现弹出窗口,好像不太好用唉
非常感谢~
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-24 07:49 , Processed in 0.076817 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表