hotkeyset 同时按键会出错【已解决】
本帖最后由 fenhanxue 于 2017-2-24 20:32 编辑我写了个电子钢琴的软件,用数字键 1 2 3 4 5 6 7 代表音乐中的do re mi fa so la xi的快捷键
即按下1,播放声音do
按2 播放声音re
3——mi
4——fa
5——so
6——la
7——xi
实测过程中,如果是每次只按一个键,是可以正确返回的,比如先按2再按5再按7,那么程序可以捕获到我分别按的是2 5 7,并也一次播放257
但是弹钢琴,实际弹奏中,有时候我们是需要多个键同时按下的,比如同时按下 1 2同时按下135 等
同时按下多个键的时候,用hotkeyset 没法捕获到正确的按键,以至于无法正确播放声音文件,不知道问题何在,有没什么解决办法。
代码如下:
例如我按照节奏依次按下125,可以正常显示125
但是假如我同时按下12,则他会显示22(但是我想要得到12)
又比如我同时按下34,则他会显示33,(但是我想要得到的是34)
又比如我同时按下135,则他会显示111,(但是我想要得到的是135)
求解#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 538, 295, 192, 114)
$Edit1 = GUICtrlCreateEdit("", 16, 8, 505, 155)
$but = GUICtrlCreateButton('',8,200,40,20)
GUICtrlSetData(-1, "Edit1")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
For $i =1 To 7
HotKeySet($i,'tset')
Next
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func tset()
GUICtrlSetData($Edit1,@HotKeyPressed,1)
;此处的实际代码为 SoundPlay(@HotKeyPressed&'.wav') 为了能更直观方便测试,我改为了 GUICtrlSetData
EndFunc解决方案:目前采用的是自己2楼的笨办法 能想到的笨办法是对每个按键都单独进行一次定义,但是这样好费时间,并且获取到的代码是跟输入的顺序刚好反过来的,不知道为什么,代码如下:
比如,按下按钮 but
发送的是几乎同时按下12345
捕获到的不是12345,而是54321#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 538, 295, 192, 114)
$Edit1 = GUICtrlCreateEdit("", 16, 8, 505, 155)
$but = GUICtrlCreateButton('',8,200,40,20)
GUICtrlSetData(-1, "Edit1")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
For $i =1 To 7
HotKeySet($i,'tset_'&$i)
Next
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $but
Send('12345')
EndSwitch
WEnd
Func tset_1()
GUICtrlSetData($Edit1,1,1)
;此处的实际代码为 SoundPlay(@HotKeyPressed&'.wav') 为了能更直观方便测试,我改为了 GUICtrlSetData
EndFunc
Func tset_2()
GUICtrlSetData($Edit1,2,1)
;此处的实际代码为 SoundPlay(@HotKeyPressed&'.wav') 为了能更直观方便测试,我改为了 GUICtrlSetData
EndFunc
Func tset_3()
GUICtrlSetData($Edit1,3,1)
;此处的实际代码为 SoundPlay(@HotKeyPressed&'.wav') 为了能更直观方便测试,我改为了 GUICtrlSetData
EndFunc
Func tset_4()
GUICtrlSetData($Edit1,4,1)
;此处的实际代码为 SoundPlay(@HotKeyPressed&'.wav') 为了能更直观方便测试,我改为了 GUICtrlSetData
EndFunc
Func tset_5()
GUICtrlSetData($Edit1,5,1)
;此处的实际代码为 SoundPlay(@HotKeyPressed&'.wav') 为了能更直观方便测试,我改为了 GUICtrlSetData
EndFunc
Func tset_6()
GUICtrlSetData($Edit1,6,1)
;此处的实际代码为 SoundPlay(@HotKeyPressed&'.wav') 为了能更直观方便测试,我改为了 GUICtrlSetData
EndFunc
Func tset_7()
GUICtrlSetData($Edit1,7,1)
;此处的实际代码为 SoundPlay(@HotKeyPressed&'.wav') 为了能更直观方便测试,我改为了 GUICtrlSetData
EndFunc
应该用函数
_IsPress
按键时,持续播放对应声音,弹起则停止播放. #include <Misc.au3>
_IsPressed ("hotkey")
页:
[1]