Jump to content

_HotKeyString_To_AutoitCode


AZJIO
 Share

Recommended Posts

; #FUNCTION# ;=================================================================================
; Function Name ...: _HotKeyString_To_AutoitCode
; Description ........: Converts text format recording hotkey to format HotKeySet in Autoit3
; Syntax................: _HotKeyString_To_AutoitCode ( $sKey )
; Parameters:
;       $sKey - text format recording hot key, such as "Ctrl + s"
; Return values ....: Success - Returns a string in the format function in HotKeySet Autoit3, such as "^s"
;                   Failure - empty string, @error:
;                  |1 - empty string
;                  |2 - with modifiers used in more than one key
;                  |3 - the same modifier is used more than once
; Author(s) ..........: AZJIO
; Remarks ..........: 
; ============================================================================================
Func _HotKeyString_To_AutoitCode($sKey)
    Local $ch, $k
    If $sKey = '' Then Return SetError(1, 0, '')
    $sKey = '{' & StringRegExpReplace(StringStripWS($sKey, 8), '(?<!\+)\+', '}{') & '}' ; удаляем пробелы, используем "+" как разделитель
    If StringRight($sKey, 3) = '}{}' Then $sKey = StringTrimRight($sKey, 2) ; если заканчивается разделителем справа, вместо клавиши
    If StringLeft($sKey, 3) = '{}{' Then $sKey = StringTrimLeft($sKey, 2) ; если заканчивается разделителем слева, вместо клавиши
    $sKey = StringRegExpReplace($sKey, '\{([^!+^#{}])\}', '\1') ; если не метасимволы то убираем обрамляющие фигурные скобки
    
    ; Создаёт строку модификаторов
    Local $sMod = ''
    Local $aMod = StringRegExp($sKey, '(\{(?:Alt|Shift|Ctrl|Win)\})', 3) ; извлекает модификаторы
    If Not @error Then
        For $i = 0 To UBound($aMod) - 1
            $sMod &= $aMod[$i]
        Next
        $sMod = StringReplace($sMod, '{Alt}', '!')
        If @extended > 1 Then Return SetError(3, 0, '')
        $sMod = StringReplace($sMod, '{Shift}', '+')
        If @extended > 1 Then Return SetError(3, 0, '')
        $sMod = StringReplace($sMod, '{Ctrl}', '^')
        If @extended > 1 Then Return SetError(3, 0, '')
        $sMod = StringReplace($sMod, '{Win}', '#')
        If @extended > 1 Then Return SetError(3, 0, '')
    EndIf
    ; проверка наличие только одной клавиши в сочетании с модификаторами
    $sKey = StringRegExpReplace($sKey, '\{Alt\}|\{Shift\}|\{Ctrl\}|\{Win\}', '') ; удаляем модификаторы
    $ch = StringRegExpReplace($sKey, '\{.*?\}', '') ; подсчитываем элементы обрамлённые фигурными скобками
    $k = @extended
    $k += StringLen($ch) ; добавляем количество символов без фигурных скобок
    If $k <> 1 Then Return SetError(2, 0, '') ; возвращает пустую строку при ошибке
    Return $sMod & $sKey
EndFunc   ;==>_HotKeyString_To_AutoitCode

example

#include <_HotKeyString_To_AutoitCode.au3>
$sHotKey = _HotKeyString_To_AutoitCode('Ctrl + s') & @LF
$sHotKey &= _HotKeyString_To_AutoitCode('Ctrl + Alt+ F1') & @LF
$sHotKey &= _HotKeyString_To_AutoitCode('Ctrl + Shift+ +') & @LF
$sHotKey &= _HotKeyString_To_AutoitCode('Win + Home')
MsgBox(0, 'Yes?', $sHotKey)

; error
$sHotKey = _HotKeyString_To_AutoitCode(' + Shift') & @LF ; excess divider
$sHotKey &= _HotKeyString_To_AutoitCode('Ctrl + Shift+ ') & @LF ; excess divider
$sHotKey &= _HotKeyString_To_AutoitCode(' + Shift+ ') & @LF ; excess divider
$sHotKey &= _HotKeyString_To_AutoitCode(' Ctrl + Shift') & @LF ; only modifiers
$sHotKey &= _HotKeyString_To_AutoitCode(' Ctrl + d+Shift') & @LF ; non-compliance with order
$sHotKey &= _HotKeyString_To_AutoitCode('Ctrl + s + d') ; more than one key with the modifier
MsgBox(0, 'Faulty', $sHotKey)

To read from an ini-file

Edited by AZJIO
Link to comment
Share on other sites

Never crossed my mind to create something like this. Thanks AZJIO.

UDF List:

 
_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_ArrayFilter/_ArrayReduce_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 22/04/2018

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...