cashiba 发表于 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)

vuivui 发表于 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

vuivui 发表于 2017-12-29 13:37:51

其他功能可以自由组合实现

cashiba 发表于 2017-12-29 17:27:51

可以用微软自带的辅助功能选项实现
用au3的话,如下:
vuivui 发表于 2017-12-29 13:36 http://www.autoit3.cn/images/common/back.gif
感谢关注这个问题!
代码运行后,直接按方向键好像看不到效果阿,要怎么使用呢?

风行者 发表于 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

vuivui 发表于 2017-12-30 18:07:28

感谢关注这个问题!
代码运行后,直接按方向键好像看不到效果阿,要怎么使用呢?
cashiba 发表于 2017-12-29 17:27 http://www.autoit3.cn/images/common/back.gif



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

vuivui 发表于 2017-12-30 18:19:45

简单点就好,没必要一定用api
风行者 发表于 2017-12-29 18:28 http://www.autoit3.cn/images/common/back.gif

各有利弊吧,其实au3八个鼠标函数都是由mouse_event组合产生的,用mouse_event更自由灵活,可自定义更多的功能。
当然简单的功能还是用au3函数直接来实现方便。

cashiba 发表于 2017-12-31 10:51:40

简单点就好,没必要一定用api
风行者 发表于 2017-12-29 18:28 http://www.autoit3.cn/images/common/back.gif
谢谢风侠~
代码可用,只是刚开始按方向键的时候,鼠标会有一次乾坤大挪移....之后才正常
{:face (382):}

cashiba 发表于 2017-12-31 11:07:08

HotKeySet("#{LEFT}", "ZuoYi")
上面的#是win键的意思,如果你要直接用方向键把#去掉就行了,请看 ...
vuivui 发表于 2017-12-30 18:07 http://www.autoit3.cn/images/common/back.gif
原来可以去掉#,还以为有特殊作用......
去掉#后就可以了
用win快捷键,很多程序以及桌面窗口会发生大小改变或出现弹出窗口,好像不太好用唉
非常感谢~
{:face (332):}
页: [1]
查看完整版本: 如何用方向键控制屏幕鼠标移动?[已解决]