yhxhappy 发表于 2019-6-18 21:17:30

[已解决] 如何区分 回车键 和小键盘上的 回车键

本帖最后由 yhxhappy 于 2019-6-19 08:47 编辑

各位好,

我要写一个测试键盘的工具,要求响应所有按键。经测试发现无法区分大键盘区的回车键与小键盘区的回车键。
这两个键按下时发送的代码是一样的。

yhxhappy 发表于 2019-6-18 21:19:05

本帖最后由 yhxhappy 于 2019-6-18 21:24 编辑

不知道为什么传代码一直失败

afan 发表于 2019-6-18 21:54:17

本帖最后由 afan 于 2019-6-18 22:06 编辑

刚写的,XP测试ok,其它未测~
#include <WinAPI.au3>

OnAutoItExitRegister('_Exit')
Opt('GUIOnEventMode', 1)

Global $h_Key_Proc = DllCallbackRegister('_Key_Proc', 'long', 'int;wparam;lparam')
Global $h_Hook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($h_Key_Proc), _WinAPI_GetModuleHandle(0))

GUICreate('判断大小键盘回车键', 300, 200)
GUISetOnEvent(-3, '_Exit')
Global $iLb_Tip = GUICtrlCreateLabel('请按回车键测试', 50, 80, 200, 20)
GUISetState()

While 1
      Sleep(1000)
WEnd

Func _Key_Proc($nCode, $wParam, $lParam)
      Local $tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
      If $nCode < 0 Then Return _WinAPI_CallNextHookEx($h_Hook, $nCode, $wParam, $lParam)

      If DllStructGetData($tKEYHOOKS, 'vkCode') = 13 Then
                Switch DllStructGetData($tKEYHOOKS, 'flags')
                        Case 0
                              GUICtrlSetData($iLb_Tip, '主键盘回车键按下')
                        Case 1
                              GUICtrlSetData($iLb_Tip, '小键盘回车键按下')
                        Case 0x80
                              GUICtrlSetData($iLb_Tip, '主键盘回车键弹起')
                        Case 0x81
                              GUICtrlSetData($iLb_Tip, '小键盘回车键弹起')
                EndSwitch
      EndIf

      Return _WinAPI_CallNextHookEx($h_Hook, $nCode, $wParam, $lParam)
EndFunc   ;==>_Key_Proc

Func _Exit()
      _WinAPI_UnhookWindowsHookEx($h_Hook)
      DllCallbackFree($h_Key_Proc)
      Exit
EndFunc   ;==>_Exit

yhxhappy 发表于 2019-6-19 08:46:34

afan 发表于 2019-6-18 21:54
刚写的,XP测试ok,其它未测~

可以了,谢谢Afan
页: [1]
查看完整版本: [已解决] 如何区分 回车键 和小键盘上的 回车键