Что нового

Мышь, клавиатура Работа Send по кодам клавишь

Astel064

Помог мой пост, ставь +!
Сообщения
276
Репутация
51
Всем доброго времени суток. Многие знают библиотеки HotKey и HotKeyInput - они работают с кодами клавиш.
Нигде не могу найти информацию: как эмулировать нажатие клавиш по коду.

Допустим, комбинация Ctrl+Enter имеет код 525. Стандартной функцией Send я могу отправить эту комбинацию так:
Код:
Send("^{ENTER}")


Но как мне отправить ее кодом 525? Может у кого имеется модернизированная Send-функция, которая по коду 525 отправит комбинацию Ctrl+Enter?

Для чего это нужно: с помощью UDF HotKeyInput в меню настроек своей программы я могу с легкостью задать нужную мне комбинацию клавиш. Эту комбинацию позже (при определенных условиях) должна будет эмулировать программа.
2022-02-12_174319.jpg
Сообщение автоматически объединено:

В общем, ответа я так и не дождался...

Выход нашел такой (написал функцию):
Код:
#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


В архиве всё необходимое для работы...
 

Вложения

  • HotKey Convert UDF.zip
    17.5 КБ · Просмотры: 13
Последнее редактирование:
Верх