send("{LEFT donw}")没有产生长按按键的效果
本帖最后由 tumuyan 于 2018-6-25 17:52 编辑(原先没有将清除,修改了下)
我需要用autoit模拟一直按着按键。
比如一直按着物理键盘的LEFT不松,光标是连续前移的。
查询资料,这样写了
send("{LEFT down}")
但是实际上每运行一次,光标只向前移动一位。
怎样才能模拟真正物理按键的效果?
(因为我长按按键之后,需要去处理串口通讯信息,当收到信息的时候自动松开按键。所以不确认需要按多长时间/多少次,也不能设置热键来取消。所以不可能使用延时来操作)
搜尋一下鍵盤鉤子 kk_lee69 发表于 2018-6-25 00:26
搜尋一下鍵盤鉤子
我搜索了下键盘钩子是阻止物理键盘发送的数据,好像不能解决我的问题? tumuyan 发表于 2018-6-25 09:52
我搜索了下键盘钩子是阻止物理键盘发送的数据,好像不能解决我的问题?
既然可以阻止就表示 可以攔截 攔截後 做完你想做的 不就是可以??? 这个比较容易实现吧!
#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) xzf680 发表于 2018-6-25 10:58
这个比较容易实现吧!
#include
我没有讲明白,修改了下帖子 kk_lee69 发表于 2018-6-25 10:55
既然可以阻止就表示 可以攔截 攔截後 做完你想做的 不就是可以???
我需要模拟一直按着某个按键不放,并不需要拦截
问题没有讲清楚,我改了帖子了 tumuyan 发表于 2018-6-25 17:56
我需要模拟一直按着某个按键不放,并不需要拦截
问题没有讲清楚,我改了帖子了
你按下哪邊後模擬 某個按鍵 按住不放
kk_lee69 发表于 2018-6-25 18:03
你按下哪邊後模擬 某個按鍵 按住不放
我做了一个串口模拟键盘。外接设备通过串口发送指令到电脑,电脑收到指令后解析指令并做动作。
现在数据可以解析,但是动作做不出来。
比如收到指令“PP8”我希望模拟键盘长按“LEFT”,直到收到后边新的指令,我去把LEFT释放掉。
官方说明文档里是用 send("{LEFT donw}")的写法,但是实际表现和长按按键是不一样的
tumuyan 发表于 2018-6-25 18:18
我做了一个串口模拟键盘。外接设备通过串口发送指令到电脑,电脑收到指令后解析指令并做动作。
现在数 ...
保持某鍵按下狀態:
Send("{a down}") ;保持 A 鍵按下
Send("{a up}") ;釋放 A 鍵
按下跟 釋放 是兩個動作你用鍵盤攔截 也是兩個動作分開
但是 他不會重複的一直送資料..................
按一下只會送 一次但是 光是 按一下的動作一樣 有 DOWN 跟 UP
所以DOWN 跟 UP
跟 送資料無關 tumuyan 发表于 2018-6-25 18:18
我做了一个串口模拟键盘。外接设备通过串口发送指令到电脑,电脑收到指令后解析指令并做动作。
现在数 ...
簡單的說
长按按键的效果= down + 循環送出left + UP + 停止送出
SEND DOWN就只是 DOWN
循環送出 left 要自己寫
tumuyan 发表于 2018-6-25 18:18
我做了一个串口模拟键盘。外接设备通过串口发送指令到电脑,电脑收到指令后解析指令并做动作。
现在数 ...
你的問題 其實 分兩段
1. LEFT donw 為何沒有 長按效果 答案的確就是這樣原因 前面我有解釋
2收到 指令模擬長按 LEFT
這個 請看下面範例
你 再輸入框 輸入PP8 看看
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
kk_lee69 发表于 2018-6-25 21:06
你的問題 其實 分兩段
1. LEFT donw 為何沒有 長按效果 答案的確就是這樣原因 前面我有解釋
...
我查到原因了。windows会连续动作是因为系统本身有这个选项。
使用key down有不同的效果可能是因为autoit的send绕过了这个机制。
通过测试,我发现系统最高发送频率约30ms发送1次
本帖最后由 tumuyan 于 2018-6-26 01:29 编辑
kk_lee69 发表于 2018-6-25 21:06
你的問題 其實 分兩段
1. LEFT donw 為何沒有 長按效果 答案的確就是這樣原因 前面我有解釋
...
你的说法没错。
这样由于我要一边处理串口信息、响应操作界面,一边去按照固定频率(30ms)模拟连续发送按键动作,所以需要多线程操作了。
应该已经解决了。
页:
[1]