Sign in to follow this  
Followers 0
AZJIO

_HotKeyString_To_AutoitCode

4 posts in this topic

#1 ·  Posted (edited)

; #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
2 people like this

Share this post


Link to post
Share on other sites



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


_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_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: 04/09/2015

Share this post


Link to post
Share on other sites

This has been done a couple of times before (though I don't think any were as neat as this one). I did one for >this, and I think Achilles had a similar thing before that (can't find the link though).

Share this post


Link to post
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
Sign in to follow this  
Followers 0