找回密码
 加入
搜索
查看: 2719|回复: 13

[AU3基础] send("{LEFT donw}")没有产生长按按键的效果

  [复制链接]
发表于 2018-6-24 22:36:12 | 显示全部楼层 |阅读模式
本帖最后由 tumuyan 于 2018-6-25 17:52 编辑

(原先没有将清除,修改了下)
我需要用autoit模拟一直按着按键。
比如一直按着物理键盘的LEFT不松,光标是连续前移的。

查询资料,这样写了
[mw_shl_code=applescript,true]
send("{LEFT down}")

[/mw_shl_code]
但是实际上每运行一次,光标只向前移动一位。

怎样才能模拟真正物理按键的效果?
(因为我长按按键之后,需要去处理串口通讯信息,当收到信息的时候自动松开按键。所以不确认需要按多长时间/多少次,也不能设置热键来取消。所以不可能使用延时来操作)

发表于 2018-6-25 00:26:13 | 显示全部楼层
搜尋一下  鍵盤鉤子
 楼主| 发表于 2018-6-25 09:52:33 | 显示全部楼层
kk_lee69 发表于 2018-6-25 00:26
搜尋一下  鍵盤鉤子

我搜索了下  键盘钩子是阻止物理键盘发送的数据,好像不能解决我的问题?
发表于 2018-6-25 10:55:45 | 显示全部楼层
tumuyan 发表于 2018-6-25 09:52
我搜索了下  键盘钩子是阻止物理键盘发送的数据,好像不能解决我的问题?

既然可以阻止  就表示 可以攔截   攔截後 做完你想做的   不就是可以???
发表于 2018-6-25 10:58:14 | 显示全部楼层
这个比较容易实现吧!

#include <Misc.au3>
#include <MsgBoxConstants.au3>

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

While 1
    If _IsPressed("27", $hDLL)  Then
                 ; 一直等待,直到按键被释放
        While _IsPressed("27", $hDLL)
                        ConsoleWrite(" 当前按下 → 键 " & @CRLF)
            Sleep(250)
        WEnd
    ElseIf _IsPressed("1B", $hDLL) Then
        MsgBox($MB_SYSTEMMODAL, "_IsPressed", "按下 Esc 键, 将关闭该应用程序.")
        ExitLoop
    EndIf
    Sleep(250)
WEnd

DllClose($hDLL)
 楼主| 发表于 2018-6-25 17:53:37 | 显示全部楼层
xzf680 发表于 2018-6-25 10:58
这个比较容易实现吧!

[au3]#include

我没有讲明白,修改了下帖子
 楼主| 发表于 2018-6-25 17:56:33 | 显示全部楼层
kk_lee69 发表于 2018-6-25 10:55
既然可以阻止  就表示 可以攔截   攔截後 做完你想做的   不就是可以???

我需要模拟一直按着某个按键不放,并不需要拦截
问题没有讲清楚,我改了帖子了
发表于 2018-6-25 18:03:07 | 显示全部楼层
tumuyan 发表于 2018-6-25 17:56
我需要模拟一直按着某个按键不放,并不需要拦截
问题没有讲清楚,我改了帖子了

你按下哪邊  後  模擬 某個按鍵 按住不放
 楼主| 发表于 2018-6-25 18:18:11 | 显示全部楼层
kk_lee69 发表于 2018-6-25 18:03
你按下哪邊  後  模擬 某個按鍵 按住不放


我做了一个串口模拟键盘。外接设备通过串口发送指令到电脑,电脑收到指令后解析指令并做动作。
现在数据可以解析,但是动作做不出来。
比如收到指令“PP8”我希望模拟键盘长按“LEFT”,直到收到后边新的指令,我去把LEFT释放掉。
官方说明文档里是用 send("{LEFT donw}")的写法,但是实际表现和长按按键是不一样的


本帖子中包含更多资源

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

×
发表于 2018-6-25 20:24:46 | 显示全部楼层
tumuyan 发表于 2018-6-25 18:18
我做了一个串口模拟键盘。外接设备通过串口发送指令到电脑,电脑收到指令后解析指令并做动作。
现在数 ...

保持某鍵按下狀態:
    Send("{a down}") ;保持 A 鍵按下
    Send("{a up}") ;釋放 A 鍵

按下  跟 釋放   是兩個動作  你用鍵盤攔截 也是兩個動作分開

但是 他不會重複的一直送資料..................

按一下  只會送 一次  但是 光是 按一下的動作  一樣 有 DOWN 跟 UP

所以  DOWN 跟 UP
跟 送資料無關
发表于 2018-6-25 20:46:02 | 显示全部楼层
tumuyan 发表于 2018-6-25 18:18
我做了一个串口模拟键盘。外接设备通过串口发送指令到电脑,电脑收到指令后解析指令并做动作。
现在数 ...

簡單的說

长按按键的效果= down + 循環送出left + UP + 停止送出

SEND DOWN  就只是 DOWN   

循環送出 left 要自己寫

发表于 2018-6-25 21:06:48 | 显示全部楼层
tumuyan 发表于 2018-6-25 18:18
我做了一个串口模拟键盘。外接设备通过串口发送指令到电脑,电脑收到指令后解析指令并做动作。
现在数 ...

你的問題 其實 分兩段

1. LEFT donw 為何  沒有 長按效果    答案  的確就是這樣  原因 前面我有解釋

2  收到 指令  模擬長按 LEFT

這個 請看下面範例

你 再輸入框 輸入PP8 看看

[mw_shl_code=vb,true]Local $file, $btn, $msg ,$CHK=0

GUICreate("我的?入框 GUI", 320, 120, @DesktopWidth / 2 - 160, @DesktopHeight / 2 - 45, -1, 0x00000018); 接受拖?文件 WS_EX_ACCEPTFILES
$file = GUICtrlCreateInput("", 10, 5, 300, 20)
$btn = GUICtrlCreateButton("确定", 40, 75, 60, 20)

GUISetState()

$msg = 0
While $msg <> -3
        IF GUICtrlRead($file)="PP8" Then
                $CHK=1
                ConsoleWrite("送出你想送的 譬如A"&@CRLF)
                ConsoleWrite('SEND("{LEFT}")'&@CRLF)
        Else
                IF $CHK=1 Then
                        ConsoleWrite("停止發送")
                        $CHK=0
                Else
                       
                EndIf       
        EndIf

    $msg = GUIGetMsg()
    Select
      Case $msg = $btn
           ExitLoop
    EndSelect
WEnd[/mw_shl_code]
 楼主| 发表于 2018-6-25 22:22:33 | 显示全部楼层
kk_lee69 发表于 2018-6-25 21:06
你的問題 其實 分兩段

1. LEFT donw 為何  沒有 長按效果    答案  的確就是這樣  原因 前面我有解釋
...

我查到原因了。windows会连续动作是因为系统本身有这个选项。
使用key down有不同的效果可能是因为autoit的send绕过了这个机制。
通过测试,我发现系统最高发送频率约30ms发送1次


本帖子中包含更多资源

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

×
 楼主| 发表于 2018-6-26 00:05:21 | 显示全部楼层
本帖最后由 tumuyan 于 2018-6-26 01:29 编辑
kk_lee69 发表于 2018-6-25 21:06
你的問題 其實 分兩段

1. LEFT donw 為何  沒有 長按效果    答案  的確就是這樣  原因 前面我有解釋
...

你的说法没错。
这样由于我要一边处理串口信息、响应操作界面,一边去按照固定频率(30ms)模拟连续发送按键动作,所以需要多线程操作了。

应该已经解决了。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-24 02:41 , Processed in 0.090111 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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