Snippets ( Miscellaneous )
From AutoIt Wiki
Contents |
Basic Installer Example
Author: guinness
; Basic idea for an installer. #include <GUIConstantsEx.au3> #include <TabConstants.au3> Example() Func Example() Local $aArray[11] = [10], $hGUI, $iBack, $iHeight = 500, $iIndex = 0, $iNext, $iTab, $iWidth = 500 $hGUI = GUICreate("", $iWidth, $iHeight) $iBack = GUICtrlCreateButton("Back", $iWidth - 180, $iHeight - 30, 85, 25) $iNext = GUICtrlCreateButton("Next", $iWidth - 90, $iHeight - 30, 85, 25) $iTab = GUICtrlCreateTab(-99, -99, 0, 0) ; Create a Tab group. For $i = 1 To $aArray[0] GUICtrlCreateTabItem($i) GUICtrlCreateLabel('Page ' & $i, 10, 10) Next GUICtrlCreateTabItem("") ; Close the Tab group. _Toggle_EnableOrDisable($iBack, 0) ; Disable the back button. GUISetState(@SW_SHOW, $hGUI) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop Case $iBack If $iIndex = ($aArray[0] - 1) Then ; Enabled the next button if the index is currently at the maximum number of tabs minus 1. _Toggle_EnableOrDisable($iNext, 1) ; Enable the next button. EndIf $iIndex -= 1 ; Decrease the item index. If $iIndex <= 0 Then ; Disable the back button if the index is less than the number of tab items. $iIndex = 0 _Toggle_EnableOrDisable($iBack, 0) ; Disable the back button. EndIf GUICtrlSendMsg($iTab, $TCM_SETCURFOCUS, $iIndex, 0) Case $iNext $iIndex += 1 ; Increase the item index. If $iIndex = 1 Then _Toggle_EnableOrDisable($iBack, 1) ; Enable the back button if the index is equal to 1. EndIf If $iIndex >= ($aArray[0] - 1) Then ; Disable the next button if the index is greater than the number of tab items minus 1. $iIndex = ($aArray[0] - 1) _Toggle_EnableOrDisable($iNext, 0) ; Disable the next button. EndIf GUICtrlSendMsg($iTab, $TCM_SETCURFOCUS, $iIndex, 0) EndSwitch WEnd EndFunc ;==>Example Func _Toggle_EnableOrDisable($iControlID, $iOverride = -1) ; By guinness. Local $aState[2] = [$GUI_ENABLE, $GUI_DISABLE] If $iOverride > -1 Then $iOverride = Number(Not $iOverride) Else $iOverride = Number(BitAND(GUICtrlGetState($iControlID), $aState[0]) = $aState[0]) EndIf GUICtrlSetState($iControlID, $aState[$iOverride]) EndFunc ;==>_Toggle_EnableOrDisable
_DummyFile
Author: guinness
#include <WinAPI.au3> ; Create a dummy file that is 1MB in size. _DummyFile(@ScriptDir & "\Test.txt", 1, 1) ; Initial idea by trancexx who created it in AutoIt code. Func _DummyFile($sFilePath, $iSizeMB, $iOverwrite = 0) Local $hFile = _WinAPI_CreateFile($sFilePath, 0 + $iOverwrite, 4) If Not $hFile Then Return SetError(1, 0, 0) EndIf _WinAPI_SetFilePointer($hFile, 1048576 * $iSizeMB) _WinAPI_SetEndOfFile($hFile) Return Number(_WinAPI_CloseHandle($hFile)) EndFunc ;==>_DummyFile
_nDaysTrial_Check_Proc
Author: MrCreatoR
;#include-once ;Can be used as Include, only an idea ;) #include <String.au3> _nDaysTrial_Check_Proc("My_App", "Your registration period (%s Hour :) ) has expired!", 1) ;=================== Here goes your script code =================== ;================================================================== Func _nDaysTrial_Check_Proc($sTrialExp_Title, $sTrialExp_Msg, $nTrial=30) Local $nDays_Over = $nTrial Local $iFiles_Counter = 0 Local $iTotal_Files = 4 Local $aTrial_File[$iTotal_Files+1] $aTrial_File[0] = $iTotal_Files-1 $aTrial_File[1] = @WindowsDir & "\" & $sTrialExp_Title & ".sys" $aTrial_File[2] = @SystemDir & "\" & $sTrialExp_Title & ".sys" $aTrial_File[3] = @UserProfileDir & "\Local Settings\Application Data\" & $sTrialExp_Title & ".sys" $aTrial_File[4] = @AppDataCommonDir & "\" & $sTrialExp_Title & ".sys" For $i = 1 To $aTrial_File[0] $iFiles_Counter += FileExists($aTrial_File[$i]) Next If $iFiles_Counter > 0 And $iFiles_Counter < $aTrial_File[0] Then ;One of the files doesn't exists, that means that we got uncovered $nDays_Over += 1 ElseIf $iFiles_Counter = 0 Then ;All files are missing, that means one of two: we got uncovered, or this is the first run :) $iTimer_Init = TimerInit() For $i = 1 To $aTrial_File[0] FileWriteLine($aTrial_File[$i], _ _StringEncrypt(1, @YEAR & @MON & @UserName & @MIN & @SEC, @ComputerName) & @CRLF & _ _StringEncrypt(1, $aTrial_File[$i] & "=" & $iTimer_Init, @ComputerName) & @CRLF & _ _StringEncrypt(1, @ComputerName & @UserName & @MIN & @YEAR & @HOUR & @SEC, @ComputerName)) FileSetAttrib($aTrial_File[$i], "+SH") FileSetTime($aTrial_File[$i], "") ;Only as an option to check in the future... Next ElseIf $iFiles_Counter = $aTrial_File[0] Then ;All files found, now we check the synchronization and the times.. Local $sCurent_Decrypted_Line Local $aTimer_Inits[$aTrial_File[0]+1] $aTimer_Inits[0] = $aTrial_File[0] ;Here we get the Encrypted timer inits... For $i = 1 To $aTrial_File[0] $aReadFile = StringSplit(FileRead($aTrial_File[$i]), @CRLF) For $j = 1 To UBound($aReadFile)-1 $sCurent_Decrypted_Line = _StringEncrypt(0, $aReadFile[$j], @ComputerName) If StringInStr($sCurent_Decrypted_Line, $aTrial_File[$i]) Then $aTimer_Inits[$i] = Int(StringReplace($sCurent_Decrypted_Line, $aTrial_File[$i] & "=", "")) ExitLoop EndIf Next Next ;Now we check if all the init are the same values (to insure that they all is untouched)... For $i = $aTimer_Inits[0] To 2 Step -1 If $aTimer_Inits[$i] <> $aTimer_Inits[$i-1] Or Int($aTimer_Inits[$i]) < 1 Then $nDays_Over += 1 ExitLoop EndIf Next ;Ok, if the Timer Inits all the same, we check the time differences... If $nDays_Over = $nTrial Then ;If has been over $nTrial Hours, then we declare a state that our trial has expired If Round(Int(TimerDiff($aTimer_Inits[1])) / 1000 / 60 / 60, 2) >= $nTrial Then $nDays_Over += 1 EndIf EndIf If $nDays_Over > $nTrial Then MsgBox(262144+48, "*" & $sTrialExp_Title & "*", StringFormat($sTrialExp_Msg, $nTrial)) Exit EndIf EndFunc
_PasswordCrypt
Author: Valuater
Modified: guinness
#include <Crypt.au3> Local $sGenericPassword_1 = 'Password@AutoIt', $sGenericPassword_2 = 'NewPassword@AutoIt', $sSavePath = @ScriptDir & '\License.dat' ConsoleWrite('1. ' & _PasswordCrypt($sGenericPassword_1, $sSavePath) & @CRLF) ; Write the password to a file located in the @ScriptDir. The password we wrote is returned by the function. ConsoleWrite('2. ' & _PasswordCrypt($sGenericPassword_1, $sSavePath) & @CRLF) ; Since the password has been written already, we now want to check if the user has entered the password correctly. Returns True or False. ConsoleWrite('3. ' & _PasswordCrypt($sGenericPassword_2, $sSavePath, 1) & @CRLF) ; Overwrite the old password with a new one. ConsoleWrite('4. ' & _PasswordCrypt($sGenericPassword_1, $sSavePath) & @CRLF) ; Check the password matches. This will fail as we're checking the old password against the new one. FileDelete($sSavePath) Func _PasswordCrypt($sPassword, $sFilePath, $iOverwrite = 0) ; By guinness, idea by Valuater. If FileExists($sFilePath) And $iOverwrite = 0 Then Return BinaryToString(_Crypt_DecryptData(IniRead($sFilePath, 'PasswordKey', 'Password', ''), @ComputerName, $CALG_AES_256)) == $sPassword Else If IniWrite($sFilePath, 'PasswordKey', 'Password', _Crypt_EncryptData($sPassword, @ComputerName, $CALG_AES_256)) Then Return $sPassword EndIf EndIf Return SetError(1, 0, '') EndFunc ;==>_PasswordCrypt
_RandomText
Author: guinness
ConsoleWrite(_RandomText() & @CRLF) ; Generates a random block of text Func _RandomText($iLength = 10) Local $sData = "", $sRandom For $A = 1 To $iLength $sRandom = Random(55, 116, 1) $sData &= Chr($sRandom + 6 * ($sRandom > 90) - 7 * ($sRandom < 65)) Next Return $sData EndFunc ;==>_RandomText
_ReturnCard
KentonBomb
;=============================================================================== ; Function Name: _ReturnCard() ; Description: Returns a random card W/ Face value, Includes optional "Joker" card W/ No face valie ; Syntax: _ReturnCard([$nJoker) ; Parameter(s): $nJoker- Boolean representing whether or not the "Joker" is a possible card ; 0 - (default) Joker is not included ; Requirement(s): ; Return Value(s): $nJoker = 1: Card "Of" Face Value OR "Joker" ; $nJoker = 0: Card "Of" Face Value ; Author(s): KentonBomb (KentonBomb@gmail.com) ; Modification(s): None ; Note(s): This UDF may be useful for games, but Autoit's Random function may not be just "Random" Enough ; Example(s): MsgBox(0, "Your Card", "Your card was " & _ReturnCard()) ;=============================================================================== MsgBox(0, "Your Card", "Your card was " & _ReturnCard()) Func _ReturnCard($nJoker = 0) Local $nNumbers, $azSplits, $nRandom, $nReturn, $sFace, $sFaces, $nRandom2 $nNumbers = "Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten,Jack,King,Queen,Ace" If $nJoker Then $nNumbers &= ",Joker" EndIf $azSplits = StringSplit($nNumbers, ",") $sReturn = $azSplits[Random(1, $azSplits[0], 1)] $sFaces = StringSplit("Spades|Clubs|Hearts|Diamonds", "|") $nRandom2 = Random(1, $sFaces[0] - 1) $sFace = $sFaces[Round($nRandom2)] If $sReturn = "Joker" Then Return $sReturn Else Return $sReturn & " Of " &$sFace EndIf EndFunc ;==>_ReturnCard
_ReturnCard
Author: guinness
ConsoleWrite( _ReturnCard() & @LF) Func _ReturnCard() Local $aFaces[5] = [4, "Clubs", "Diamonds", "Hearts", "Spades"], _ $aNumbers[14] = [13, "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King", "Ace"] Return $aNumbers[Random(1, $aNumbers[0], 1)] & " Of " & $aFaces[Random(1, $aFaces[0], 1)] EndFunc ;==>_ReturnCard
_TextSize
Author: JScript
; Author: JScript - Snippet Version No. = 1.0 ; Snippet was Created Using AutoIt Version = 3.3.8.1, Creation Date = 23/05/12. Local $sText = "Sample text to determine the dimensions!" Local $aiSize = _TextSize($sText) MsgBox(4096, "TextSize", "String: " & $sText & @CRLF & @CRLF & "Width: " & $aiSize[0] & @CRLF & "Height: " & $aiSize[1]) Func _TextSize($sString, $iSize = 9, $iWeight = 400, $sFontName = "") Local $hWnd, $hGuiSwitch, $aCtrlSize, $aRetSize[2] = [0, 0] $hWnd = GUICreate($sString, 0, 0, 0, 0, BitOR(0x80000000, 0x20000000), BitOR(0x00000080, 0x00000020)) $hGuiSwitch = GUISwitch($hWnd) GUISetFont($iSize, $iWeight, -1, $sFontName, $hWnd) $aCtrlSize = ControlGetPos($hWnd, "", GUICtrlCreateLabel($sString, 0, 0)) GUIDelete($hWnd) GUISwitch($hGuiSwitch) If IsArray($aCtrlSize) Then $aRetSize[0] = $aCtrlSize[2]; Width $aRetSize[1] = $aCtrlSize[3]; Height Return SetError(0, 0, $aRetSize) EndIf Return SetError(1, 0, $aRetSize) EndFunc ;==>_TextSize
_UnExpandEnvStrings
Author: guinness
A simple wrapper for _WinAPI_PathUnExpandEnvStrings which will return a blank string if no replacements are made though this will return the original path.
#include <WinAPIEx.au3> ConsoleWrite(_UnExpandEnvStrings(@AppDataDir) & @CRLF) ConsoleWrite(_UnExpandEnvStrings('C:') & @CRLF) ConsoleWrite(_UnExpandEnvStrings('E:Scripts') & @CRLF) ; Would normally be blank with _WinAPI_PathUnExpandEnvStrings. ; Version: 1.00. AutoIt: V3.3.8.1 ; Is a simple wrapper for _WinAPI_PathUnExpandEnvStrings which will return a blank string if no replacements are made, though this will return the original path. Func _UnExpandEnvStrings($sFilePath) Local $sUnExpanded = _WinAPI_PathUnExpandEnvStrings($sFilePath) If StringStripWS($sUnExpanded, 8) = '' Then Return $sFilePath EndIf Return $sUnExpanded EndFunc ;==>_UnExpandEnvStrings