cyberbit Posted October 17, 2012 Share Posted October 17, 2012 (edited) _GetFileType returns a friendly String name of a file type. Regards, Cyberbit Edited October 17, 2012 by cyberbit _ArrayConcatenate2D · Aero Flip 3D · EPOCH (destroy timestamps) · File Properties Modifier · _GetFileType · UpdateEngine<new> · In-line Case (_ICase) <new> [hr] 50% of the time, it works all the time. -PezoFaSho Link to comment Share on other sites More sharing options...
cyberbit Posted October 17, 2012 Share Posted October 17, 2012 (edited) Simple non-flickering key press-and-hold sensor. #include <Misc.au3> $hDll = DllOpen("user32.dll") $shift = 0 While 1 Switch _IsPressed('10', $hDll) ;Checks if Shift key pressed Case 1 If $shift = 0 Then ConsoleWrite("Key pressed" & @LF) $shift = 1 Case 0 If $shift = 1 Then ConsoleWrite("Key released" & @LF) $shift = 0 EndSwitch If _IsPressed('1B', $hDll) Then ExitLoop ;Exits if Esc key pressed WEnd DllClose($hDll)Regards, Cyberbit Edited June 28, 2013 by cyberbit _ArrayConcatenate2D · Aero Flip 3D · EPOCH (destroy timestamps) · File Properties Modifier · _GetFileType · UpdateEngine<new> · In-line Case (_ICase) <new> [hr] 50% of the time, it works all the time. -PezoFaSho Link to comment Share on other sites More sharing options...
AZJIO Posted October 17, 2012 Share Posted October 17, 2012 (edited) $sTmp = _IsDir('Folder') ; $sTmp = _IsDir('C:WINDOWS') ; $sTmp = _IsDir('C:Boot.ini') If Not (@error Or $sTmp) Then MsgBox(0, ';)', 'File') ElseIf $sTmp Then MsgBox(0, ';)', 'Folder') Else MsgBox(0, ';)', 'Error') EndIf Func _IsDir($sTmp) $sTmp = FileGetAttrib($sTmp) Return SetError(@error, 0, StringInStr($sTmp, 'D', 2) > 0) EndFunc Edited November 30, 2012 by AZJIO My other projects or all Link to comment Share on other sites More sharing options...
AZJIO Posted October 19, 2012 Share Posted October 19, 2012 expandcollapse popup_JumpRegistry('HKEY_CURRENT_USERSoftwareMicrosoftNotepad') Func _JumpRegistry($sKey) Local $hWnd, $hControl, $aKey, $i If Not ProcessExists("regedit.exe") Then Run(@WindowsDir & 'regedit.exe') If Not WinWaitActive('[CLASS:RegEdit_RegEdit]', '', 3) Then Return SetError(1, 1, 1) EndIf If Not WinActive('[CLASS:RegEdit_RegEdit]') Then WinActivate('[CLASS:RegEdit_RegEdit]') $hWnd = WinGetHandle("[CLASS:RegEdit_RegEdit]") $hControl = ControlGetHandle($hWnd, "", "[CLASS:SysTreeView32; INSTANCE:1]") $aKey = StringSplit($sKey, '') $sKey = '#0' For $i = 1 To $aKey[0] ControlTreeView($hWnd, "", $hControl, "Expand", $sKey) $sKey &= '|' & $aKey[$i] Next ControlTreeView($hWnd, "", $hControl, "Expand", $sKey) ControlTreeView($hWnd, "", $hControl, "Select", $sKey) EndFunc mLipok 1 My other projects or all Link to comment Share on other sites More sharing options...
Ambient Posted October 19, 2012 Share Posted October 19, 2012 (edited) Enumerate Removable Drives :::::: Another Contribution I hope its helpful! Sorry about the format got fed up trying to format when pasting it in. Perhaps someone can enlighten me on what I'm doing wrong. My code is ok in scite when I paste here the format goes even though I'm posting as autoit code.expandcollapse popup;~ AutoIt Version: V3.3.6.1 [X32] ;~ Windows Version: WIN_XP [X86] ;~ Language: English (0409) #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7 local $free,$label,$Drive,$status,$usb ToolTip("Enumerating Drives please wait...", 10, 10, "Loading drives...", 1) Sleep(2000) ToolTip("") Local $aDrives = DriveGetDrive("REMOVABLE") If Not IsArray($aDrives) Then ;lets check first if there is a USB Stick attached to machine. $usb = 0 ToolTip("No removable drives found; NO USB Stick in port!", 10, 10, "NO USB Sticks...", 1) Sleep(1000) ToolTip("") MsgBox(16, "No Removeable Drives", "No Removeable Drives Found Please Insert And Try Again") ConsoleWrite("No removable drives found; NO USB Stick in port!") Exit Else $usb = 1 For $i = 1 To $aDrives[0] If $aDrives[$i] = "A:" Then ContinueLoop $drive = StringUpper($aDrives[$i]) $status = DriveStatus($drive) $free = Round(DriveSpaceFree($drive), 2) $label = DriveGetLabel($aDrives[$i]) ConsoleWrite("**** Drive Number " & $i & " ****" & @CRLF & _ "Letter: " & StringUpper($aDrives[$i]) & @CRLF & _ "Label: " & DriveGetLabel($aDrives[$i]) & @CRLF & _ "Status: " & DriveStatus($aDrives[$i]) & @CRLF) If $status = "UNKNOWN" Then MsgBox(16, "USB Format", "Please format USB and run backup again", 4) ;Stick code in here to check return value and call format drive if required. Exit EndIf If $i > 1 Then MsgBox(16, "Only One USB drive Allowed", "Please remove one of the removeable drives and run again", 4) Exit Else MsgBox(16, "USB Drive : - " & $label, Round(DriveSpaceTotal($drive) / 1012, 2) & "Gb" & " Drive has been allocated letter " & $drive & @CRLF & @CRLF & " Drive has " & $free & "Mb Free Space!") EndIf Next ConsoleWrite($aDrives[0] & " Drives Loaded." & @CRLF & @CRLF) EndIf Exit Edited October 19, 2012 by Ambient Link to comment Share on other sites More sharing options...
JohnOne Posted October 19, 2012 Share Posted October 19, 2012 (edited) I've not seen a _FileMove in snippets. FileWrite(@scriptdir & 'test.txt','Test') _FileMove(@scriptdir & 'test.txt', @scriptdir & 'TEST', 1) If @error Then MsgBox(0,"Error",@error) Func _FileMove($sPath, $sDIR, $iOverwrite = 0) Local Const $FILENOTEXIST = 1, $COPYFAILED = 2, $DELETEFAILED = 3 If Not FileExists($sPath) Then Return SetError($FILENOTEXIST,0,0) Local $FLAG = 8 + $iOverwrite If $iOverwrite > 9 Then $iOverwrite = 9 If Not FileCopy($sPath, $sDIR, $FLAG) Then Return SetError($COPYFAILED,0,0) If Not FileDelete($sPath) Then Return SetError($DELETEFAILED,0,0) Return 1 EndFunc Edited October 19, 2012 by JohnOne AutoIt Absolute Beginners Require a serial Pause Script Video Tutorials by Morthawt ipify Monkey's are, like, natures humans. Link to comment Share on other sites More sharing options...
JohnOne Posted October 20, 2012 Share Posted October 20, 2012 (edited) ;### Rename a file ### ;$sFile = Full path to file ;$sRename = New Filename ;$iOverWrite = 0 or 1 ;Success returns 1 ;failure, returns 0 and sets @error ; 1 if FileMove fails, ; 2 if $sFile does not exist ;@extended ; 0 if the new file does not already exist / existed ; 1 if the new file already exists / existed $File = @ScriptDir & '\filetorename.txt' FileWrite($File, 'Test') _FileRename($File, 'newname.txt') If @error Then MsgBox(0, "Error", @error) Func _FileRename($sFile, $sRename, $iOverWrite = 0) Local Const $FILENOTEXIST = 2 If Not FileExists($sFile) Then Return SetError($FILENOTEXIST, 0, 0) Local $_StringLen = StringLen($sFile) Local $_StringInStr = StringInStr($sFile, "\", 0, -1, $_StringLen) Local $_Count = $_StringLen - $_StringInStr Local $_Dir = StringLeft($sFile, $_StringInStr) Local $_NewFile = $_Dir & $sRename Local $_NewFileExists = FileExists($_NewFile) Local $_FileMove = FileMove($sFile, $_NewFile, $iOverWrite) Return SetError(Not $_FileMove, $_NewFileExists, $_FileMove) EndFunc ;==>_FileRename Edited February 9, 2014 by JohnOne AutoIt Absolute Beginners Require a serial Pause Script Video Tutorials by Morthawt ipify Monkey's are, like, natures humans. Link to comment Share on other sites More sharing options...
jmon Posted October 23, 2012 Share Posted October 23, 2012 (edited) _stringExtractPaths : returns the paths from a string as an array: expandcollapse popup#include <Array.au3> ;used for _ArrayDisplay only $sText = "Hello Autoit programmers! C:\Folder\Folder\File.ini " $sText &= "this is a function that extracts paths from a string=C:\Windows\System32\shell32.dll " $sText &= "\\192.168.0.1 \\192.168.0.151\Folder\file.ini \\192.168.0.126\Folder " $sText &= "c:/folder/file.ini c:\folder\file.ini X:\Temp\Jo\autoit.txt! some text " $sText &= "my site:http://www.jmontserrat.com googlehttps://www.google.co.jp some ftp link ftp://www.mysite.com/index ftps://www.mysite.com/index twitter;www.twitter.com " $sText &= "rtp://www.mysite.com/index mms://www.mysite.com/index.php rtsp://www.mysite.com/index.php " $sText &= "check this link:'http://www.autoitscript.com/forum/index.php?showtopic=9296&hl=' link http://www.autoitscript.com/forum/topic/51547-scilexer-udf/page__st__80#entry1024458 " $sText &= "\\Computer12 \\computer\folder \\vfx_node02\testfolder\file.ini //vfx_node02/testfolder/file.ini" $aPaths = _StringExtractPath($sText) _ArrayDisplay($aPaths) ; #FUNCTION# ==================================================================================================================== ; Name ..........: _StringExtractPath ; Description ...: Extracts the paths from a text and return an array of paths. ; Syntax ........: _StringExtractPath($sText) ; Parameters ....: $sText - The String to extract the paths from. ; Return values .: 1D Array of paths. Array[0] contains the number of paths found. ; Author ........: Jmon ; Modified ......: ; Remarks .......: ; Related .......: ; Link ..........: ; Example .......: Yes ; =============================================================================================================================== Func _StringExtractPath($sText) Local $aRet[1] = [0], $a $a = StringRegExp($sText, '(?i)((?:(?:https?|rtp|mms|rtsp|file|ftps?)\:)?[\\|\/]{2}[\w-_]*[\w\\\/?&=.~;\-+!*_#%]*)|([a-z]:[\\\/][\w\.-_\\\/]*)|(w{3}\.[\w\\\/?&=.~;\-+!*_#%]*)', 3) If @error = 0 Then For $i = 0 To UBound($a) - 1 If $a[$i] <> "" Then $aRet[0] += 1 ReDim $aRet[$aRet[0] + 1] $aRet[$aRet[0]] = $a[$i] EndIf Next EndIf Return $aRet EndFunc ;==>_StringExtractPath I had a hard time finding a regexp to find them all! [EDIT] Sorry, it seems that the forum formatting messed up my post. I'll try to fix it. For the moment the example doesn't work... [EDIT2] ok now it works. [EDIT3] added other streaming protocols in the regexp. Thanks cyberbit [EDIT4]Fixed again the same problem as edit1 Edited January 11, 2013 by jmon wolflake 1 [center]www.jmontserrat.comFile Sequence UDF - _StringExtractPaths - _StringTrimPattern - GuiCtrlSetOnTop - CalendarUDF[/center] Link to comment Share on other sites More sharing options...
DBorges Posted October 30, 2012 Share Posted October 30, 2012 Download File From IE 8 - English Func DownloadFromIE($path,$fileOk) $IEVersionF = StringLeft(FileGetVersion(@ProgramFilesDir & "\Internet Explorer\iexplore.exe"),3) $pathOk = $path & $fileOk Sleep(1000) ControlFocus("File Download", "", "[CLASS:Button; INSTANCE:2]") ControlClick("File Download", "", "[CLASS:Button; INSTANCE:2]") Sleep(1000) ControlFocus("Save As", "", "[CLASS:Button; INSTANCE:2]") ControlSend("Save As","","Edit1",$pathOk,@SW_ENABLE) ControlClick("Save As","","[CLASS:Button; INSTANCE:2]") Sleep(2000) EndFunc Link to comment Share on other sites More sharing options...
newsman220 Posted November 19, 2012 Share Posted November 19, 2012 (edited) This long, long function translates decimal Windows locale codes into human-readable names. I've added a wrapper to meet the Snippets guidelines.I wrote this when I was using WMI to query the Win32_OperatingSystem for, among other things, the OS language.Remember, these are the decimal codes, not the hex. The example returns English - United States.The list comes from: http://msdn.microsoft.com/en-us/goglobal/bb964664.aspxexpandcollapse popup#AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7 Local $MyOSLanguage = 1033 ConsoleWrite(_OSLang($MyOSLanguage)) Func _OSLang($lang) Switch $lang Case 1078 Return "Afrikaans" Case 1052 Return "Albanian" Case 1118 Return "Amharic" Case 5121 Return "Arabic - Algeria" Case 15361 Return "Arabic - Bahrain" Case 3073 Return "Arabic - Egypt" Case 2049 Return "Arabic - Iraq" Case 11265 Return "Arabic - Jordan" Case 13313 Return "Arabic - Kuwait" Case 12289 Return "Arabic - Lebanon" Case 4097 Return "Arabic - Libya" Case 6145 Return "Arabic - Morocco" Case 8193 Return "Arabic - Oman" Case 16385 Return "Arabic - Qatar" Case 1025 Return "Arabic - Saudi Arabia" Case 10241 Return "Arabic - Syria" Case 7169 Return "Arabic - Tunisia" Case 14337 Return "Arabic - United Arab Emirates" Case 9217 Return "Arabic - Yemen" Case 1067 Return "Armenian" Case 1101 Return "Assamese" Case 2092 Return "Azeri - Cyrillic" Case 1068 Return "Azeri - Latin" Case 1069 Return "Basque" Case 1059 Return "Belarusian" Case 2117 Return "Bengali - Bangladesh" Case 1093 Return "Bengali - India" Case 5146 Return "Bosnian" Case 1026 Return "Bulgarian" Case 1109 Return "Burmese" Case 1027 Return "Catalan" Case 2052 Return "Chinese - China" Case 3076 Return "Chinese - Hong Kong SAR" Case 5124 Return "Chinese - Macau SAR" Case 4100 Return "Chinese - Singapore" Case 1028 Return "Chinese - Taiwan" Case 1050 Return "Croatian" Case 1029 Return "Czech" Case 1030 Return "Danish" Case 1125 Return "Divehi; Dhivehi; Maldivian" Case 2067 Return "Dutch - Belgium" Case 1043 Return "Dutch - Netherlands" Case 1126 Return "Edo" Case 3081 Return "English - Australia" Case 10249 Return "English - Belize" Case 4105 Return "English - Canada" Case 9225 Return "English - Caribbean" Case 2057 Return "English - Great Britain" Case 16393 Return "English - India" Case 6153 Return "English - Ireland" Case 8201 Return "English - Jamaica" Case 5129 Return "English - New Zealand" Case 13321 Return "English - Phillippines" Case 7177 Return "English - Southern Africa" Case 11273 Return "English - Trinidad" Case 1033 Return "English - United States" Case 12297 Return "English - Zimbabwe" Case 1061 Return "Estonian" Case 1080 Return "Faroese" Case 1065 Return "Farsi - Persian" Case 1124 Return "Filipino" Case 1035 Return "Finnish" Case 2060 Return "French - Belgium" Case 11276 Return "French - Cameroon" Case 3084 Return "French - Canada" Case 9228 Return "French - Congo" Case 12300 Return "French - Cote d'Ivoire" Case 1036 Return "French - France" Case 5132 Return "French - Luxembourg" Case 13324 Return "French - Mali" Case 6156 Return "French - Monaco" Case 14348 Return "French - Morocco" Case 10252 Return "French - Senegal" Case 4108 Return "French - Switzerland" Case 7180 Return "French - West Indies" Case 1122 Return "Frisian - Netherlands" Case 1071 Return "FYRO Macedonia" Case 2108 Return "Gaelic - Ireland" Case 1084 Return "Gaelic - Scotland" Case 1110 Return "Galician" Case 1079 Return "Georgian" Case 3079 Return "German - Austria" Case 1031 Return "German - Germany" Case 5127 Return "German - Liechtenstein" Case 4103 Return "German - Luxembourg" Case 2055 Return "German - Switzerland" Case 1032 Return "Greek" Case 1140 Return "Guarani - Paraguay" Case 1095 Return "Gujarati" Case 1037 Return "Hebrew" Case 1279 Return "HID (Human Interface Device)" Case 1081 Return "Hindi" Case 1038 Return "Hungarian" Case 1039 Return "Icelandic" Case 1136 Return "Igbo - Nigeria" Case 1057 Return "Indonesian" Case 1040 Return "Italian - Italy" Case 2064 Return "Italian - Switzerland" Case 1041 Return "Japanese" Case 1099 Return "Kannada" Case 1120 Return "Kashmiri" Case 1087 Return "Kazakh" Case 1107 Return "Khmer" Case 1111 Return "Konkani" Case 1042 Return "Korean" Case 1088 Return "Kyrgyz - Cyrillic" Case 1108 Return "Lao" Case 1142 Return "Latin" Case 1062 Return "Latvian" Case 1063 Return "Lithuanian" Case 2110 Return "Malay - Brunei" Case 1086 Return "Malay - Malaysia" Case 1100 Return "Malayalam" Case 1082 Return "Maltese" Case 1112 Return "Manipuri" Case 1153 Return "Maori" Case 1102 Return "Marathi" Case 2128 Return "Mongolian" Case 1104 Return "Mongolian" Case 1121 Return "Nepali" Case 1044 Return "Norwegian - Bokml" Case 2068 Return "Norwegian - Nynorsk" Case 1096 Return "Oriya" Case 1045 Return "Polish" Case 1046 Return "Portuguese - Brazil" Case 2070 Return "Portuguese - Portugal" Case 1094 Return "Punjabi" Case 1047 Return "Raeto-Romance" Case 2072 Return "Romanian - Moldova" Case 1048 Return "Romanian - Romania" Case 1049 Return "Russian" Case 2073 Return "Russian - Moldova" Case 1083 Return "Sami Lappish" Case 1103 Return "Sanskrit" Case 3098 Return "Serbian - Cyrillic" Case 2074 Return "Serbian - Latin" Case 1072 Return "Sesotho (Sutu)" Case 1074 Return "Setsuana" Case 1113 Return "Sindhi" Case 1115 Return "Sinhala; Sinhalese" Case 1051 Return "Slovak" Case 1060 Return "Slovenian" Case 1143 Return "Somali" Case 1070 Return "Sorbian" Case 11274 Return "Spanish - Argentina" Case 16394 Return "Spanish - Bolivia" Case 13322 Return "Spanish - Chile" Case 9226 Return "Spanish - Colombia" Case 5130 Return "Spanish - Costa Rica" Case 7178 Return "Spanish - Dominican Republic" Case 12298 Return "Spanish - Ecuador" Case 17418 Return "Spanish - El Salvador" Case 4106 Return "Spanish - Guatemala" Case 18442 Return "Spanish - Honduras" Case 2058 Return "Spanish - Mexico" Case 19466 Return "Spanish - Nicaragua" Case 6154 Return "Spanish - Panama" Case 15370 Return "Spanish - Paraguay" Case 10250 Return "Spanish - Peru" Case 20490 Return "Spanish - Puerto Rico" Case 1034 Return "Spanish - Spain (Traditional)" Case 14346 Return "Spanish - Uruguay" Case 8202 Return "Spanish - Venezuela" Case 1089 Return "Swahili" Case 2077 Return "Swedish - Finland" Case 1053 Return "Swedish - Sweden" Case 1114 Return "Syriac" Case 1064 Return "Tajik" Case 1097 Return "Tamil" Case 1092 Return "Tatar" Case 1098 Return "Telugu" Case 1054 Return "Thai" Case 1105 Return "Tibetan" Case 1073 Return "Tsonga" Case 1055 Return "Turkish" Case 1090 Return "Turkmen" Case 1058 Return "Ukrainian" Case 0 Return "Unicode" Case 1056 Return "Urdu" Case 2115 Return "Uzbek - Cyrillic" Case 1091 Return "Uzbek - Latin" Case 1075 Return "Venda" Case 1066 Return "Vietnamese" Case 1106 Return "Welsh" Case 1076 Return "Xhosa" Case 1085 Return "Yiddish" Case 1077 Return "Zulu" EndSwitch EndFunc Edited November 19, 2012 by newsman220 Link to comment Share on other sites More sharing options...
czardas Posted November 23, 2012 Share Posted November 23, 2012 (edited) This is really jchd's code, but I have optimized it slightly. Here is the post by jchd. I thought it was so useful that it deserved to be posted here. I hope you agree with me.Func _ArrayShuffle(ByRef $aArray) If IsArray($aArray) = 0 Or UBound($aArray, 0) > 1 Then Return SetError (1) Local $vTemp, $r, $iBound = UBound($aArray) -1 For $i = 0 To $iBound $r = Random(0, $iBound, 1) $vTemp = $aArray[$i] $aArray[$i] = $aArray[$r] $aArray[$r] = $vTemp Next EndFuncFor a multidimensional version see Edited November 23, 2012 by czardas operator64 ArrayWorkshop Link to comment Share on other sites More sharing options...
jmon Posted November 29, 2012 Share Posted November 29, 2012 (edited) GuiCtrlSetOnTop: This snippet is to set your control on top of others: expandcollapse popup#include <WinAPI.au3> #include <APIConstants.au3> Global $GUI, $LABEL1, $LABEL2, $LABEL3 $GUI = GUICreate("Test", 800, 600) GUISetState() $LABEL1 = GUICtrlCreateLabel("under", 20, 20, 500, 300) GUICtrlSetBkColor(-1, 0xFF0000) $LABEL2 = GUICtrlCreateLabel("above", 40, 60, 500, 300) GUICtrlSetBkColor(-1, 0x00FF00) $LABEL3 = GUICtrlCreateLabel("above 2", 60, 80, 500, 300) GUICtrlSetBkColor(-1, 0x0000FF) GuiCtrlSetOnTop($LABEL1) Sleep(1000) GuiCtrlSetOnTop($LABEL3) Sleep(1000) GuiCtrlSetOnTop($LABEL2) Do Sleep(50) Until GUIGetMsg() = -3 Exit ; #FUNCTION# ==================================================================================================================== ; Name ..........: GuiCtrlSetOnTop ; Description ...: Sets a control on top of others, by changing the z-ordering. ; Syntax ........: GuiCtrlSetOnTop($iCtrlID) ; Parameters ....: $iCtrlID - A control ID or Handle. ; Return values .: True: Success ; False: Failure ; Author ........: jmon ; Modified ......: ; Remarks .......: Need to include <WinAPI.au3> and <APIConstants.au3> ; Related .......: ; Link ..........: ; Example .......: Yes ; =============================================================================================================================== Func GuiCtrlSetOnTop($iCtrlID) Local $hWnd = $iCtrlID If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($iCtrlID) Return _WinAPI_SetWindowPos($hWnd, $HWND_BOTTOM, 0, 0, 0, 0, $SWP_NOMOVE + $SWP_NOSIZE + $SWP_NOCOPYBITS) EndFunc Edited November 29, 2012 by jmon [center]www.jmontserrat.comFile Sequence UDF - _StringExtractPaths - _StringTrimPattern - GuiCtrlSetOnTop - CalendarUDF[/center] Link to comment Share on other sites More sharing options...
Morthawt Posted December 3, 2012 Share Posted December 3, 2012 You are correct. True Diceware passphrases arn't distinguished from random gibberish containing spaces. Suggested improvement 1 (checking alphanumeric and space) is easily implemented: expandcollapse popup#cs _CalculateBitEntropy Name: _CalculateBitEntropy Description: Calculate the bit entropy of a string. Author: dany Parameters: $sStr - String: String to evaluate. $fCase - Boolean: Do case-sensitive evaluation, default true. Return values: Success: - Float: Bit entropy. Failure: - 0 and sets @error Link: http://en.wikipedia.org/wiki/Password_strength#Entropy_as_a_measure_of_password_strength #ce Func _CalculateBitEntropy($sStr, $fCase = True) If IsBinary($sStr) Then $sStr = BinaryToString($sStr) If Not IsString($sStr) Then Return SetError(1, 0, 0) Local $aDice, $iH = 0, $iLen = StringLen($sStr) If 0 = $iLen Then Return SetError(2, 0, 0) $aDice = StringSplit($sStr, ' ') If 1 < $aDice[0] And StringRegExp($sStr, '^[[:alnum:] ]+$') Then Return $aDice[0] * 12.925 If StringIsDigit($sStr) Then $iH = 3.3219 ElseIf StringIsXDigit($sStr) Then $iH = 4.0000 ElseIf StringIsAlpha($sStr) Then $iH = 4.7004 If $fCase Then If StringRegExp($sStr, '[[:lower:]]') And StringRegExp($sStr, '[[:upper:]]') Then $iH = 5.7004 EndIf ElseIf StringIsAlNum($sStr) Then $iH = 5.1699 If $fCase Then If StringRegExp($sStr, '[[:lower:]]') And StringRegExp($sStr, '[[:upper:]]') Then $iH = 5.9542 EndIf ElseIf StringRegExp($sStr, '^[^[:cntrl:]x7F]+$') Then $iH = 6.5699 ElseIf _StringRegExp($sStr, '^[^[:cntrl:]x7Fx81x8Dx8Fx90x9D]+$') Then $iH = 7.7682 EndIf Return $iH * $iLen EndFunc However, I'm not going to implement a check if the words are in a Diceware list, as there is no standard list. Besides this function only calculates bit entropy, it doesn't care about the validity of the words that's the job of a login script. Thanks for the feedback edit: optimized regepx. This does not work: ERROR: _StringRegExp(): undefined function. Free and easy Autoit scripting video tutorials (plus more videos always coming!) General video tutorials, especially correct and safe TeamSpeak permissions tutorials. Link to comment Share on other sites More sharing options...
dany Posted December 6, 2012 Share Posted December 6, 2012 (edited) Edit: A function to split a string based on a regular expression.; _StringRegExpSplit example. Global $sString = '1. A numbered list.' & @CRLF & _ '2. Second item.' & @CRLF & _ '3. Last item.' Global $aListItems = _StringRegExpSplit($sString, '[0-9]+. '); #FUNCTION# =================================================================== ; Name...........: _StringRegExpSplit ; Description ...: Split a string according to a regular exp[b][/b]ression. ; Syntax.........: _StringRegExpSplit($sString, $sPattern) ; Parameters ....: $sString - String: String to split. ; $sPattern - String: Regular exp[b][/b]ression to split on. ; Return values .: Success - Array: Array of substrings, the total is in $array[0]. ; Failure - Array: The count is 1 ($array[0]) and the full string is returned ($array[1]) and sets @error: ; |1 Delimiter not found. ; |2 Bad RegExp pattern, @extended contains the offset of the error in the pattern. ; Author ........: dany ; Modified ......: ; Remarks .......: ; Related .......: ; ============================================================================== Func _StringRegExpSplit($sString, $sPattern) Local $aRet[2] = [1, $sString], $sSplit = StringRegExpReplace($sString, $sPattern, '___SPLIT___') If @error Then Return SetError(2, @extended, $aRet) If 0 = @extended Then Return SetError(1, 0, $aRet) Return StringSplit($sSplit, '___SPLIT___', 1) EndFunc ;==>_StringRegExpSplit Edited December 8, 2012 by dany [center]Spiderskank Spiderskank[/center]GetOpt Parse command line options UDF | AU3Text Program internationalization UDF | Identicon visual hash UDF Link to comment Share on other sites More sharing options...
AZJIO Posted December 7, 2012 Share Posted December 7, 2012 (edited) czardas Func _StringRegExpSplit($sString, $sPattern) Local $aRet[2] = [1, $sString], $spr = _GetSeparator($sString), $sSplit = StringRegExpReplace($sString, $sPattern, $spr) If @error Then Return SetError(2, @extended, $aRet) If Not @extended Then Return SetError(1, 0, $aRet) Return StringSplit($sSplit, $spr, 1) EndFunc ;==>_StringRegExpSplit Func _GetSeparator($sString) For $i = 1 To 31 $s = Chr($i) ; $s = Chr($i)&Chr($i+1)&Chr($i) If Not StringInStr($sString, $s) Then Return $s Next Return SetError(1) EndFunc ;==>_GetSeparator Edited December 7, 2012 by AZJIO My other projects or all Link to comment Share on other sites More sharing options...
AZJIO Posted December 7, 2012 Share Posted December 7, 2012 (edited) czardas Universal it won't turn out, always there will be restrictions. It is necessary to solve for a concrete case. Func _GetSeparator($sString) Local $d, $s For $x = 1 To 9 Step 2 For $i = 1 To 31 $s = '' $d = 1 For $z = 1 To $x If $d Then $d = 0 Else $d = 1 EndIf $s &= Chr($i + $d) Next If Not StringInStr($sString, $s) Then Return $s Next Next Return SetError(1) EndFunc ;==>_GetSeparator Edited December 7, 2012 by AZJIO My other projects or all Link to comment Share on other sites More sharing options...
dany Posted December 7, 2012 Share Posted December 7, 2012 (edited) Edit I just though of something. Perhaps first converting to binary and then splitting would work (any non hex character could be used as a universal delimiter). Well no, it's just a different format, the problem stays the same. The non-hex character might just be the data I want to keep. I chose ___SPLIT___ because it's rather unlikely to turn up in everyday sentences. Your question is valid nonetheless and I'm intrigued by the offered solutions. But it would be easier to just change it to ___STRING___REGEXP___SPLIT___. You could check for ___SPLIT___ in the string and in the highly unlikely case it's in there use another overly long placeholder, put a few in an array and loop over them. Chances on collisions are very small and placeholders are a much used technique in template parsers, see the Wiki markup language. edit: ; #FUNCTION# =================================================================== ; Name...........: _StringRegExpSplit ; Description ...: Split a string according to a regular exp<b></b>ression. ; Syntax.........: _StringRegExpSplit($sString, $sPattern) ; Parameters ....: $sString - String: String to split. ; $sPattern - String: Regular exp<b></b>ression to split on. ; Return values .: Success - Array: Array of substrings, the total is in $array[0]. ; Failure - Array: The count is 1 ($array[0]) and the full string is returned ($array[1]) and sets @error: ; |1 Delimiter not found. ; |2 Bad RegExp pattern, @extended contains the offset of the error in the pattern. ; Author ........: dany ; Modified ......: ; Remarks .......: ; Related .......: ; ============================================================================== Func _StringRegExpSplit($sString, $sPattern) Local $iDelim, $aDelim[4] = ['___SPLIT___', '___STRING___REGEXP___SPLIT___', '___SPLIT_DELIMITER___', 0] Local $aRet[2] = [1, $sString], $sSplit For $iDelim = 0 To 3 If Not StringInStr($sString, $aDelim[$iDelim]) Then ExitLoop Next If 3 = $iDelim Then Return SetError(3, 0, 0) ; All possible delimiters are in the string! $sSplit = StringRegExpReplace($sString, $sPattern, $aDelim[$iDelim]) If @error Then Return SetError(2, @extended, $aRet) If 0 = @extended Then Return SetError(1, 0, $aRet) Return StringSplit($sSplit, $aDelim[$iDelim], 1) EndFunc ;==>_StringRegExpSplit edit: sorry, posted incomplete code. You could also generate a random alphanumeric string on the spot and use that as a placeholder delimiter. edit 2: I'll look into a better revised version tonight, gotta go to work Edited December 8, 2012 by dany [center]Spiderskank Spiderskank[/center]GetOpt Parse command line options UDF | AU3Text Program internationalization UDF | Identicon visual hash UDF Link to comment Share on other sites More sharing options...
dany Posted December 7, 2012 Share Posted December 7, 2012 (edited) Thanks for your suggestions, czardas and AZJIO. You're right about the delimiter being overly long but it was primarily meant as an example, although the longer the delimiter the less efficient the string lookup and replacing becomes...Here's my revised version, it generates a temp delimiter on the fly that always starts with Chr(1). There's also a little part at the end to correct the array entries when the string passed was binary.edit: ; #FUNCTION# =================================================================== ; Name...........: _StringRegExpSplit ; Description ...: Split a string according to a regular exp<b></b>ression. ; Syntax.........: _StringRegExpSplit($sString, $sPattern) ; Parameters ....: $sString - String: String to split. ; $sPattern - String: Regular exp<b></b>ression to split on. ; Return values .: Success - Array: Array of substrings, the total is in $array[0]. ; Failure - Array: The count is 1 ($array[0]) and the full string is returned ($array[1]) and sets @error: ; |1 Delimiter not found. ; |2 Bad RegExp pattern, @extended contains the offset of the error in the pattern. ; |3 No suitable placeholder delimiter could be constructed. ; Author ........: dany ; Modified ......: czardas, AZJIO ; Remarks .......: ; Related .......: ; ============================================================================== Func _StringRegExpSplit($sString, $sPattern) Local $sSplit, $aError[2] = [1, $sString], $sDelim = Chr(1) While StringInStr($sString, $sDelim) $sDelim &= Chr(Random(0, 255, 1)) If 32 = StringLen($sDelim) Then Return SetError(3, 0, 0) WEnd $sSplit = StringRegExpReplace($sString, $sPattern, $sDelim) If @error Then Return SetError(@error, @extended, $aError) If @extended = 0 Then Return SetError(1, 0, $aError) If Not IsBinary($sString) Then Return StringSplit($sSplit, $sDelim, 1) $sSplit = StringSplit($sSplit, $sDelim, 1) For $i = 2 To $sSplit[0] $sSplit[$i] = '0x' & $sSplit[$i] Next Return $sSplit EndFuncExample:#include <Array.au3> Global $sString = 'list:1.a2.b3.c' _ArrayDisplay(_StringRegExpSplit($sString, '[0-9]+.')) Global $bBinary = Binary($sString) _ArrayDisplay(_StringRegExpSplit($bBinary, '3[0-9]2E')) Edited December 8, 2012 by dany [center]Spiderskank Spiderskank[/center]GetOpt Parse command line options UDF | AU3Text Program internationalization UDF | Identicon visual hash UDF Link to comment Share on other sites More sharing options...
AZJIO Posted December 7, 2012 Share Posted December 7, 2012 (edited) $sDelim &= Chr(Random(0, 255, 1)) Do you know why I reduced the range up to 31? The regular exp<b></b>ression must not be a combination of '1', '2' ... '9' or '$1', '$2' ... '$9'. Because it inserts the Group. $ = Chr(36) = Chr(92) Chr(0) - sometimes that causes problems. #include <Array.au3> _Test(Chr(1)) _Test(Chr(0)) ; problems Func _Test($spr) Dim $arr[6] = [1, 2, 3, 4, 5, 6] $Line = $spr & _ArrayToString($arr, $spr, 1) & $spr $aTmp = StringRegExp($Line, '(?i)' & $spr & '3' & $spr, 3) If Not @error And UBound($aTmp) = 1 Then MsgBox(0, 'Yes?', $aTmp[0]) Else MsgBox(0, 'No', 'Error') EndIf EndFunc Any metacharacter causes problems: '?^()*+['. Edited December 8, 2012 by AZJIO My other projects or all Link to comment Share on other sites More sharing options...
JohnOne Posted December 8, 2012 Share Posted December 8, 2012 (edited) What about something like. $Passedstring = "BLAHDFRTUUJHGTFDEER" _Delim($Passedstring) Func _Delim($String) Local $delim = '', $rtn = '' Do For $i = 0 To 3 $delim &= Chr(Random(65, 122, 1)) Next $rtn = $delim $delim = '' Until Not StringInStr($String, $rtn, 1) Return $rtn EndFunc ;==>_Delim Edited December 8, 2012 by JohnOne AutoIt Absolute Beginners Require a serial Pause Script Video Tutorials by Morthawt ipify Monkey's are, like, natures humans. 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