Jump to content
Sign in to follow this  
AZJIO

_HotKeyString_To_AutoitCode

Recommended Posts

AZJIO

; #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
  • Like 2

Share this post


Link to post
Share on other sites
guinness

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

Share this post


Link to post
Share on other sites
Mat

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  

×

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.