Astel064
Помог мой пост, ставь +!
- Сообщения
- 276
- Репутация
- 51
Всем доброго времени суток. Многие знают библиотеки HotKey и HotKeyInput - они работают с кодами клавиш.
Нигде не могу найти информацию: как эмулировать нажатие клавиш по коду.
Допустим, комбинация Ctrl+Enter имеет код 525. Стандартной функцией Send я могу отправить эту комбинацию так:
Но как мне отправить ее кодом 525? Может у кого имеется модернизированная Send-функция, которая по коду 525 отправит комбинацию Ctrl+Enter?
В общем, ответа я так и не дождался...
Выход нашел такой (написал функцию):
В архиве всё необходимое для работы...
Нигде не могу найти информацию: как эмулировать нажатие клавиш по коду.
Допустим, комбинация Ctrl+Enter имеет код 525. Стандартной функцией Send я могу отправить эту комбинацию так:
Но как мне отправить ее кодом 525? Может у кого имеется модернизированная Send-функция, которая по коду 525 отправит комбинацию Ctrl+Enter?
Для чего это нужно: с помощью UDF HotKeyInput в меню настроек своей программы я могу с легкостью задать нужную мне комбинацию клавиш. Эту комбинацию позже (при определенных условиях) должна будет эмулировать программа.
Сообщение автоматически объединено:
В общем, ответа я так и не дождался...
Выход нашел такой (написал функцию):
Код:
#CS
Функция: _HotKey_Convert($sKey)
Автор: Astel064
Описание: Конвертирует прочитанное с помощью GUICtrlRead значение элемента _GUICtrlCreateHotKeyInput в читаемый для функции Send формат
Параметры:
$sKey - Значение _GUICtrlCreateHotKeyInput, прочитанное с помощью GUICtrlRead
Возврат: Код для функции Send
@Error:
1 - Ошибка (неизвестная клавиша или комбинация клавишь)
0 - Успех
Примечание: Если $f_HotKey_Convert__ShowErrorMsg = 1, то в случае обработки неизвестной для UDF клавиши пользователю будет выдано детальное сообщение с ошибкой
Версия: 12:48 13.02.2022
Пример:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include "HotKeyInput.au3"
#include "HotKey Convert.inc"
$hWnd = GUICreate("HotKeyInput", 249, 99)
GUISetBkColor(0xFFFFFF)
GUICtrlCreateLabel("Задать клавишу:", 12, 13, 89, 17)
$hHotKey = _GUICtrlCreateHotKeyInput("", 112, 10, 121, 21)
GUICtrlCreateLabel("Код клавиши:", 12, 38, 73, 17)
$hSendKey = GUICtrlCreateInput("", 112, 34, 121, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_READONLY))
$hCopy = GUICtrlCreateButton("Копировать код в буфер обмена", 13, 66, 222, 22, $BS_DEFPUSHBUTTON)
GUISetState(@SW_SHOW)
$sDef = GUICtrlRead($hHotKey)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $hCopy
ClipPut(GUICtrlRead($hSendKey))
Case Else
If $sDef = GUICtrlRead($hHotKey) Then ContinueLoop
$sDef = GUICtrlRead($hHotKey)
GUICtrlSetData($hSendKey, _HotKey_Convert($sDef))
EndSwitch
WEnd
#CE
#Include-once
Global $f_HotKey_Convert__ShowErrorMsg = 1
Func _HotKey_Convert($sKey)
Local $sEnd = ""
Local $aSplit, $i
Local $aDefSplit[2]=[1, $sKey]
Local $sReturn = ""
Local $fError = 0
If $sKey = "None" Then
Return SetError(0,0,"")
EndIF
$sEnd = StringRight($sKey, 1)
If $sEnd <> "-" Then
$sEnd = ""
Else
$sKey = StringTrimRight($sKey, 1)
EndIF
$aSplit = StringSplit($sKey, "-")
If @Error Then $aSplit = $aDefSplit
For $i = 1 To $aSplit[0]
Switch $aSplit[$i]
Case ""
ContinueLoop
Case "Ctrl"
$sReturn &= "^"
Case "Alt"
$sReturn &= "!"
Case "Shift"
$sReturn &= "+"
Case "Win"
$sReturn &= "#"
Case "Del"
$sReturn &= "{DELETE}"
Case "~"
$sReturn &= "`"
Case "\"
$sReturn &= "{\}"
Case "["
$sReturn &= "{[}"
Case "]"
$sReturn &= "{]}"
Case ";"
$sReturn &= "{;}"
Case '"'
$sReturn &= '{"}'
Case ","
$sReturn &= ','
Case "."
$sReturn &= '.'
Case "/"
$sReturn &= '/'
Case "-"
$sReturn &= "-"
$sEnd = ""
Case "CapsLosk"
$sReturn &= "{CAPSLOCK toggle}"
Case "NumLock"
$sReturn &= "{NUMLOCK toggle}"
Case "ScrollLock"
$sReturn &= "{SCROLLLOCK toggle}"
;=======================================
Case "Num "
$sReturn &= "{NUMPADSUB}"
$sEnd = ""
Case "Num -"
$sReturn &= "{NUMPADSUB}"
$sEnd = ""
Case "Num +"
$sReturn &= "{NUMPADADD}"
Case "Num *"
$sReturn &= "{NUMPADMULT}"
Case "Num /"
$sReturn &= "{NUMPADDIV}"
Case "Num 0"
$sReturn &= "{NUMPAD0}"
Case "Num 1"
$sReturn &= "{NUMPAD1}"
Case "Num 2"
$sReturn &= "{NUMPAD2}"
Case "Num 3"
$sReturn &= "{NUMPAD3}"
Case "Num 4"
$sReturn &= "{NUMPAD4}"
Case "Num 5"
$sReturn &= "{NUMPAD5}"
Case "Num 6"
$sReturn &= "{NUMPAD6}"
Case "Num 7"
$sReturn &= "{NUMPAD7}"
Case "Num 8"
$sReturn &= "{NUMPAD8}"
Case "Num 9"
$sReturn &= "{NUMPAD9}"
Case "Num ."
$sReturn &= "{NUMPADDOT}"
;=======================================
Case "PrtScr"
$sReturn &= "{PRINTSCREEN}"
Case "Pause"
$sReturn &= "{PAUSE}"
Case "Ins"
$sReturn &= "{INSERT}"
Case "Home"
$sReturn &= "{HOME}"
Case "PgUp"
$sReturn &= "{PGUP}"
Case "PgDown"
$sReturn &= "{PGDN}"
Case "End"
$sReturn &= "{END}"
Case "Del"
$sReturn &= "{DELETE}"
Case "Up"
$sReturn &= "{UP}"
Case "Down"
$sReturn &= "{DOWN}"
Case "Left"
$sReturn &= "{LEFT}"
Case "Right"
$sReturn &= "{RIGHT}"
Case "Tab"
$sReturn &= "{TAB}"
Case "+"
$sReturn &= "{+}"
Case "Enter"
$sReturn &= "{ENTER}"
Case "Spacebar"
$sReturn &= "{SPACE}"
;=======================================
Case "F1"
$sReturn &= "{F1}"
Case "F2"
$sReturn &= "{F2}"
Case "F3"
$sReturn &= "{F3}"
Case "F4"
$sReturn &= "{F4}"
Case "F5"
$sReturn &= "{F5}"
Case "F6"
$sReturn &= "{F6}"
Case "F7"
$sReturn &= "{F7}"
Case "F8"
$sReturn &= "{F8}"
Case "F9"
$sReturn &= "{F9}"
Case "F10"
$sReturn &= "{F10}"
Case "F11"
$sReturn &= "{F11}"
Case "F12"
$sReturn &= "{F12}"
;=======================================
Case "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"
$sReturn &= $aSplit[$i]
Case "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"
$sReturn &= StringLower($aSplit[$i])
;=======================================
Case "BrowserBack"; 166 [0xA6]
$sReturn &= "{BROWSER_BACK}"
Case "BrowserForward"; 167 [0xA7]
$sReturn &= "{BROWSER_FORWARD}"
Case "BrowserRefresh"; 168 [0xA8]
$sReturn &= "{BROWSER_REFRESH}"
Case "BrowserStop"; 169 [0xA9]
$sReturn &= "{BROWSER_STOP}"
Case "BrowserSearch"; 170 [0xAA]
$sReturn &= "{BROWSER_SEARCH}"
Case "BrowserFavorites"; 171 [0xAB]
$sReturn &= "{BROWSER_FAVORITES}"
Case "BrowserStart"; 172 [0xAC] home
$sReturn &= "{BROWSER_HOME}"
Case "VolumeMute"; 173 [0xAD]
$sReturn &= "{VOLUME_MUTE}"
Case "VolumeDown"; 174 [0xAE]
$sReturn &= "{VOLUME_DOWN}"
Case "VolumeUp"; 175 [0xAF]
$sReturn &= "{VOLUME_UP}"
Case "NextTrack"; 176 [0xB0]
$sReturn &= "{MEDIA_NEXT}"
Case "PreviousTrack"; 177 [0xB1]
$sReturn &= "{MEDIA_PREV}"
Case "StopMedia"; 178 [0xB2]
$sReturn &= "{MEDIA_STOP}"
Case "Play"; 179 [0xB3]
$sReturn &= "{MEDIA_PLAY_PAUSE}"
Case "Mail"; 180 [0xB4]
$sReturn &= "{LAUNCH_MAIL}"
Case "Media"; 181 [0xB5]
$sReturn &= "{LAUNCH_MEDIA}"
Case 0xB6; 182 [0xB6]
$sReturn &= "{LAUNCH_APP1}"
Case 0xB7; 183 [0xB7]
$sReturn &= "{LAUNCH_APP2}"
Case Else
Local $sMsg = "Строка ввода в функцию: "&$sKey&@CRLF
$sMsg &= "Строка вывода на данный момент: "&$sReturn&@CRLF
$sMsg &= "Необрабатываемое исключение: "&$aSplit[$i]
If $f_HotKey_Convert__ShowErrorMsg Then MsgBox(0+16, "_HotKey_Convert", $sMsg)
$fError = 1
EndSwitch
Next
If $sEnd = "-" Then $sReturn &= "-"
Return SetError($fError, 0, $sReturn)
EndFunc
В архиве всё необходимое для работы...
Вложения
Последнее редактирование: