AZJIO Posted June 5, 2013 Share Posted June 5, 2013 (edited) expandcollapse popup; #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 June 8, 2013 by AZJIO Danyfirex and mesale0077 2 My other projects or all Link to comment Share on other sites More sharing options...
guinness Posted June 5, 2013 Share Posted June 5, 2013 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 parsing • AutoIt Search • AutoIt3 Portable • AutoIt3WrapperToPragma • AutoItWinGetTitle()/AutoItWinSetTitle() • Coding • DirToHTML5 • FileInstallr • FileReadLastChars() • GeoIP database • GUI - Only Close Button • GUI Examples • GUICtrlDeleteImage() • GUICtrlGetBkColor() • GUICtrlGetStyle() • GUIEvents • GUIGetBkColor() • Int_Parse() & Int_TryParse() • IsISBN() • LockFile() • Mapping CtrlIDs • OOP in AutoIt • ParseHeadersToSciTE() • PasswordValid • PasteBin • Posts Per Day • PreExpand • Protect Globals • Queue() • Resource Update • ResourcesEx • SciTE Jump • Settings INI • SHELLHOOK • Shunting-Yard • Signature Creator • Stack() • Stopwatch() • StringAddLF()/StringStripLF() • StringEOLToCRLF() • VSCROLL • WM_COPYDATA • More Examples... Updated: 22/04/2018 Link to comment Share on other sites More sharing options...
AZJIO Posted June 9, 2013 Author Share Posted June 9, 2013 Thank you for reminding me about #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7 I forgot to make a local variable. Fixed My other projects or all Link to comment Share on other sites More sharing options...
Mat Posted June 9, 2013 Share Posted June 9, 2013 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). AutoIt Project Listing Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now