Jump to content

Search the Community

Showing results for tags 'files'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • General
    • Announcements and Site News
    • Administration
  • AutoIt v3
    • AutoIt Help and Support
    • AutoIt Technical Discussion
    • AutoIt Example Scripts
  • Scripting and Development
    • Developer General Discussion
    • Language Specific Discussion
  • IT Administration
    • Operating System Deployment
    • Windows Client
    • Windows Server
    • Office

Categories

  • AutoIt Team
    • Beta
    • MVP
  • AutoIt
    • Automation
    • Databases and web connections
    • Data compression
    • Encryption and hash
    • Games
    • GUI Additions
    • Hardware
    • Information gathering
    • Internet protocol suite
    • Maths
    • Media
    • PDF
    • Security
    • Social Media and other Website API
    • Windows
  • Scripting and Development
  • IT Administration
    • Operating System Deployment
    • Windows Client
    • Windows Server
    • Office

Categories

  • Forum
  • AutoIt

Calendars

  • Community Calendar

Found 24 results

  1. Hello I have a query please It is about windows file explorer If i design a tool in autoit language to delete files for example and i added it in the context menu in File Explorer If i right-click on any file And you choose the tool, it will be get the path of the selected file or folder The problem here is If i select a set of files or folders it only detect the first one The code that i used is if $CMDLine[0] = 0 then msgBox(16, "error", "you don't selecte any files") exit else for $i = 1 to $CMDLine[0] msgBox(0, "files", $CMDLine[$i] next endIf exit
  2. Files Checklist

    Files Checklist Just a simple little (complex enough) program I whipped up, for a purpose ... but only too happy to share. It can of course be modified to do more, but at the moment just compares file names with or without path ... Location versus Checklist. There are of course other compare programs out there, most doing a lot more than mine (i.e. WinMerge or FileComparer). But I wanted something quick and simple with drag & drop, that uses up a smallish amount of screen real estate. NOTE - The SAVE button is also a LOAD one, and displays 'Load' when the list is empty. So you can save and load specific lists. While in SAVE mode, the button can also be used with CTRL held down, to ADD another list to existing (displayed one) ... combining as they say ... though not saved until you SAVE. CLEAR button removes a selected entry, or if used with CTRL held down, queries about removing all listed entries. Files Checklist v1.2.zip Files Checklist v1.3.zip Files Checklist v1.4.zip (Includes a BUGFIX.) (source included) WARNING - While this program does not act on files or folders ADDED or CHECKED, you might act on the results, so I advise caution, and I also recommend using the new 'Relative' option in v1.3 or newer ... but you still need to understand what you are doing and what the results actually mean. Some basic examples in the next post. Enjoy! RELATED Users might also be interested in another somewhat related program of mine. DeleteIf Same Cheers!
  3. Hello all I have a question please I've searched a lot on how to make a GUI for programs designed by Autoit to accepts dragging files from Windows File Explorer Unfortunately, however, it failed Is there any way to do this? Where I am making a audio player and I want to activate the feature of dragging files from Windows Explorer to a program window to play them I hope to find a simple solution here in this wonderful forum Thank you very much in advance
  4. hello dears First I would like to apologize to you for my many questions. I have a new question if you allow I am programming an audio player for blinds I had a problem I put an option in the folders context menu to Opens the audio files that in the selected folder I did not know how to make the Autoit Search the subfolders Please provide an example of how to search for files in the subfolders Let's say, for example, MP3 files Just give me a simple example and I will try to modify it as appropriate for the program I designing it Please help me to find the solution Thanks in advance
  5. Connect Android phone > enable USB file transfer > go to My Computer, there's an icon, but no drive letter - this is normal. Open phone icon > go to Internal Storage > go to DCIM > copy all files and folders to computer. Now, I want a quick AutoIt script / windows batch to do this automatically. Get USB path with this - it works OK: #include <WinAPICom.au3> Global Const $sCLSID_PortableDeviceManager = "{0af10cec-2ecd-4b92-9581-34f6ae0637f3}" Global Const $sIID_IPortableDeviceManager = "{a1567595-4c2f-4574-a6fa-ecef917b9a40}" Global Const $sTagIPortableDeviceManager = "GetDevices hresult(ptr;dword*); RefreshDeviceList hresult(); " & _ "GetDeviceFriendlyName hresult(wstr;wstr;dword*); GetDeviceDescription hresult(wstr;wstr;dword*); " & _ "GetDeviceManufacturer hresult(wstr;wstr;dword*); GetDeviceManufacturer hresult(wstr;wstr;ptr;dword*dword*); " & _ "GetPrivateDevices hresult(ptr;dword*)" Global Enum $eDevID, $eDevName, $eDevManufacturer, $eDevDescription Local $aPnPDevices = GetPortableDevices() If IsArray($aPnPDevices) Then _ArrayDisplay($aPnPDevices) ;~ Success: Return 0 ;~ Failure: Return 2DArray [n][4] |;[n][0]$eDevID, [n][1]$eDevName, [n][2]$eDevManufacturer,[n][3] $eDevDescription Func GetPortableDevices() Local $aDevicesInfo[0][0] ;[n][0]$eDevID, [n][1]$eDevName, [n][2]$eDevManufacturer,[n][3] $eDevDescription Local $oPortableDeviceManager = 0 Local $SizeofArray = 0 Local $hr = 0x80004005 ;E_Fail Just to Initialized <0 Local $taPnPDeviceIDs = 0 Local $tName = 0 $oPortableDeviceManager = ObjCreateInterface($sCLSID_PortableDeviceManager, $sIID_IPortableDeviceManager, $sTagIPortableDeviceManager) If Not IsObj($oPortableDeviceManager) Then Return 0 If FAILED($oPortableDeviceManager.GetDevices(Null, $SizeofArray)) Then Return 0 If $SizeofArray < 1 Then Return 0 $taPnPDeviceIDs = DllStructCreate("ptr[" & $SizeofArray & "]") If FAILED($oPortableDeviceManager.GetDevices(DllStructGetPtr($taPnPDeviceIDs), $SizeofArray)) Then Return 0 ReDim $aDevicesInfo[$SizeofArray][4] For $i = 0 To $SizeofArray - 1 $tName = DllStructCreate("wchar[512]", DllStructGetData($taPnPDeviceIDs, 1, $i + 1)) $aDevicesInfo[$i][$eDevID] = DllStructGetData($tName, 1) $aDevicesInfo[$i][$eDevName] = _GetFriendlyName($oPortableDeviceManager, $aDevicesInfo[$i][$eDevID]) $aDevicesInfo[$i][$eDevManufacturer] = _GetDeviceManufacturer($oPortableDeviceManager, $aDevicesInfo[$i][$eDevID]) $aDevicesInfo[$i][$eDevDescription] = _GetDeviceDescription($oPortableDeviceManager, $aDevicesInfo[$i][$eDevID]) $tName = 0 _WinAPI_CoTaskMemFree(DllStructGetData($taPnPDeviceIDs, 1, $i + 1)) Next Return $aDevicesInfo EndFunc ;==>GetPortableDevices Func _GetDeviceManufacturer($oInterface, $PnPDeviceID) Local $sString = "" $oInterface.GetDeviceManufacturer($PnPDeviceID, $sString, 128) Return $sString EndFunc ;==>_GetDeviceManufacturer Func _GetDeviceDescription($oInterface, $PnPDeviceID) Local $sString = "" Local Const $Size = 128 $oInterface.GetDeviceDescription($PnPDeviceID, $sString, 128) Return $sString EndFunc ;==>_GetDeviceDescription Func _GetFriendlyName($oInterface, $PnPDeviceID) Local $sString = "" Local Const $Size = 128 $oInterface.GetDeviceFriendlyName($PnPDeviceID, $sString, 128) Return $sString EndFunc ;==>_GetFriendlyName Func _GetProperty($oInterface, $PnPDeviceID) Local $sString = "" Local Const $Size = 128 $oInterface.GetDeviceFriendlyName($PnPDeviceID, $sString, 128) Return $sString EndFunc ;==>_GetProperty Func FAILED($hr) Return ($hr < 0) EndFunc ;==>FAILED Path looks like this: \\?\usb#vid_0e8d&pid_201d&mi_00#7&37c4bb9&0&0000#{6ac27878-a6fa-4155-ba85-f98f491d4f33} I can open this in a Windows Explorer windows and it works ok. Now, search for files using AutoIt - does not work: #include <GUIConstantsEx.au3> #include <Array.au3> #include <File.au3> Local $f $f = _RecFileListToArray("\\?\usb#vid_0e8d&pid_201d&mi_00#7&37c4bb9&0&0000#{6ac27878-a6fa-4155-ba85-f98f491d4f33}", "*.*", 0, 1, 1) _ArrayDisplay($f) ; Name...........: _RecFileListToArray ; Description ...: Lists files and\or folders in a specified path (Similar to using Dir with the /B Switch) ; Syntax.........: _RecFileListToArray($sPath[, $sFilter = "*"[, $iFlag = 0[, $iRecur = 0[, $iFullPath = 0]]]]) ; Parameters ....: $sPath - Path to generate filelist for. ; $sFilter - Optional the filter to use, default is *. Search the Autoit3 helpfile for the word "WildCards" For details. ; $iFlag - Optional: specifies whether to return files folders or both ; |$iFlag=0 (Default) Return both files and folders ; |$iFlag=1 Return files only ; |$iFlag=2 Return Folders only ; $iRecur - Optional: specifies whether to search in subfolders ; |$iRecur=0 (Default) Do not search in subfolders ; |$iRecur=1 Search in subfolders ; $iFullPath - Optional: specifies whether to include initial path in result string ; |$iFullPath=0 (Default) Do not include initial path ; |$iFullPath=1 Include initial path ; Return values .: @Error - 1 = Path not found or invalid ; |2 = Invalid $sFilter ; |3 = Invalid $iFlag ; |4 = Invalid $iRecur ; |5 = Invalid $iFullPath ; |6 = No File/Folder Found ; Author ........: SolidSnake <MetalGX91 at GMail dot com> ; Modified.......: 22 Jan 09 by Melba23 - added recursive search and full path options ; Remarks .......: The array returned is one-dimensional and is made up as follows: ; $array[0] = Number of Files\Folders returned ; $array[1] = 1st File\Folder ; $array[2] = 2nd File\Folder ; $array[3] = 3rd File\Folder ; $array[n] = nth File\Folder ; Related .......: ; Link ..........; ; Example .......; Yes ; ==================================================================================================== ;Special Thanks to Helge and Layer for help with the $iFlag update ; speed optimization by code65536 ;=============================================================================== Func _RecFileListToArray($sPath, $sFilter = "*", $iFlag = 0, $iRecur = 0, $iFullPath = 0) Local $asFileList[1], $sFullPath If Not FileExists($sPath) Then Return SetError(1, 1, "") If StringRight($sPath, 1) <> "\" Then $sPath = $sPath & "\" If (StringInStr($sFilter, "\")) Or (StringInStr($sFilter, "/")) Or (StringInStr($sFilter, ":")) Or (StringInStr($sFilter, ">")) Or (StringInStr($sFilter, "<")) Or (StringInStr($sFilter, "|")) Or (StringStripWS($sFilter, 8) = "") Then Return SetError(2, 2, "") If Not ($iFlag = 0 Or $iFlag = 1 Or $iFlag = 2) Then Return SetError(3, 3, "") If Not ($iRecur = 0 Or $iRecur = 1) Then Return SetError(4, 4, "") If $iFullPath = 0 Then $sFullPath = $sPath ElseIf $iFullPath = 1 Then $sFullPath = "" Else Return SetError(5, 5, "") EndIf _FLTA_Search($sPath, $sFilter, $iFlag, $iRecur, $sFullPath, $asFileList) If $asFileList[0] = 0 Then Return SetError(6, 6, "") Return $asFileList EndFunc ;==>_FileListToArray ; #INTERNAL_USE_ONLY#================================================================================= ; Name...........: _FLTA_Search ; Description ...: Searches folder for files and then recursively searches in subfolders ; Syntax.........: _FLTA_Search($sStartFolder, $sFilter, $iFlag, $iRecur, $sFullPath, ByRef $asFileList) ; Parameters ....: $sStartFolder - Value passed on from UBound($avArray) ; $sFilter - As set in _FileListToArray ; $iFlag - As set in _FileListToArray ; $iRecur - As set in _FileListToArray ; $sFullPath - $sPath as set in _FileListToArray ; $asFileList - Array containing found files/folders ; Return values .: None ; Author ........: Melba23 based on code from _FileListToArray by SolidSnake <MetalGX91 at GMail dot com> ; Modified.......: ; Remarks .......: This function is used internally by _FileListToArray. ; Related .......: ; Link ..........; ; Example .......; ; ==================================================================================================== Func _FLTA_Search($sStartFolder, $sFilter, $iFlag, $iRecur, $sFullPath, ByRef $asFileList) Local $hSearch, $sFile If StringRight($sStartFolder, 1) <> "\" Then $sStartFolder = $sStartFolder & "\" ; First look for filtered files/folders in folder $hSearch = FileFindFirstFile($sStartFolder & $sFilter) If $hSearch > 0 Then While 1 $sFile = FileFindNextFile($hSearch) If @error Then ExitLoop Switch $iFlag Case 0; Both files and folders If $iRecur And StringInStr(FileGetAttrib($sStartFolder & $sFile), "D") <> 0 Then ContinueLoop Case 1; Files Only If StringInStr(FileGetAttrib($sStartFolder & $sFile), "D") <> 0 Then ContinueLoop Case 2; Folders only If StringInStr(FileGetAttrib($sStartFolder & $sFile), "D") = 0 Then ContinueLoop EndSwitch If $iFlag = 1 And StringInStr(FileGetAttrib($sStartFolder & $sFile), "D") <> 0 Then ContinueLoop If $iFlag = 2 And StringInStr(FileGetAttrib($sStartFolder & $sFile), "D") = 0 Then ContinueLoop _FLTA_Add($asFileList, $sFullPath, $sStartFolder, $sFile) WEnd FileClose($hSearch) ReDim $asFileList[$asFileList[0] + 1] EndIf If $iRecur = 1 Then ; Now look for subfolders $hSearch = FileFindFirstFile($sStartFolder & "*.*") If $hSearch > 0 Then While 1 $sFile = FileFindNextFile($hSearch) If @error Then ExitLoop If StringInStr(FileGetAttrib($sStartFolder & $sFile), "D") And ($sFile <> "." Or $sFile <> "..") Then ; If folders needed, add subfolder to array If $iFlag <> 1 Then _FLTA_Add($asFileList, $sFullPath, $sStartFolder, $sFile) ; Recursive search of this subfolder _FLTA_Search($sStartFolder & $sFile, $sFilter, $iFlag, $iRecur, $sFullPath, $asFileList) EndIf WEnd FileClose($hSearch) EndIf EndIf EndFunc ; #INTERNAL_USE_ONLY#================================================================================= ; Name...........: _FLTA_Add ; Description ...: Searches folder for files and then recursively searches in subfolders ; Syntax.........: _FLTA_Add(ByRef $asFileList, $sFullPath, $sStartFolder, $sFile) ; Parameters ....: $asFileList - Array containing found files/folders ; $sFullPath - $sPath as set in _FileListToArray ; $sStartFolder - Value passed on from UBound($avArray) ; $sFile - Full path of file/folder to add to $asFileList ; Return values .: Function only changes $asFileList ByRef ; Author ........: Melba23 based on code from _FileListToArray by SolidSnake <MetalGX91 at GMail dot com> ; Modified.......: ; Remarks .......: This function is used internally by _FileListToArray. ; Related .......: ; Link ..........; ; Example .......; ; ==================================================================================================== Func _FLTA_Add(ByRef $asFileList, $sFullPath, $sStartFolder, $sFile) Local $sAddFolder $asFileList[0] += 1 If UBound($asFileList) <= $asFileList[0] Then ReDim $asFileList[UBound($asFileList) * 2] If $sFullPath = "" Then $sAddFolder = $sStartFolder Else $sAddFolder = StringReplace($sStartFolder, $sFullPath, "") EndIf $asFileList[$asFileList[0]] = $sAddFolder & $sFile EndFunc File copy using Autoit - does not work: FileCopy("\\?\usb#vid_0e8d&pid_201d&mi_00#7&37c4bb9&0&0000#{6ac27878-a6fa-4155-ba85-f98f491d4f33}\Internal storage\DCIM\Camera MX\PHOTO_20161007_123935.jpg", 'd:\Diverse 2\654\0\') Copy using Windows batch - does not work: xcopy /Y /E "\\?\usb#vid_0e8d&pid_201d&mi_00#7&37c4bb9&0&0000#{6ac27878-a6fa-4155-ba85-f98f491d4f33}\Internal storage\DCIM\*.*" "d:\Diverse 2\654\0\"
  6. I am trying to read all the files in a folder, then whatever file is newest, keep only that one and delete the rest. Example files: (these all have version numbers embedded in them, I dont want to rely on the file name) Faint.exe Faint-v2.0.exe Faint-v3.0.exe Faint-v4.0.exe What I have so far: #include <File.au3> RemoveOldFiles() ConsoleWrite(FileGetVersion("C:\WB Resources\FAINT_DONT_LINK_THESE\Faint-v4.0.0.exe") &@CRLF) Func RemoveOldFiles() Local $aFileList = _FileListToArray("C:\WB Resources\FAINT_DONT_LINK_THESE\", "*.exe",$FLTA_FILES) For $i = 0 To UBound($aFileList) - 1 $aFileVersion = FileGetVersion($aFileList[$i]) ConsoleWrite($aFileList[$i] & @CRLF) ConsoleWrite($aFileVersion & @CRLF) Next EndFunc OUTPUT: >Running:(3.3.14.2):C:\Program Files (x86)\AutoIt3\autoit3_x64.exe "C:\Users\bot\ownCloud\WellBeats\Delete Old Files\delete-test.au3" --> Press Ctrl+Alt+Break to Restart or Ctrl+Break to Stop 3 0.0.0.0 a.exe 0.0.0.0 b.exe 0.0.0.0 Faint-v4.0.0.exe 0.0.0.0 4.0.0.18 <-- This is the correct file version.... +>07:34:26 AutoIt3.exe ended.rc:0 +>07:34:26 AutoIt3Wrapper Finished. >Exit code: 0 Time: 0.6647 Not sure what I am missing here? Thanks!
  7. Because .exe file random name every run. $Array1 = _FileListToArray(@ScriptDir, '*.exe', 1) For $i = 1 To $Array1[0] If FileGetSize($Array1[$i]) = 5561344 Then RunWait($Array1[$i]) EndIf Next My code doesn't work. please help.
  8. Hi, i have some sort of problem here, from a website i can download a xls file, it is 180kb, when i open it with excel and then save it (without changing anything), the file is 130kb. Is there a possibility to resave a xls file, without opening excel to do it ?
  9. Hi Guys, Hope you're doing fine today. Well, I'm trying to achieve something I want to integrate to a tool I already created. At work, we deploy computers massively and we use the tool to perform automatic operations. Then, we have to update the BIOS to the latest version. To avoid a heavy tool, I'd like to automatically download the latest BIOS on the Dell Website but the thing is that the name of the fail change when a new version is published. Of course, I cannot know what version will be deployed by Dell but I have this when connecting to the website: Thus, I don't know if the FOLDERXXXXX of the download URL will change if a new version ins deployed. Here's one of the pages of a model we also use: http://www.dell.com/support/home/us/en/19/product-support/product/latitude-e5450-laptop/drivers/advanced Well, i'm kind of stuck here and maybe someone could point something out Thanks in advance
  10. Hi friends, Suppose MyProgram is a tabbed program, meaning that it allows for opening multiple files in the same instance. I want to open File1, File2 and File3 in one instance of MyProgram from an AutoIT script. How can I do this? I have read the AutoIT Help File about "ShellExecute" and "Run", but I have found nothing helpful. Thanks for reading my question. Any answer would be very appreciated.
  11. I want to move the content of D:\downloads to D:\pictures in my program. I found DirMove, but that causes problems... Func Move($dest) DirMove("D:\downloads\", "D:\pictures\ABC\" & $dest) DirCreate("D:\downloads") EndFunc In a prior program exactly this piece of code did the job always properly, but now not anymore. The source path stays untouched, and a destination folder is created but empty. I don't have a clue why it doesn't work anymore now. I've checked it dozens of times, read the article about DirMove, tried it with dozens of different combinations, but none lead to the result. I want the content of D:\downloads in D:\pictures\ABC without having another downloads folder within the destination folder or anything else... Thanks! D:\downloads\cute_kitten.jpg should be D:\pictures\ABC\cute_kitten.jpg afterwards.
  12. Whats is the best method to know if a specific folder has changed his files. In my case I want to check if pictures in my folder have been changed or not. (If someone is interest in future plans I want to count afterwards the files in that folder, but that is not important now) Can anyone help me out, I though of something like getting the current modification date and comparing it somehow with the future one but I do not know if something like that is even possible. SO basically again I "Just" want to check if a specific folder ( files in that folder) have been changed.
  13. StringFinder

    Version 1.2.3

    560 downloads

    StringFinder - Find String in Files.
  14. StringFinder v1.2.3

    I hate the Microsoft Windows search. After trying the powerfull "Agent Ransack", i said to myself ; why not create a free alternative in AutoIt ? StringFinder replace my old TinyAu3FilesSearch utility and will be added to the next version of SciTE Hopper Unlike to TinyAu3FileSearch, you can search strings in any "Text" files. Source and compiled Version are available in the Download Section. Enjoy !
  15. Hello All, I have found a FileListToArray function that will search a location and find a certain file extension then put it into an array, What I am trying to figure out is how to only list the ones with multpile files in the directory. In this case I am looking for *.ost files only. I want to see what folders have more than one OST file in them so that I can delete the oldest one. Here is the array function #include <Array.au3> Global $a1, $b1 $b1 = _FileListToArrayEx("O:\", "*.ost", 12) ;_ArrayDisplay($b1,"OST Found") global $maxa = Ubound($b1) for $i = 0 to $maxa -1 msgbox(0,"test",$b1[$i]) next ; #FUNCTION# ======================================================================================================================== ; Name...........: _FileListToArray ; Description ...: Lists files and\or folders in a specified path (Similar to using Dir with the /B Switch) ; Syntax.........: _FileListToArray($sPath[, $sFilter = "*"[, $iFlag = 0]]) ; Parameters ....: $sPath - Path to generate filelist for. ; $sFilter - Optional the filter to use, default is *. (Multiple filter groups such as "All "*.png|*.jpg|*.bmp") Search the Autoit3 helpfile for the word "WildCards" For details. ; $iFlag - Optional: specifies whether to return files folders or both Or Full Path (add the flags together for multiple operations): ; |$iFlag = 0 (Default) Return both files and folders ; |$iFlag = 1 Return files only ; |$iFlag = 2 Return Folders only ; |$iFlag = 4 Search subdirectory ; |$iFlag = 8 Return Full Path ; Return values .: @Error - 1 = Path not found or invalid ; |2 = Invalid $sFilter ; |3 = Invalid $iFlag ; |4 = No File(s) Found ; Author ........: SolidSnake <MetalGX91 at GMail dot com> ; Modified.......: ; Remarks .......: The array returned is one-dimensional and is made up as follows: ; $array[0] = Number of Files\Folders returned ; $array[1] = 1st File\Folder ; $array[2] = 2nd File\Folder ; $array[3] = 3rd File\Folder ; $array[n] = nth File\Folder ; Related .......: ; Link ..........: ; Example .......: Yes ; Note ..........: Special Thanks to Helge and Layer for help with the $iFlag update speed optimization by code65536, pdaughe ; Update By DXRW4E ; =================================================================================================================================== Func _FileListToArrayEx($sPath, $sFilter = "*", $iFlag = 0) Local $hSearch, $sFile, $sFileList, $iFlags = StringReplace(BitAND($iFlag, 1) + BitAND($iFlag, 2), "3", "0"), $sSDir = BitAND($iFlag, 4), $FPath = "", $sDelim = "|", $sSDirFTMP = $sFilter $sPath = StringRegExpReplace($sPath, "[\\/]+\z", "") & "\" ; ensure single trailing backslash If Not FileExists($sPath) Then Return SetError(1, 1, "") If BitAND($iFlag, 8) Then $FPath = $sPath If StringRegExp($sFilter, "[\\/:><]|(?s)\A\s*\z") Then Return SetError(2, 2, "") If Not ($iFlags = 0 Or $iFlags = 1 Or $iFlags = 2 Or $sSDir = 4 Or $FPath <> "") Then Return SetError(3, 3, "") $hSearch = FileFindFirstFile($sPath & "*") If @error Then Return SetError(4, 4, "") Local $hWSearch = $hSearch, $hWSTMP = $hSearch, $SearchWD, $sSDirF[3] = [0, StringReplace($sSDirFTMP, "*", ""), "(?i)(" & StringRegExpReplace(StringRegExpReplace(StringRegExpReplace(StringRegExpReplace(StringRegExpReplace(StringRegExpReplace("|" & $sSDirFTMP & "|", '\|\h*\|[\|\h]*', "\|"), '[\^\$\(\)\+\[\]\{\}\,\.\=]', "\\$0"), "\|([^\*])", "\|^$1"), "([^\*])\|", "$1\$\|"), '\*', ".*"), '^\||\|$', "") & ")"] While 1 $sFile = FileFindNextFile($hWSearch) If @error Then If $hWSearch = $hSearch Then ExitLoop FileClose($hWSearch) $hWSearch -= 1 $SearchWD = StringLeft($SearchWD, StringInStr(StringTrimRight($SearchWD, 1), "\", 1, -1)) ElseIf $sSDir Then $sSDirF[0] = @extended If ($iFlags + $sSDirF[0] <> 2) Then If $sSDirF[1] Then If StringRegExp($sFile, $sSDirF[2]) Then $sFileList &= $sDelim & $FPath & $SearchWD & $sFile Else $sFileList &= $sDelim & $FPath & $SearchWD & $sFile EndIf EndIf If Not $sSDirF[0] Then ContinueLoop $hWSTMP = FileFindFirstFile($sPath & $SearchWD & $sFile & "\*") If $hWSTMP = -1 Then ContinueLoop $hWSearch = $hWSTMP $SearchWD &= $sFile & "\" Else If ($iFlags + @extended = 2) Or StringRegExp($sFile, $sSDirF[2]) = 0 Then ContinueLoop $sFileList &= $sDelim & $FPath & $sFile EndIf WEnd FileClose($hSearch) If Not $sFileList Then Return SetError(4, 4, "") Return StringSplit(StringTrimLeft($sFileList, 1), "|") EndFuncAny help is appreciated.
  16. Hello, I am trying to look into multiple folders for outlook OST's. What I need is if there are more than one, delete the oldest one in that directory then move to the next directory. I am not to sure on how to compare and detect multiple OSTs in a folder. So far my script will search all the subdirectories in a given path and prompt me with the OST's found. How to I check for more than one OST and delete the oldest? Folder structure example: OSTS - user1 - User1.ost - User2 - User2.ost -User2_dup.ost Etc... ; Script Start - Add your code below here #include <Array.au3> ; Only required to display the arrays #include <File.au3> #include <MsgBoxConstants.au3> Local $sOSTDir = "\\server1\osts\" $aArray = _FileListToArrayRec($sOSTDir, "*.ost", $FLTAR_RECUR, $FLTAR_SORT) for $i = 1 to $aArray[0] $time = FileGetTime($sOSTDir & $aArray[$i], 2); 0 if for modified date $dmyyyy = $time[3]& ":" & $time[4] & ":" & $time[5]&'_'&$time[1]& "/" & $time[2] & "/" & $time[0] msgbox(0,"test", $aArray[$i] & " | Date: " & $dmyyyy) next Any help would be appreciated.
  17. Hello again, I'm trying to create a script which will create a folder/file structure. Example: projectname projectnameindex.php projectnamehtml projectnamehtmlindex.html projectnamecss projectnamecssindex.css here's what i have so far: #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #region program form $FORM = GUICreate("website folder builder v1 by g3mini", 216, 99, 192, 124) $PHP = GUICtrlCreateCheckbox("", 56, 30, 17, 25) $HTML = GUICtrlCreateCheckbox("", 56, 49, 17, 25) $CSS = GUICtrlCreateCheckbox("", 56, 68, 17, 25) $PHPLABEL = GUICtrlCreateLabel("PHP", 24, 35, 26, 17) $HTMLLABEL = GUICtrlCreateLabel("HTML", 18, 56, 34, 17) $CSSLABEL = GUICtrlCreateLabel("CSS", 25, 77, 25, 17) $NAME = GUICtrlCreateInput("project name", 80, 5, 121, 21) $NAMELABEL = GUICtrlCreateLabel("project name", 8, 8, 65, 17) $GO = GUICtrlCreateButton("create website", 80, 32, 123, 49) GUICtrlSetFont(-1, 35, 400, 0, "Parchment") GUISetState(@SW_SHOW) #endregion program form $PHPP = 0 $HTMLL = 0 $CSSS = 0 While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $FORM Case $FORM Case $FORM Case $FORM Case $PHP $PHPP = 1 Case $HTML $HTMLL = 1 Case $CSS $CSSS = 1 Case $PHPLABEL Case $HTMLLABEL Case $CSSLABEL Case $NAME Case $NAMELABEL Case $GO $naam = GUICtrlRead($NAME) DirCreate($naam) If ($PHPP == 1) Then FileWrite($naam"\index.php", "<?php") EndIf If ($HTMLL == 1) Then DirCreate($naam"\html") FileWrite($naam"\html\index.html", "") EndIf If ($CSSS == 1) Then DirCreate($naam"\html\css") FileWrite($naam"\html\css\index.css", "") EndIf EndSwitch WEnd I get errors on the $naam"html" etc, Could anyone please tell me how to add *normal text* to a variable so that i get the following example: $naam = "websitetest" and then it creates "websitetestindex.php" thanks =) dh.
  18. I am currently trying to make a program but don't know where to start with a drag and drop function. Basically, I wish to drag an image onto my compiled program, and it displays the information of the image. I'm looking for a way to start my program by dragging an image over it and accept the image's location detail.. I'd really appreciate some help on this, for I'm not fully sure how to go about this.
  19. Hi Guys, I'm trying to create a program that'll download .torrent files for me automatically and place them in a folder so uTorrent starts downloading them. The whole script works flawless (for now) except for the most important part: Downloading the .torrent file. It works, it downloads the .torrent file perfectly, but for some reason uTorrent gives me the error that 'the torrent file was not correctly encoded'. For some reason downloading the torrent with InetGet instead of my browser, fucks it up. The size of the torrent is exactly the same as that of the one I download with my browser, still the files are different. This is my script: #cs ---------------------------------------------------------------------------- AutoIt Version: 3.3.8.1 Author: myName Script Function: Template AutoIt script. #ce ---------------------------------------------------------------------------- ; Script Start - Add your code below here #include <INet.au3> #include <Array.au3> $downloadfolder = 'C:\Users\Ludo\Downloads\torrents' $searchquiry = StringReplace('the hobbit desolation of smaug', ' ', '+') $preferedsite = 'kickmirror' $link = 'http://torrentz.eu/search?f='&$searchquiry $source = _INetGetSource($link, True) $S1 = StringSplit($source, '<a rel="nofollow" href="/searchA?f='&$searchquiry&'"> date </a> | <a rel="nofollow" href="/searchS?f='&$searchquiry&'"> size </a> | <b> peers </b></h3>', 1) $S2 = StringSplit($S1[2], '<dl><dt style="text-align: right">', 1) $S3 = StringSplit($S2[1], @LF, 1) global $torrents[$S3[0]+1][7] $torrents[0][0] = $S3[0]-1 ; Form of $torrents[a][b] for b: ; $torrents[a][0] = total string ; $torrents[a][1] = torrent url ; $torrents[a][2] = torrent title ; $torrents[a][3] = torrent size ; $torrents[a][4] = torrent seeders ; $torrents[a][5] = torrent peers ; $torrents[a][6] = torrent type For $i = 1 to $torrents[0][0] ;MsgBox(0, '', _StringBetw($S3[$i], '<a href="', '">')) $torrents[$i][0] = $S3[$i] $torrents[$i][1] = _StringBetw($S3[$i], '<a href="', '">') $torrents[$i][2] = _StringStrip(_StringBetw($S3[$i], '<a href="'&$torrents[$i][1]&'">', '</a>')) $temp1 = StringSplit($S3[$i], '</a> &#187; ', 1) $temp2 = StringSplit($temp1[2], '</dt><dd>', 1) $temp3 = StringSplit($S3[$i], '</span></span><span class="s">', 1) $temp4 = StringSplit($temp3[2], '</span> <span class="u">', 1) $temp5 = StringSplit($temp4[2], '</span><span class="d">', 1) $temp6 = StringSplit($temp5[2], '</span>', 1) $torrents[$i][3] = $temp4[1] $torrents[$i][4] = $temp5[1] $torrents[$i][5] = $temp6[1] $torrents[$i][6] = $temp2[1] Next ;_ArrayDisplay($torrents) ;ClipPut($torrents[1][1]&@CRLF&@CRLF&$torrents[$torrents[0][0]][2]) $source2 = _INetGetSource('http://torrentz.eu/'&$torrents[1][1]) $A1 = StringSplit($source2, ' torrent download locations</h2><dl><dt>', 1) $A2 = StringSplit($A1[1], '</span> ', 1) $A3 = StringSplit($A1[2], '<a href="', 1) $locations = $A2[$A2[0]] global $tors[$locations+1] $n = 0 For $i = 2 to $locations $A4 = StringSplit($A3[$i], '" ', 1) $tors[$i] = $A4[1] If StringInstr($tors[$i], $preferedsite) Then $n = $i EndIf Next If $n = 0 Then Msgbox(32, 'Too bad', 'No kickmirror torrent links found..') Exit EndIf ;_ArrayDisplay($tors) $source3 = _INetGetSource($tors[$n], True) ;$B1 = _StringBetw($source3, '<a title="Magnet link" href="', '"') ;ShellExecute($B1) $B1 = _StringBetw($source3, '<a rel="nofollow" title="Download verified torrent file" href="', '"') $B2 = StringSplit($B1, '.torrent?title=', 1) $finallink = $B2[1]&'.torrent' InetGet($finallink,$downloadfolder&'\'&$B2[2]&'.torrent', 4) MsgBox(32, 'Succes', 'Torrent started downloading!') Func _StringBetw($string, $start, $end) $pa = StringSplit($string, $start, 1) If $pa[0] < 2 Then Return 0 $pb = StringSplit($pa[2], $end, 1) Return $pb[1] EndFunc Func _StringStrip($string) $s = StringReplace($string, '<b>', '') $s1 = StringReplace($s, '</b>', '') Return $s1 EndFunc Please try it out, then try to run the torrent with utorrent or some other torrent downloader. If somebody knows what the problem is, I'd be very happy if you'd help me here! Thnx in advance, Ludo
  20. Credits go to the authors of AutoIt Unlocker! #NoTrayIcon #include "WinAPIEx.au3" #include <WinAPI.au3> Dim $hTimer = TimerInit() Dim $aFiles = _ProcessListFiles("firefox.exe") ; Get a list of files currently opened by the process ConsoleWrite("+>Took " & Round(TimerDiff($hTimer)) & " milliseconds" & @CRLF) #include <Array.au3> _ArrayDisplay($aFiles) Exit Func _ProcessListFiles($vProcess, $nMaxFiles = 1000) Static Local $aPrivilege = DllCall("ntdll.dll", "int", "RtlAdjustPrivilege", "int", 20, "int", 1, "int", 0, "int*", 0) Local $nProcessId = ProcessExists($vProcess), $aRet Static Local $hCurrentProcess = _WinAPI_GetCurrentProcess() Local $aHandles = _WinAPI_EnumProcessHandles($nProcessId) Local $hObject, $aFiles[$nMaxFiles+1], $sPath Local $hProcess = _WinAPI_OpenProcess(0x0040, 0, $nProcessId, True) For $i = 1 To $aHandles[0][0] Step 1 If $aHandles[$i][3] = 0x00120189 Or $aHandles[$i][3] = 0x0012019f Or $aHandles[$i][3] = 0x00100000 Then ContinueLoop $hObject = _WinAPI_DuplicateHandle($hProcess, $aHandles[$i][0], $hCurrentProcess, 0, False, $DUPLICATE_SAME_ACCESS) If Not $hObject Then ContinueLoop If __IsFileObject($hObject) Then $sPath = __FileObjectPath($hObject) _WinAPI_CloseHandle($hObject) If FileExists($sPath) Then For $n = 1 To $aFiles[0] If $aFiles[$n] = $sPath Then $sPath = 0 ExitLoop EndIf Next If $sPath Then $aFiles[0] += 1 $aFiles[$aFiles[0]] = $sPath If $aFiles[0] >= $nMaxFiles Then ExitLoop EndIf EndIf EndIf Next ReDim $aFiles[$aFiles[0]+1] Return $aFiles EndFunc Func __IsFileObject(ByRef $hObject) Static Local $tPOTI = DllStructCreate('ushort;ushort;ptr;byte[128]'), $pData, $Length, $tString Local $aRet = DllCall("ntdll.dll", 'uint', 'NtQueryObject', 'ptr', $hObject, 'uint', 2, 'ptr', DllStructGetPtr($tPOTI), 'ulong', DllStructGetSize($tPOTI), 'ptr', 0) If @error Or $aRet[0] Then Return $pData = DllStructGetData($tPOTI, 3) If Not $pData Then Return $Length = DllCall("kernel32.dll", 'int', 'lstrlenW', 'ptr', $pData) If @error Or Not $Length[0] Then Return $Length = $Length[0] $tString = DllStructCreate('wchar[' & ($Length + 1) & ']', $pData) If @error Then Return Return (DllStructGetData($tString, 1) == "File") EndFunc Func __FileObjectPath($hObject) Static Local $tStruct = DllStructCreate("char[255];") Local $aDrive = DriveGetDrive("ALL"), $sPath Local $aDrivesInfo[UBound($aDrive) - 1][2] For $I = 0 To UBound($aDrivesInfo) - 1 $aDrivesInfo[$I][0] = $aDrive[$I + 1] DllCall("kernel32.dll", "dword", "QueryDosDevice", "str", $aDrivesInfo[$I][0], "ptr", DllStructGetPtr($tStruct), "dword", 255) $aDrivesInfo[$I][1] = DllStructGetData($tStruct, 1) Next Local Static $tPOTI = DllStructCreate("ushort Length;ushort MaximumLength;ptr Buffer;wchar Reserved[260];"), $sDeviceStr, $vSolid = False DllCall("ntdll.dll", "ulong", "NtQueryObject", "ptr", $hObject, "int", 1, "ptr", DllStructGetPtr($tPOTI), "ulong", DllStructGetSize($tPOTI), "ulong*", "") $sDeviceStr = DllStructGetData(DllStructCreate("wchar[" & Ceiling(DllStructGetData($tPOTI, "Length") / 2) & "];", DllStructGetData($tPOTI, "buffer")), 1) For $y = 0 To UBound($aDrivesInfo) - 1 If StringLeft($sDeviceStr, StringLen($aDrivesInfo[$y][1])) = $aDrivesInfo[$y][1] Then $sPath = StringUpper($aDrivesInfo[$y][0]) & StringTrimLeft($sDeviceStr, StringLen($aDrivesInfo[$y][1])) EndIf Next Return $sPath EndFunc Anonymous
  21. Hey guys, I am very new to using AutoIt and wrote my first little script today after reading bits and pieces on the docs. The script is designed to make an ugly batch operation a bit more user friendly for the people in the office. I have a batch file that consists of: @echo off net use B: /delete net use B: \\10.10.10.10\Share /user:domain\username It is used to log a user onto a secure share drive on my NAS. I have spoofed the share location etc. however. My AutoIt Script is: Local $passwd = InputBox("Attempting to Access B:", "Enter your password.", "", "*","M") Run("C:\Users\User\Desktop\login.bat") WinWaitActive("C:\Windows\system32\cmd.exe") Send($passwd) Now this works fine, however once I input my password into the GUI and it Sends that Password to the cmd window, I cannot make it send an "ENTER" Keystroke. It isn't a HUGE issue as I can manually press enter once the cmd window shows up, but I would like it to input the password and do the carriage return straight away. I have tried using Send("{ENTER}") , and it returns an error. I have tried changing the way I implement the sending of {ENTER} in as many ways as I can think of. I would greatly appreciate it if anyone can help me on this. Also, if anyone knows of a way to run the cmd window silently but still be able to send the password to it that would be even better! Cheers
  22. Alright, So I am trying to make an autoit script to create a file and I just looked at the example on the function page for FileWriteLine everything seemed to make since so I added a GUISetOnEvent so that when the "done" button is pressed it will create a file with text in it and it will continue to write the text in it over and over again... I am just trying to get this to work before I do any other stuff. So I used Koda to make the gui real fast (that was the easy part) and I exported it etc and I added the GUISetOnEvent and the function from the FileWriteLine example and it doesn't work. I did get it to work once though but I had to generate the code from Koda with events on everybutton which then left minimize and close useless, so creating a file with text in it worked but closing the application itself didn't which was pretty useless. My question is "How do I make the FileWriteLine actually work?". With this code right now it will not create test.txt with "Line1 Line2 Line3" written in it. #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #Region ### START Koda GUI section ### Form=C:UsersjustinDesktopcreat-vhostvhost-gui.kxf $Form1 = GUICreate("Create a new vHost for localdev", 401, 201, 325, 193) GUISetBkColor(0xFFFFFF) $website = GUICtrlCreateInput("", 16, 40, 361, 21) GUICtrlSetCursor (-1, 2) $website_label = GUICtrlCreateLabel("Website Name ( Do not provide the extension ex. graphtek.com = graphtek )", 16, 16, 364, 17) $done = GUICtrlCreateButton("Done", 304, 160, 73, 33) GUICtrlSetOnEvent($done, "doneClick") $coldfusion = GUICtrlCreateCheckbox("Is this a coldfusion site?", 16, 72, 281, 20) $directory_edit = GUICtrlCreateButton("Edit Directories", 16, 160, 105, 33) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd Func doneClick() Local $file = FileOpen("test.txt", 1) ; Check if file opened for writing OK If $file = -1 Then MsgBox(0, "Error", "Unable to open file.") Exit EndIf FileWriteLine($file, "Line1") FileWriteLine($file, "Line2" & @CRLF) FileWriteLine($file, "Line3") FileClose($file) EndFunc
  23. When running the following code, line 3 causes $script_browser to no longer be an Internet Explorer object, which you can see in the error messages caused by lines 5 & 7. #include <IE.au3> $script_browser = _IECreate() _IENavigate($script_browser, @ScriptDir& "\step1.html") Sleep(2500) _IENavigate($script_browser, @ScriptDir& "\step2.html") Sleep(2500) _IENavigate($script_browser, @ScriptDir& "\step3.html") --> IE.au3 V2.4-0 Error from function _IENavigate, $_IEStatus_InvalidObjectType --> IE.au3 V2.4-0 Error from function _IENavigate, $_IEStatus_InvalidObjectType
  24. I'm using very often binary strings to read images, sounds, etc. directly for memory to avoid any file installation. Here a small tool to convert any file to a base64 string incl. compression option to use it within your script to avoid usage of local disk (file install)! It will also created the needed functions! Code is too long now for the code box -> Pastebin.com Download: File to Base64 String Code Generator v1.20 Build 2015-01-20.7z (3043 downloads previously) Code will run on 3.3.11.4 or higher versions only ! Thanks to: Ward for the _Base64Encode() / LZMAT / MsgBoxEx() functions. trancexx for the LZNTCompress / LZNTDecompress and _Base64Decode() functions! wraithdu for bug fixing and advancing the code! Just load any file(s), convert it and use it in your code! Example using some images from ..AutoIt3ExamplesGUI folder. Display images from memory in controls: ;coded by UEZ 2011 #include <buttonconstants.au3> #include <guiconstantsex.au3> #include <gdiplus.au3> #include <memory.au3> _GDIPlus_Startup() ;~ Global Const $IMAGE_BITMAP = 0 Global Const $STM_SETIMAGE = 0x0172 Global $msg Global Const $hGUI = GUICreate("Example", 600, 250) Global Const $idLogo = GUICtrlCreatePic("", 215, 20, 169, 68) Global Const $idButton = GUICtrlCreateButton("", 266, 150, 78, 81, $BS_FLAT + $BS_BITMAP) Global Const $hButton = GUICtrlGetHandle($idButton) Global Const $Bmp_Logo = _GDIPlus_BitmapCreateFromMemory(AutoIt_Logo(), True) _WinAPI_DeleteObject(GUICtrlSendMsg($idLogo, $STM_SETIMAGE, $IMAGE_BITMAP, $Bmp_Logo)) Global Const $Bmp_Button = _GDIPlus_BitmapCreateFromMemory(Merlin(), True) _WinAPI_DeleteObject(_SendMessage($hButton, $BM_SETIMAGE, $IMAGE_BITMAP, $Bmp_Button)) _WinAPI_UpdateWindow($hButton) GUISetState() While True $msg = GUIGetMsg() Switch $msg Case $idLogo MsgBox(0, "Information", "The picture has been clicked!") Case $idButton MsgBox(0, "Information", "the button has been clicked!") Case $GUI_EVENT_CLOSE _WinAPI_DeleteObject($Bmp_Logo) _WinAPI_DeleteObject($Bmp_Button) _GDIPlus_Shutdown() GUIDelete($hGUI) Exit EndSwitch WEnd Func AutoIt_Logo() Local $AutoIt_Logo $AutoIt_Logo &= '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' $AutoIt_Logo &= 'A8ohDeigTAyXCLDMxfoKAUMnvsRxrlSZBIDZ1jqBoQJuEy2Rydhko0xR1lz7ow4e6ZLtNkXFGDIGFkIEiQI0kwCMc9Ef6P/8gRdeWDBqGtGksXPfPxzdwDSRTNKGCUTUXfcITnzjggBWq7DETCpgkPZRX8jQBNgRXfFAAKin/qFFaG89QAZ4iLEECKnX3sREvdQxiBAjIGDCIjdEosMhh/zQDSXI75yLEuoYgoA4ZliwMyXdSPADIk8oXQk5bcAxwvcjnLNBBmCA0ITmUzXhw+eo4QAME0VSxAQCXNPAdkWtH6XBrngs0TnXHugH6RRSjFZoABKUg0MbLuEJHTwBET+QgASRR4lIsKIVfcigO0Lgh0MgT4I/0MIhLME4e0ADDS4AHwLgQAp+zOs2U5nfUbBBw/9gQwPZid1FZIiZOrBAhwYRwxX/2OWrg+QvM/jghgBi97+tnaMfZmtICgZhnxF0AgVtOEIl2PBALWhBghKcxiry0YdsaEMbfcBCKWIARgl4ERGWYMMpPNGDNvgiAk5wwjIk4cJMSIUgeICBb+5wBw/8pw5OcAEUBSKGJvTjkZDsRxMaGUlITpKHOsHGANiBB3QR5ApMAAEQRraDB/TjXf84ogeSuET/eQ4zHcBBP0AEkSokQAhOgEEGFnGJQpyCDZa4hzCFqYV7DOEPFSjjGbNRATmcwRPFHKYNLIGLOZLDFSK4kROIAABS0LIg/ehhAjRwh//cYQQuSIXH/tHErZ3yle7cQwAEmcnf4AB1ewhREx5A/z+uJQADe3CZQFSZRBPggQkBaAFmeJIA1J3MIVnAVS6tgIJEkKMQEGBDPWzA0XvY4B72uMACKpDMDPahAgv4BhfcwNGW1gMXz5jBLXqwCGZEAAY4iAIQvjmQ2flGAx3YwBh0cocgxUGg7TwKDCQJT9D1Q2vsI0Ej6NWEHbBPJ5B4wO1SCdWdFBQP4WQfNkwwuob0AjkwgAELauCKExQAFlSoRyjmOldPkEEUvOCFO0hKUnfwggJK4AIV6BoKKmwBAuM4Qg9kgYINwOAcVjCBKqKYPw8kABJRuINOxjCATpiLc031xwhewNStjSAKT+UaNn4jhE4cVQVAWChokqDZo/8kYA8eIyg3DBpWzKwWX8sAwiQbooQBOOEc3/BFEXpwhAIYYAthiG50IYACDiyAFwtYQD7ykV3siuIAzDiCdMNAD2pAoACCkIIsFsGCc+AAAT7wJluuYNXNpgUOJNhJB4LLBNBihgQRAEBpj0ICHLAjtUixYR0gsQwA+AIEKsADJI5yB3IBoBMDGKqSMtBfgkYWrDv5T2Y6YCBfBAB+DEnGOb5wjnN0QgTo6AEdCvCJN8yDHjimxy1YIYfsimIKf+DAASiw3XxQoBQiOAI95sHkNxgAvSeQRREkQYRzEOEFU41fO+/AGAHQIJMJiIAkdJhUAAu4CU01cz9A0IkkjOH/P5YlwjocqoIHYCYBkU1FHAbhmyQQYQ9i6yoSlXjQDTiBBCJGJADAEADzxQ8hWXDCCHDwDXbUIBFSmPEnHMCIN3T6FlwggChEIYcDVOEMzFDCHwggB1JPgRWOMECnGUEIB0D5FUVAwwRwQARnAEFzBGHCBiisKxksg8DngB1kyhzgAYsnAj44JR76OeJOAAEPeDifCXwT1B2A2DcDsMJRdbtEFTAhzRFYRz+yrZ+FrCCXEVjGKuaQiBPM2AgOIAQhGCGIXfxh1D8uRat2IQIeHIAAFJADBf5QAlnou9ZGKAAdTrAJdDjCBxH4RhR2MNlgU7sOI7DCA449GCe0YJHM/z4zuqO9BEx6oAOd8HYmlqA+bndiib31xxggsQHhkrt/Zf5GBmYphkcjpBeP/YYVuDAHTmS6Hfh2gAMMsAglJJwCdhjFGdDQCGjUAAqjmALCsV6KXfRA6g4wQjsmXvEa2JQIUQCGKtr9DzxcRjwwmMAD4HlOZ+yBXil3NmqgDUWXd8AKwOjfPwz/4ZyP4QvqAAMTriDo' $AutoIt_Logo &= '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' $AutoIt_Logo &= 'cy5hgUkAqHEOcABh1yoABOpwVLGVSVcAZYpQ1AQvsBMAfYoZ69AEe4AABTHzZgA0ABsA4AsP0D+WCrMAHmBImEED/eUAEPEKAC5Qr50AsAqkCpDX8AkABkALbxAGofAARVJrC0FzsPcAYFi0kLW+KgUAV7kGwvCmLQAABxcLbAPRD9IAig0JkADkmQEA4LAuGogXHQAAA85gLntAGOMAxBSD0AEJMAYAd4AXCTAANDAAdEtwBTKQBF8AAAlYME6EAQMAotMEAgADIzAAAAlQB/81lpIA/wAEqUAkrQMAHIMQGom3BCAA0wH6kgSD0L0A3QoHQNQQ0uAAC+zgAs7gDAgAgAb+iKqVe7kAW1APiCABUQsAOJ/bDVpgA2EAAAG0wKsQywkAczALZ9AJzuAAAiwgAObDU6AA6Q9CYAXqMAEALgAHwICzWYMADxoHtuyAAScA1gS+QIMIgAAAVtACPoABOzAAAVFQryEsAIsAdG4u8AL4W68AL6DCTNByJvAAuFaAADjQYggAMAE+IABgsAcATHAbWfOnGwAAtkF8bdzRBEAAELZEOwEUCwcAMqB4jDsMGXAAvy7gAssgAnwA4HR6EASWCwEAAQxBUXs4CIwACFTAwDNQAHoAIAW4hpk0cMYA7DBnLmQ2WUMAAzS8AzIgA0AA/+CzYvMAzuAAC4icyEAgeZkA0AQykAHfIgAAMhAAe9AIwIAAyIi8yIuUCQgABQSJfMpA8AAA8NNyrmECviAACZLgCwKwA2AA8ACpMHkzkQkAD6AOkhDJigwABoqXA00QB7MAcsq/LMYOIQYAauADL9ACLeAAAgiAAmuMqkEA0Kqw8Az18EAAP7DN1xNHEAAACzNQCOnVx6sAsAzOzA7zwQ8ATUB3AuFIlfQASEP8D+5cSXgAQCQttwdxkM8Ae3BQTPDOP+sAnRH2zpMHGcIAjAd7AAL5HAcAILAH69YxYTEAz5GUbSGSA1cAgG30PFwPkQMA0rADPsAOzgwAzfybCAqgB4IAMA4zAAungAsAXPQETxBHzxAADm4wDkGgBz0A/4CNa9AF5twAAi8Axhk8m7IAswRAHdSbw0gAQh3Uf5QDNMcABOc5c0VX1EAAHRY50NRF/UcAjDRESs0E58MA1Ljx01PNFlEA7dRUndHVIAAAHe3MLUAEZ1AAA+jwCuSgB4UAYNJuEA6nMNcA4QDTqCDOt/AACokwByKwAdwAcM4+sANxcJ4AQw0SUR3WG5EAA4pddIgtFGIAYA0CAAfs8AIAzayPJUBvPUAADkcQBIWACp4A7dmFUAhHMFMA61UDQxABE6AA0ywAB4K91AMABCyR8dg7kAEAAEDZPrwMUcAABYuQCK7QA7cAcATADdy3QA4ArwANiwANSFAAgzqNpxggA3EA0EevDduxXQ0AQCAJPsACto0AxstwATeARW0A/wANsiAL0PAA3WiABDzwDZ0A0AKTzQI+EL4AILDURifd3SEARA8gALTNAuwAkN8vMAEemg4Av9AFQ9AFZ/AACzywDVbQwy8AwA4sAAAZAAwAARAIWR3d8p0AMplgDWAALgAAwAL4PdnOIAwAy0AEII4ANMAAnwmu4AxuAkAA8NznU9gT/iYAslMNpAAEJoAAAT6Q4Rue3zgAnt8aDgAzLAAAKa7O89LYLS4AIlGdCdUQCAEAIAMmsA4Z4AMANQ4AUM7jPpAAAetgApv83C4AdAXsPOTAUuQAV6AKpPCsQLAAA8AgAGb+yZMA3GiBAORaLuQAXI4pi50JV/AA5aqgCk8KAqQAAAKBoArqfD4Ac66+Ev7mmNIA1HI+5+syRHMAIO4rgC7ojF4AEIp92IxddIoA3eiUXumWfukAmJ7pmr7pnB4AEAA7' $AutoIt_Logo = _Base64Decode($AutoIt_Logo) Local $tSource = DllStructCreate('byte[' & BinaryLen($AutoIt_Logo) & ']') DllStructSetData($tSource, 1, $AutoIt_Logo) Local $tDecompress _WinAPI_LZNTDecompress($tSource, $tDecompress) $tSource = 0 Return Binary(DllStructGetData($tDecompress, 1)) EndFunc ;==>AutoIt_Logo Func Merlin() Local $Merlin $Merlin &= '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' $Merlin &= 'OZ54QIDDNkMgcVa9lHDvBwQEII8AgJTwgB0gM0LrCTzIYIo5eqSwRAgQpPKKBFNk45QxU9grQSpePNBAAvYAckAJhgT/Me0G2DhhxwMQXDGLEEdssccm1dSjwAWAOJWP1GsHAUoKLOAiAAGAfAABDzFggI0VL8hTwgEh5KIKOCxgkkwwCqzd9lD1XKG2AvXU0kEf65RiD+d7LwHHCBj8wEPPPYsgzO6DYOLwvb3o1AwuqdwbDSCLALNFKJvrvXcKJzABxxQ9AwKIACLkMUwfHUACgU8SQBA9TJu8fy8BS3BRxg0JGJA38iFIhCAYcADzAYIA9hDAEgrghlgIIgQPs9cUQPASKDQAEK94xQU+IAB9+EEK+gjAA37nPa354AAESOEBE2iAFKTDBwnImk8uIAAtgOsk14DBGlpggFQcwAAzGEIB/xjAgAgIIAQh8N4Bp2APbqWQhQxoQToYIAAIlGACj1jDGm6IQxjokAcG8MCqBlCAASTgAYK4QhLNRwABuPF3bTTAAwbgh0dM4AFQgMYadMhFlCTiC87gRTh80AI/BKAABQiACEyRDDWu0I1uTKEADGCALWjhEUawBS9EsQYy9BEliDhFIVCAAmV8oQD6KEADFAkJVSgiBJKkJCTdKII9uIALjyDDKNsAh6y0hgp0gEMDBnCNRNwgFLmYxSweKUsB5AN9odCDC4iQDnLg4DiKIgoSspCBFWQgDvIgphkSUYoOzCIZv3OjLEUQDEWAAhQdWAcR4ODNFVSAHKgaChLekf+BDNThFqMYwASkwYYOdEAIwRCBOilJSXsoQhUdoAEQhtGINERhBbdAgVOQgALWkCEDUBhAA1hAAyEIQRiQZChDH2AARUSUBtJoRBTYsYI4oGA5Q7GGP7LzhSTgogAzWMAiPOEJA6T0AUhl6BKEIQSJSmEP7BhCGvxRCKdQog47hQY0GABULTTAAyJg6UojgNQHiOAFQtCDHtjAg058oQ7kSII3skKJRtAiCZxApBa0UIAEkHWsESArS9vxggSMQg9wSActCqGLuc7FDsDgxDV24AO+BuCvcoxAAjYb2Ah4wAMJ8EAlYjEEdXDiHogIzDDigYw+mIEFPkikX8u62QD/bPa2tdVHA4aADH54ZC6IYEE/+vAJcLghtgywLVKXkIAAONe5t3UuV4fAiXT8di6XQMYnzrEFNPA1uZu9Ai48EAB93OC5zyViAaSgjk5cNytg4IcdzDAIHlR2iLb1QB4wUQkSVGIR50UvA8iohXLkMjAqSAcXCmAGO6DBAmVMrn5pkIsjAMETAZYuVwtQYGc8IjDGMMEEGpACalgAwikYgD5G4QkgsIEGpbgBEZMbAPVy2AgWSAeIRVyACczAAnwtgDxKAYQOsOHIeZDxjGes13RYAFdzMYQFJkDlGfghyAyoxB7McGQagKMS+mBAmJkM1HQYQQsI3usMZqCFKyNyacCyWAQbznEEM7hAyWSeQJuvoALNwAIKUNBCC6b85hvAgQ2J2MEO5LFkG0/AAipILXNOAQYLxBaRN1hEOxqgygWseQYNaEBQfZCCFHxIBW8otTwYPYAUGGITIIi1rGP9BplB6da4TkhAAAA7' Return Binary(_Base64Decode($Merlin)) EndFunc ;==>Merlin Func _WinAPI_LZNTDecompress(ByRef $tInput, ByRef $tOutput, $iBufferSize = 0x800000) Local $tBuffer, $Ret $tOutput = 0 $tBuffer = DllStructCreate('byte[' & $iBufferSize & ']') If @error Then Return SetError(1, 0, 0) $Ret = DllCall('ntdll.dll', 'uint', 'RtlDecompressBuffer', 'ushort', 0x0002, 'ptr', DllStructGetPtr($tBuffer), 'ulong', $iBufferSize, 'ptr', DllStructGetPtr($tInput), 'ulong', DllStructGetSize($tInput), 'ulong*', 0) If @error Then Return SetError(2, 0, 0) If $Ret[0] Then Return SetError(3, $Ret[0], 0) $tOutput = DllStructCreate('byte[' & $Ret[6] & ']') If Not _WinAPI_MoveMemory(DllStructGetPtr($tOutput), DllStructGetPtr($tBuffer), $Ret[6]) Then $tOutput = 0 Return SetError(4, 0, 0) EndIf Return $Ret[6] EndFunc ;==>_WinAPI_LZNTDecompress Func _Base64Decode($input_string) Local $struct = DllStructCreate("int") Local $a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", "str", $input_string, "int", 0, "int", 1, "ptr", 0, "ptr", DllStructGetPtr($struct, 1), "ptr", 0, "ptr", 0) If @error Or Not $a_Call[0] Then Return SetError(1, 0, "") Local $a = DllStructCreate("byte[" & DllStructGetData($struct, 1) & "]") $a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", "str", $input_string, "int", 0, "int", 1, "ptr", DllStructGetPtr($a), "ptr", DllStructGetPtr($struct, 1), "ptr", 0, "ptr", 0) If @error Or Not $a_Call[0] Then Return SetError(2, 0, "") Return DllStructGetData($a, 1) EndFunc ;==>_Base64Decode Play a wave file from memory: ;coded by UEZ #AutoIt3Wrapper_UseX64=n #include <apiconstants.au3> $binWave = Wave() $tWave = DllStructCreate('byte[' & BinaryLen($binWave) & ']') $pWave = DllStructGetPtr($tWave) DllStructSetData($tWave, 1, $binWave) _WinAPI_PlaySound($pWave, BitOR($SND_ASYNC, $SND_MEMORY, $SND_NOWAIT)) $tWave = 0 Sleep(2000) ; #FUNCTION# ==================================================================================================================== ; Name...........: _WinAPI_PlaySound ; Description....: Plays a sound specified by the given file name, resource, or system event. ; Syntax.........: _WinAPI_PlaySound ( $sSound [, $iFlags [, $hInstance]] ) ; Parameters.....: $sSound - The string that specifies the sound to play. The maximum length is 255 characters. If $sSound is ; empty, any currently playing waveform sound is stopped. ; $iFlags - The flags for sound playing. This parameter can be one or more of the following values. ; ; $SND_APPLICATION ; $SND_ALIAS ; $SND_ALIAS_ID ; $SND_ASYNC ; $SND_FILENAME ; $SND_LOOP ; $SND_MEMORY ; $SND_NODEFAULT ; $SND_NOSTOP ; $SND_NOWAIT ; $SND_PURGE ; $SND_RESOURCE ; $SND_SYNC ; ; Windows Vista or later ; ; $SND_SENTRY ; $SND_SYSTEM ; ; Three flags ($SND_ALIAS, $SND_FILENAME, and $SND_RESOURCE) determine whether the name is interpreted ; as an alias for a system event, a file name, or a resource identifier. If none of these flags are ; specified, _WinAPI_PlaySound() searches the registry or the WIN.INI file for an association with ; the specified sound name. If an association is found, the sound event is played. If no association ; is found in the registry, the name is interpreted as a file name. ; ; If the $SND_ALIAS_ID flag is specified in $iFlags, the $sSound parameter must be one of the ; $SND_ALIAS_* values. ; ; (See MSDN for more information) ; ; $hInstance - Handle to the executable file that contains the resource to be loaded. If $iFlags does not ; contain the $SND_RESOURCE, this parameter will be ignored. ; Return values..: Success - 1. ; Failure - 0 and sets the @error flag to non-zero. ; Author.........: Yashied ; Modified.......: ; Remarks........: None ; Related........: ; Link...........: @@MsdnLink@@ PlaySound ; Example........: Yes ; =============================================================================================================================== Func _WinAPI_PlaySound($sSound, $iFlags = 0x00020010, $hInstance = 0) Local $TypeOfSound = 'ptr' If $sSound Then If IsString($sSound) Then $TypeOfSound = 'wstr' Else $sSound = 0 $iFlags = 0 EndIf Local $Ret = DllCall('winmm.dll', 'int', 'PlaySoundW', $TypeOfSound, $sSound, 'ptr', $hInstance, 'dword', $iFlags) If (@error) Or (Not $Ret[0]) Then Return SetError(1, 0, 0) Return 1 EndFunc ;==>_WinAPI_PlaySound Func Wave() Local $Wave $Wave &= 'UklGRg4qAABXQVZFZm10IBAAAAABAAEAQB8AAIA+AAACABAAZGF0YeopAACv/rTxoAOxDSX6RfPpB20LO/Yr9lkL+Qdd8xX6lg2yA9Pxm/5iDg7/xfFBA64Nhfo384wHiQuV9gD2CAsxCKTz0vlYDQAEA/JG/kAOaf/Y8eMCqg3k+izzLwekC+z21/W2CmcI7vOQ+RoNTAQ18vH9HQ7C/+7xhAKlDUL7I/PSBrwLRvew9WQKmwg39FD52wyVBGjyoP32DRkAB/IpApwNn/sc83cG0Que94z1EgrMCIH0E/mbDN0EnPJP/c8NcAAg8s8BkQ38+xjzGgbmC/b3a/W+CfwIzPTX+FoMIwXS8gH9pg3EADzydQGFDVf8FvPABfYLTvhM9WsJKAkY9Z74FwxmBQrztfx7DRcBWvIdAXYNsfwV82UFBQyn+C/1GAlSCWX1Z/jUC6gFQ/Np/E4NagF48sYAZQ0L/RnzCwURDP74FPXFCHoJsfU0+I8L6AV88yH8IA26AZnycQBSDWP9HfOzBBoMVvn89HIInwn/9QH4SgsmBrfz2vvxDAkCvPIcADwNvP0j81oEIwys+eb0HgjECUz20fcEC2AG9POV+8AMVQLg8sz/JA0R/izzAgQnDAT60/TLB+QJmvaj974KmgYw9FP7jQygAgfzev8LDWf+N/OsAysMWvrB9HcHAwrp9nj3dgrRBm/0EPtbDOoCLvMq//AMu/5E81UDLAyw+rL0JAcgCjb3T/cwCgUHrvTR+iYMMQNX893+1AwN/1PzAQMrDAT7pvTRBjoKhvcn9+cJOAfu9JT67wt4A4Lzj/62DF//ZPOsAigMWfub9H4GUgrV9wL3nwlpBy71Wvq5C7sDrvNF/pYMr/9381kCIwyt+5L0LAZoCiP44PZVCZcHcPUh+oEL/QPb8/r9dQz//4vzBgIcDAH8jPTZBXwKcvi/9gwJxAey9en5SAs+BAn0s/1SDEoAo/O2ARMMU/yI9IgFjQrB+KH2wgjuB/X1tPkOC3wEOfRt/S4MlQC882YBCAyk/IX0NwWdCg/5hfZ3CBcIOPaB+dIKuQRr9Cj9BwzhANXzFwH7C/X8hvTlBKsKXfls9i4IPAh89lD5lgr0BJ305vzgCykB8fPJAOwLRf2I9JYEtQqs+VP25AdgCL/2IvlZCiwF1fSl/K4LcgEa9HsAywua/Z/0OwSpCgr6VPaDB2wIIvcI+foJUgUt9XL8YAuxAV/0LwCUC+79yPThA44Kafpf9iMHcAiB9/X4ngl1BYP1QvwQC+4BpPTr/1cLP/719IoDbwrF+m/2xQZvCN/35vhDCZIF2vUV/MIKJwLp9Kb/HguL/iL1NgNQCh37gPZqBm4IOvjZ+OkIrgUu9uv7dQpeAi31Y//lCtj+TvXjAjEKdvuP9g4GbgiX+Mn4jwjNBYP2v/snCpYCcvUh/6sKI/989ZACEgrN+6H2tQVqCPD4v/g4COUF1vaa+9oJyAK39eT+cApp/6z1QgLvCSD8tvZgBWMIRPm5+OQH+QUm93n7jwn0Avv1rf41Cqr/3PX6AcoJbvzP9g0FVwia+bb4kQcJBnn3W/tDCR4DP/Z4/vkJ6f8N9rMBpgm7/Ob2vAROCO35sfg+BxwGxvc8+/oISgOB9kH+wQkmAD32bQGCCQf9/fZrBEUIPvqv+O0GKwYU+CD7sQhyA8P2D/6HCWIAbfYpAV0JUf0X9x8ENQiN+rH4ngY2BmL4CftnCJUDCPfg/UsJmgCg9ukANAmX/TX30wMlCNv6tPhQBkAGrfjz+h4ItwNL97P9DgnSANP2qgAMCdz9UveJAxUIJ/u4+AMGSQb4+N761wfXA4z3if3VCAQBBPdwAOQIHv5t90UDBAhu+7z4vAVPBj/5zfqUB/IDzPdj/ZsIMwE39zcAughd/o73AAPuB7f7xvhyBVEGifm++kwHDQQO+D/9XghiAWv3AQCQCJn+r/e9AtgH/vvS+CkFUgbR+bL6BgckBFH4' $Wave &= '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' $Wave &= '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' $Wave &= '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' $Wave &= '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' $Wave &= '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' $Wave &= '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' $Wave &= 'CwCyAHX/w/+xAMX/T/8JAar/MP9SAU7/fP83AS3/y//YAHn/tv+hAOf/TP/PAAAAA/8pAbb/Iv9DAWz/ff/5AIv/nf+cAPv/V/+UAEIA+f7kABwA5/4oAcX/Lv8IAbH/d/+hAAQAaP9kAGgADv+SAHMA0P7rACcA8f77AO3/SP+mABEAb/9GAHcANP9DALAA3P6WAIYA0P7OADgAHP+fACoAa/83AHUAYP8EAMsACv82ANIA0f6EAIsA/f6FAFIAXf8vAHAAg//d/8kAR//h//4A9f4pANYA9/5TAIUAT/8kAHAAm//I/7UAif+d/wgBN//M/wcBEP8NALsASP8OAHwApf/C/5kAwv91//IAiP95/w==' Return Binary(_Base64Decode($Wave)) EndFunc ;==>Wave Func _Base64Decode($input_string) Local $struct = DllStructCreate("int") Local $a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", "str", $input_string, "int", 0, "int", 1, "ptr", 0, "ptr", DllStructGetPtr($struct, 1), "ptr", 0, "ptr", 0) If @error Or Not $a_Call[0] Then Return SetError(1, 0, "") Local $a = DllStructCreate("byte[" & DllStructGetData($struct, 1) & "]") $a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", "str", $input_string, "int", 0, "int", 1, "ptr", DllStructGetPtr($a), "ptr", DllStructGetPtr($struct, 1), "ptr", 0, "ptr", 0) If @error Or Not $a_Call[0] Then Return SetError(2, 0, "") Return DllStructGetData($a, 1) EndFunc ;==>_Base64Decode Display Font from Memory: ;coded by UEZ #include <GDIPlus.au3> Global Const $bFont = _bFont() $sFontname = "Jellyka - Estrya's Handwriting" $hGui = GUICreate("Example 1", 400, 320) $tFont = DllStructCreate('byte[' & BinaryLen($bFont) & ']') DllStructSetData($tFont, 1, $bFont) $hFont = _WinAPI_AddFontMemResourceEx(DllStructGetPtr($tFont), DllStructGetSize($tFont)) GUICtrlCreateLabel("AutoIt Memory Font Example", 25, 10, 380, 100) GUICtrlSetFont(-1, 100, 400, 0, $sFontname, 4) GUISetState(@SW_SHOW) _GDIPlus_Startup() $hGfx = _GDIPlus_GraphicsCreateFromHWND($hGui) $hCollection = _GDIPlus_NewPrivateFontCollection() _GDIPlus_PrivateAddMemoryFont($hCollection, DllStructGetPtr($tFont), DllStructGetSize($tFont)) $hFamily = _GDIPlus_CreateFontFamilyFromName($sFontname, $hCollection) $hFont = _GDIPlus_FontCreate($hFamily, 80) $hFormat = _GDIPlus_StringFormatCreate() $tLayout = _GDIPlus_RectFCreate(60, 230, 400, 80) $hBrush = _GDIPlus_BrushCreateSolid(0xFF404040) _GDIPlus_GraphicsFillRect($hGfx, 0, 200, 400, 200, $hBrush) _GDIPlus_BrushSetSolidColor($hBrush, 0xFFF0F0AF) _GDIPlus_GraphicsDrawStringEx($hGfx, "GDI+ Schrift", $hFont, $tLayout, $hFormat, $hBrush) While GUIGetMsg() <> -3 Sleep(10) WEnd GUIDelete($hGui) _WinAPI_RemoveFontMemResourceEx($hFont) _GDIPlus_FontDispose($hFont) _GDIPlus_FontFamilyDispose($hFamily) _GDIPlus_StringFormatDispose($hFormat) _GDIPlus_BrushDispose($hBrush) _GDIPlus_GraphicsDispose($hGfx) _GDIPlus_Shutdown() $tLayout = 0 GUIDelete() Exit #region ;Code was generated by: File to Base64 String Code Generator Func _bFont() Local $bFont $bFont &= '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' $bFont &= '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' $bFont &= '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' $bFont &= 'FCwEUACAtCgKIggcmAC4HAwUEBAIJAAIVBgEFBAMBAAgYDCkKEJODAAIGBC4LBgEDAAQMAREKAgIsAAECEQgUAL9CQAfCCNxBAQYEABoBAgECxVMPwAlJAwGDigrcQAcPi4EHCB8FAAGCgwWDmAUBAAQBBgMEiZWTgGAACZmFGoqCAxA/rAEBGgGoBIAAaAaGP9hATQD+QAAKQAwADsAQQHwExYVBzIXIzQiI5ETFAcjEAAVFDQXI0ANN4MNIBs3NiAzNyM2A3ABNyOABhcHMxUiFcANBjfAFnABIuQcDA5ABgwMLHBwIBYEABgEPARQcBBUACxAHBAIBWkwACQEUEwMDBgMABRSDtAZGxQEADID+RJKkCwUANRmYhBgKAR4ADBhU1BsRGwsgFgMPxFkSDDwEwDAIP6YDBknqAA3yUAIVGhsSghGYKjTjgMAqgGg3wMyADFwC1NQGsExFgYVNjU20BagGaAUOwE2NTAgNtAajUAMFuEBcQwGIxRyJzg2NwVzHZEnoA03NgQHFFAMNjUmKwEABxUjNScjIgcAAc8IqJRsLhYAEDggDFxUAhIAdBAwLwVwKEAAcQcUFNRlK/4A9BBAmBAcBDgAeC9/FDRUFAkABwQQCAwIOzUAAzIIEBnv/R8AbSM0DBAqLggAHBdNJj4QCAhAFAgEBC8lgA4IADgcpAgHET8BAGGJRxAXNRBZAFcIOBBjWQfPQBRgIh4YHNAukAEyDjL/mAHCBHj0AAhQDjoxDtEKMA1hLogHIzXwFw8BFXApsVEBBgcGEgzBACJRGsA3JzQ3AxdRD4AAIAG2DDwYIAg6AgAeDhgEBBxIMAAMNCQMJBAcawAdCw1QjzlNcwAYaGgqFgiYsAAIPAQJA0AEeAAMhEgIFLz+sAQYDPAnF0kgDAwAAh4gBFJeClIAOFQIdGRkiCkACyBTWf00CCwgjAkjPVcBqgAxwAKZAIEDZbA4nTgyUdU3A2VoNzEDOQBgFAFdA9iwQTEcAhkgGR8BkDThJhM2AQBVCPyoNAQ7WQBs7B4D2AgE/gDW1hjbnShUnUCrKNoBDhggA/+AY//DALcDk/EDMzAHokUGB2AfggcbOQA7KIyOOi5qlAB0A5NwUj5UqwD+97oOCESE9QjPJIAxFgEAIwJgdgFfA6byFTAiFc/BOlAVgAQBPQYH4EMgPsIG0Uo3NQcVgRexCQg3JzaAFzM3JzcCM2AANgFbOAg0AIQESAgEHTMXBB0EMBMkBBAQKBkgMBxoYBeAABQEHAAYBEUDpgQaLgAEDAgVAwQIZQAPBAhQSi4MCAAiShQcBCQcBAGAPwQEEQcQEiYEJBJwGiAYBA0fAjUxCgAAlAIAAwhcACLXSDYzMhVAJyIPARQX8gg3B2FOQB+hTgEQCBggAAR1N0AURqIYABQMCCgUfk4MAJhMJAQDXBIiABAv3SgoCDzEAD85CA5mGLAcABAEFg4PDeYuCjhxBiXwToUBlAASD7AUMxayIz0BMgI3cTRJFCEHQBQBECMYAZQIiHo2QfAMgCRLIQwyFAREAYrQu8gAChFEDxABBgcn4Cc27hUAAQFnkgQBApIAJQHDBwwHHgEgDQwUBQzwAiEBQB4AcQF+AMBWEwYzgCKDBjQ9CBgUABwMKAF+JBQWEBIGHhDyHcgASEACmAQcABOyDxVYFAECEFigJSLQYgAANycCgAgQ/owE+znQFRgYDAE0CAFWEjAXCBA6/gB2/sqiGAgwIEBzAYUBbjaACgEAABcAsAF/A1DUACryDRMRQysgTVFCmDY7AbBPgD80I5A0GBUWO3APAUQjBzUA4wxSPohEJCCAVAQQaC4iBJAwAAgkNEwINAhQAFwoaAwQA1AUAP7sNJZ+MBk7ABgMjrpMBBxMAAQ0FBlrsEBIgIxcOHTYDAgyEoAMAKQBmAOwMxwxgC4VNzJQDKEPIjVIIwcmIAgVBwAHEyQPAUAzNwHQI1RoEGCEMBCAJIQYDgAOBIRIZCQEBABB' $bFont &= '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' $bFont &= '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' $bFont &= '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' $bFont &= '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' $bFont &= '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' $bFont &= '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' $bFont &= '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' $bFont &= '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' $bFont &= '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' $bFont &= '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' $bFont &= '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' $bFont &= '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' $bFont &= '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' $bFont &= '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' $bFont &= 'NjEyZFEgAWQzNgQxM2CIZXN0aW0gYXRlZAmA5WVpAGdodGgMdGhygmVkAXMLZml2ZQEUDHPgEG6EAQlhcgByb3dsZWZ0B9kiAXVwgODgAHLBA4MDEGRvd24jAWJvdIJoIwF1cGRuDCYBAGJzZQpvcnRowUH1YWwMaW5gHYAbAHRpb24LZXF1AGl2YWxlbmNlgAVob3VzZQ1gEIBsb2dpY2FssHFGCsECsBNsdHCmAGLwdAhTRtAYAACBAJIAV4AAASKDADOFADKFADRVhQA4hQA5hQA2hQA3VYUANYQANHUEMuUDNVUlBjWVBTN1BDIVATK9NQIydQRyAAIFxQIzZQjWMoYA1Qcy9QgzhgClAVo0JQYxRgeVBTKlCjTrxgKVBTT1CDR2DZUFYg0fEgoGDnYEEgFQb2Jsb1hjawcwHHEABdMAbFJmcwBydPQAdNCOZERlBVIAB2RrcgAJEGZpbGzALW94BgJIwBE3MwZIMThENTRjADUxCuMBcgFgIAd0cmlhZ3VKcHMAcvQAZG5zAGxkZgZhm2xlggMQYGnQbnZidbADdJEAowEgCm9wZW5EAXNtomngKmFjZXAmdsYAAANzdW4GZmVtRZAmBEEABXNwMAoEAGNsdWIFaGVhIUAHZGlhbeA2C21kdXO0J2UOuAD0N0YTQF50ADUAAgAB//8AAAI=' $bFont = _Base64Decode($bFont) Local $tSource = DllStructCreate('byte[' & BinaryLen($bFont) & ']') DllStructSetData($tSource, 1, $bFont) Local $tDecompress _WinAPI_LZNTDecompress($tSource, $tDecompress) $tSource = 0 Return Binary(DllStructGetData($tDecompress, 1)) EndFunc ;==>_bFont Func _Base64Decode($input_string) Local $struct = DllStructCreate("int") Local $a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", "str", $input_string, "int", 0, "int", 1, "ptr", 0, "ptr", DllStructGetPtr($struct, 1), "ptr", 0, "ptr", 0) If @error Or Not $a_Call[0] Then Return SetError(1, 0, "") Local $a = DllStructCreate("byte[" & DllStructGetData($struct, 1) & "]") $a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", "str", $input_string, "int", 0, "int", 1, "ptr", DllStructGetPtr($a), "ptr", DllStructGetPtr($struct, 1), "ptr", 0, "ptr", 0) If @error Or Not $a_Call[0] Then Return SetError(2, 0, "") Return DllStructGetData($a, 1) EndFunc ;==>_Base64Decode Func _WinAPI_LZNTDecompress(ByRef $tInput, ByRef $tOutput, $iBufferSize = 0x800000) Local $tBuffer, $Ret $tOutput = 0 $tBuffer = DllStructCreate('byte[' & $iBufferSize & ']') If @error Then Return SetError(1, 0, 0) $Ret = DllCall('ntdll.dll', 'uint', 'RtlDecompressBuffer', 'ushort', 0x0002, 'ptr', DllStructGetPtr($tBuffer), 'ulong', $iBufferSize, 'ptr', DllStructGetPtr($tInput), 'ulong', DllStructGetSize($tInput), 'ulong*', 0) If @error Then Return SetError(2, 0, 0) If $Ret[0] Then Return SetError(3, $Ret[0], 0) $tOutput = DllStructCreate('byte[' & $Ret[6] & ']') If Not _WinAPI_MoveMemory(DllStructGetPtr($tOutput), DllStructGetPtr($tBuffer), $Ret[6]) Then $tOutput = 0 Return SetError(4, 0, 0) EndIf Return $Ret[6] EndFunc ;==>_WinAPI_LZNTDecompress #endregion #region MemFont ; #FUNCTION# ====================================================================================== ; Name ..........: _GDIPlus_CreateFontFamilyFromName() ; Description ...: Creates a FontFamily object based on a specified font family. ; Syntax ........: _GDIPlus_CreateFontFamilyFromName($sFontname[, $hCollection = 0]) ; Parameters ....: $sFontname - [in] Name of the font family. For example, Arial.ttf is the name of the Arial font family. ; $hCollection - [optional] [in] Pointer to the PrivateFontCollection object to delete. (default:0) ; Return values .: Success - a pointer to the new FontFamily object. ; Failure - 0 ; Author ........: Prog@ndy, Yashied ; Modified ......: ; Remarks .......: ; Related .......: ; Link ..........: @@MsdnLink@@ GdipCreateFontFamilyFromName ; Example .......: ; ================================================================================================= Func _GDIPlus_CreateFontFamilyFromName($sFontname, $hCollection = 0) Local $aResult = DllCall($__g_hGDIPDll, 'int', 'GdipCreateFontFamilyFromName', 'wstr', $sFontname, 'ptr', $hCollection, 'ptr*', 0) If @error Then Return SetError(1, 0, 0) Return SetError($aResult[0], 0, $aResult[3]) EndFunc ;==>_GDIPlus_CreateFontFamilyFromName ; #FUNCTION# ====================================================================================== ; Name ..........: _GDIPlus_DeletePrivateFontCollection() ; Description ...: Deletes the specified PrivateFontCollection object. ; Syntax ........: _GDIPlus_DeletePrivateFontCollection($hCollection) ; Parameters ....: $hCollection - [in] Pointer to the PrivateFontCollection object to delete. ; Return values .: Success - True ; Failure - False ; Author ........: Prog@ndy, Yashied ; Modified ......: ; Remarks .......: ; Related .......: ; Link ..........: @@MsdnLink@@ GdipDeletePrivateFontCollection ; Example .......: ; ================================================================================================= Func _GDIPlus_DeletePrivateFontCollection($hCollection) Local $aResult = DllCall($__g_hGDIPDll, 'int', 'GdipDeletePrivateFontCollection', 'ptr*', $hCollection) If @error Then Return SetError(1, 0, False) Return SetError($aResult[0], 0, $aResult[0] = 0) EndFunc ;==>_GDIPlus_DeletePrivateFontCollection ; #FUNCTION# ====================================================================================== ; Name ..........: _GDIPlus_NewPrivateFontCollection() ; Description ...: Creates an PrivateFontCollection object. ; Syntax ........: _GDIPlus_NewPrivateFontCollection() ; Parameters ....: ; Return values .: Success - a pointer to the PrivateFontCollection object. ; Failure - 0 ; Author ........: Prog@ndy, Yashied ; Modified ......: ; Remarks .......: ; Related .......: ; Link ..........: @@MsdnLink@@ GdipNewPrivateFontCollection ; Example .......: ; ================================================================================================= Func _GDIPlus_NewPrivateFontCollection() Local $aResult = DllCall($__g_hGDIPDll, 'int', 'GdipNewPrivateFontCollection', 'ptr*', 0) If @error Then Return SetError(1, 0, 0) Return SetError($aResult[0], 0, $aResult[1]) EndFunc ;==>_GDIPlus_NewPrivateFontCollection ; #FUNCTION# ====================================================================================== ; Name ..........: _GDIPlus_PrivateAddMemoryFont() ; Description ...: Adds a font file from memory to the private font collection. ; Syntax ........: _GDIPlus_PrivateAddMemoryFont($hCollection, $pMemory, $iLength) ; Parameters ....: $hCollection - [in] Pointer to the font collection object. ; $pMemory - [in] A pointer to a font resource. ; $iLength - [in] The number of bytes in the font resource that is pointed to by $pMemory. ; Return values .: Success - True ; Failure - False ; Author ........: Eukalyptus ; Modified ......: ; Remarks .......: ; Related .......: ; Link ..........: @@MsdnLink@@ GdipPrivateAddMemoryFont ; Example .......: ; ================================================================================================= Func _GDIPlus_PrivateAddMemoryFont($hCollection, $pMemory, $iLength) Local $aResult = DllCall($__g_hGDIPDll, 'int', 'GdipPrivateAddMemoryFont', 'ptr', $hCollection, 'ptr', $pMemory, 'int', $iLength) If @error Then Return SetError(1, 0, False) Return SetError($aResult[0], 0, $aResult[0] = 0) EndFunc ;==>_GDIPlus_PrivateAddMemoryFont #endregion MemFont Display embedded ico file in system tray: #include <GDIPlus.au3> #include <WindowsConstants.au3> _GDIPlus_Startup() Global $hBmp = _GDIPlus_BitmapCreateFromMemory(_AutoIt_Icon()) ;load ico and convert it to a GDI+ bitmap ;convert bitmap to HIcon Global $hIcon = _GDIPlus_HICONCreateFromBitmap($hBmp) _WinAPI_TraySetHIcon($hIcon) Global $hGUI = GUICreate("Display embedded ico file in tray", 320, 50) GUICtrlCreateLabel("Look at tray icon", 0, 0, 300, 200) GUICtrlSetFont(-1, 30) GUISetState() Do Until GUIGetMsg() = -3 _GDIPlus_BitmapDispose($hBmp) _WinAPI_DestroyIcon($hIcon) _GDIPlus_Shutdown() Exit Func _WinAPI_TraySetHIcon($hIcon) ;function by Mat Local Const $tagNOTIFYICONDATA = _ "dword Size;" & _ "hwnd Wnd;" & _ "uint ID;" & _ "uint Flags;" & _ "uint CallbackMessage;" & _ "ptr Icon;" & _ "wchar Tip[128];" & _ "dword State;" & _ "dword StateMask;" & _ "wchar Info[256];" & _ "uint Timeout;" & _ "wchar InfoTitle[64];" & _ "dword InfoFlags;" & _ "dword Data1;word Data2;word Data3;byte Data4[8];" & _ "ptr BalloonIcon" Local Const $TRAY_ICON_GUI = WinGetHandle(AutoItWinGetTitle()), $NIM_ADD = 0, $NIM_MODIFY = 1, $NIF_MESSAGE = 1, $NIF_ICON = 2, $AUT_WM_NOTIFYICON = $WM_USER + 1, $AUT_NOTIFY_ICON_ID = 1 Local $tNOTIFY = DllStructCreate($tagNOTIFYICONDATA) DllStructSetData($tNOTIFY, "Size", DllStructGetSize($tNOTIFY)) DllStructSetData($tNOTIFY, "Wnd", $TRAY_ICON_GUI) DllStructSetData($tNOTIFY, "ID", $AUT_NOTIFY_ICON_ID) DllStructSetData($tNOTIFY, "Icon", $hIcon) DllStructSetData($tNOTIFY, "Flags", BitOR($NIF_ICON, $NIF_MESSAGE)) DllStructSetData($tNOTIFY, "CallbackMessage", $AUT_WM_NOTIFYICON) Local $aRet = DllCall("shell32.dll", "int", "Shell_NotifyIconW", "dword", $NIM_MODIFY, "ptr", DllStructGetPtr($tNOTIFY)) If (@error) Then Return SetError(1, 0, 0) Return $aRet[0] <> 0 EndFunc ;==>_Tray_SetHIcon ;Code below was generated by: 'File to Base64 String' Code Generator v1.12 Build 2013-05-17 Func _AutoIt_Icon($bSaveBinary = False, $sSavePath = @ScriptDir) Local $AutoIt_Icon $AutoIt_Icon &= 'AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd3Z1rU1NTLubm5saAAAAAFZOSClTTkuPa2lotnNycrlgXFmwQjs1dUtDPjkAAAAAAAAAAAAAAAAAAAAAAAAAAJyamdiurq7/Pj08wDUuKW5/f3/snJiU/5WGdv+WgGv/fndx/25raP+Tk5P5ODErfQAAAAAAAAAAAAAAAAAAAADAv749ubm57ZaWl/9qamr/jXpp/45kPP+vekj/uoBI/6qVgf9dWFT/i3Nd/62trf85Mix+AAAAAAAAAAAAAAAAAAAAAKGdm4e9vr//eHh5/4BWL//YnGH/1Jpj/9aXW//Oqof/kpSX/4NYLv+YfWT/np+g/UpCPEMAAAAAAAAAAAAAAABfWFJ8yszN/7zBxf98b2P/t39I/9iZXf/amVr/z6R6/6autv+eelf/nWo5/6qimv9aV1SgAAAAAAAAAAAAAAACbGhlpqGXjf/Fwr//ub7D/4Z+d/+Td1v/oXVL/7CSdf+4wMj/nH5g/7uBSP+Xgm3/c3JxywAAAA0AAAAAJBoRE5OTk8+Jc17/tJFw/9bZ2//O0dX/wsfL/7a7wP+5urz/ys7S/5eCb/+9gkj/l3xi/4SDguB5cm0UAAAAAAAAAAKGhYS7k4Z4/6hvOf/Zupv/19zh/4iEgP+qk33/19TS/9nc4P+jmpH/p3I+/5uEbv+BgH/XAAAADAAAAAAAAAAAa2ZjiaWhnf+NZ0P/3rCE/+POuf+vsbT/lo6I/93c3P/i5ef/tK2m/5RrQ/+onZP/XVhVoAAAAAAAAAAAAAAAAFpTTByWlZTtkIJ0/8Wniv/jvpr/6N3S/+zw9P/n5+f/5ejq/66gk/+PeWT/2drb/25oY61nYFsXAAAAAAAAAAAAAAAATUU/ZMbHyP+nnZP/xK6Z/9zDrP/o497/8PHy/724sv+dj4L/ycjG/83Oz//g4eH/c25prAAAAAQAAAAAAAAAAAAAAABGPjl+q6qq8cPAvv+7sqr/vLGn/7u1r/+9uLT/29vc//L09f+urq7/x8jI/7y6uOEAAAAbAAAAAAAAAAAAAAAAAAAAAEQ9NzlpZGCemJaU25WSj92dmpfhcmxooUpCPH/c29r/zs/Q/93e3/+DfXmxAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx2cRB+eHMSenNuFgAAAAAAAAAAWVJMYZmUkcJnYFuiZV5ZKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAA//+sQRAfrEEAD6xBAAesQYADrEGAA6xBAAGsQQABrEEAAaxBgAOsQYABrEHAAKxB4ACsQfAArEH8YaxB//esQQ==' Local $bString = Binary(_Base64Decode($AutoIt_Icon)) If $bSaveBinary Then Local $hFile = FileOpen($sSavePath & "\AutoIt.ico", 18) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_AutoIt_Icon Func _Base64Decode($sB64String) Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "") Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]") $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "") Return DllStructGetData($bBuffer, 1) EndFunc ;==>_Base64Decode Display a transparent image in GUI: #include <GDIPlus.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> _GDIPlus_Startup() Global $iW, $iH, $hImage, $hBitmap, $hGUI $hImage = _GDIPlus_BitmapCreateFromMemory(_Torus()) $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage) $iW = _GDIPlus_ImageGetWidth($hImage) $iH = _GDIPlus_ImageGetHeight($hImage) $hGUI = GUICreate("", $iW, $iH, -1, -1, $WS_POPUP, $WS_EX_LAYERED) GUISetState() _WinAPI_DisplayTransparentBitmapInGUI($hBitmap, $hGUI) Do Until GUIGetMsg() = $GUI_EVENT_CLOSE _GDIPlus_BitmapDispose($hImage) _GDIPlus_Shutdown() GUIDelete() Func _WinAPI_DisplayTransparentBitmapInGUI($hHBitmap, $hGUI, $iOpacity = 0xFF) If Not BitAND(GUIGetStyle($hGUI)[1], $WS_EX_LAYERED) = $WS_EX_LAYERED Then Return SetError(1, 0, 0) Local Const $hScrDC = _WinAPI_GetDC(0), $hMemDC = _WinAPI_CreateCompatibleDC($hScrDC), $hOld = _WinAPI_SelectObject($hMemDC, $hHBitmap) Local $tSize = DllStructCreate($tagSIZE) $tSize.X = $iW $tSize.Y = $iH Local $tSource = DllStructCreate($tagPOINT) Local $tBlend = DllStructCreate($tagBLENDFUNCTION) $tBlend.Alpha = $iOpacity $tBlend.Format = 1 _WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, DllStructGetPtr($tSize), $hMemDC, DllStructGetPtr($tSource), 0, DllStructGetPtr($tBlend), $ULW_ALPHA) _WinAPI_ReleaseDC(0, $hScrDC) _WinAPI_SelectObject($hMemDC, $hOld) _WinAPI_DeleteObject($hHBitmap) _WinAPI_DeleteDC($hMemDC) Return True EndFunc ;Code below was generated by: 'File to Base64 String' Code Generator v1.19 Build 2014-11-14 Func _Torus($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Torus $Torus &= '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' $Torus &= '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' $Torus &= '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' $Torus &= 'uvGwiBz8upcqK8JkEKzEMCIhAUqh433J7VKeYemvSlULhCX4+0XRn1Zqz1MI+OuL4q4byvLxg80vKAb8GgnEvtneCdD9Dn4+LjTWDzwb4MhLs+zsi7LsJcdk6Vmr0vRofAZZ6WSRjW8rMphjeJ9pZsFuPBeX/AJmypEk0/EkDBMhNc3KKyLIPs8sr2r9n/F7FXoDUy9D5CB5VpdFnVMB3nwewDX31ycPiVWWhTNWLXmF2qwDY/ICKAL/GJHyslqPMLfuiHQoV4hNcQcXDn7TqrdXLnqEmXoAlwXiILhGgKIc0P+8L7NCdvydiizcDZG7HPb6/f7T/eKxb/S63/rUTPc7Xy3L7z+i9e5+/MUUbukP2S7Ffgn1Hoxmey+GUfdo/fi3y/KWjUVx05FK7Vyn9bEoHY9E0KcWgAlXFFeA5ISQDzMTUCLrWGWFqoC31lqUe5Ulic8aJXLIbF/ia/9hfA/cPEN2N5WMp7T4iUgAlEUbxO2EwfJAa3GYgNTprElwMcCPYUD8X/DHrx5oEoGLBb5r7uza+nOXSNtVsuObQ2eiF5ipCcYX5Ev1mAdoIICUP4XrN1C6LBEToW87m3ef7PYe/lav9+2/7Havvgc1f0vJX0Ad6G0kUGJfQZ0YISFKGhEOi80DN2v94L1leeOxKKPWar0WC5BjiAz05SWDVNfxw6PXhU2iB4hAsA8yR9x0IuFByujzTCrUbbvmGPQdloSD/a35b0Q9droW4OTdALdsAdgvbkfmruS2LGiWNGM0KxLQBBn4K/8c7/y8kACmToBcsiv5fWbIEYB7gaWujsA0hHMewrQFIs3JWZ0gDRpKoFYClFXnci798TgW8/2tX52Zuer/dnvX3KvUjn6zO2Yw96BespfBsRjoGeytJJDLHvQON2m98c6yvO5ZKJ3WoWpKkBAGOa74Z6+guc2QQ9Q4ROB+B3Y78U0spBfg76HPZXKEbZ18tkjXapiPPhl/83cB7nT7KrgtHWzL/spLJotmRYLXA7wBS85fI+ESaxzXcb29TN0Aac+s6gBTqxBzXoC7QmruBCNraAUB1KgeoHS5fbdPpf90r3/g3l7vpo92e1+/uSyfVM0uWIJZriXAw2MKBknBJJCDOjSSgBcsXGZu0Pr+vtJ3n4QkmAJ9CoIx49pmRpBdj0YEPpdw2znf1Lo6n0r9A0H7IXfYEkKbd2SOiRG13WjYySqAE/ehN9hsvUFYgyGfcezYksiisUngvMCH8Y7PbvMCHRcLcIlPx6pukVl1zJHFxwHcGE7W5o5AgD4PL+KAb9f2/N5+f8fXut2vf6LXv2Wv1v2Gn8bBbK9lLQkgS/eYPCphMC4YSgJeHtb6meuVuv4srfcfpeGsxNY7AMcKINr4cO+CtIEIiahFrnWwcQWy6Ykn4gMpd1gWaRensIeQk4kE3oCaVPSvrrwB34oS27rh2JLEB2OToM0LdFxKj71Ah4PhWm+wugxKuS+w6w8QywSZYQhFPUCMAF4qCQKQ/NnZ6z3xiemZz3+nLB9r+VkMTgn4XsPxUYLjEPR9qMujURaFF/ev13rDaVo/cXwCZ4Gdg9njJoR8jAgpE4AyT94V8J/YXmZ0LHWySKuqlJeyiBv32WNlzRtwkwr2BqsBTsDY4NYtdmKQ0BO0ZYyWJFs0FgmGeYGcm0Zkrp9AEAxzs4hMBMq0Tz3Cau2BZC8wERyXjRIoSgC1pde7/8Mz3c9vVGp3y88KpQ2tQ9CHXqAJ+DJADj8zdm0rCXh9i9aPTAHccQbAOVhgnyB7BIRESJK6NPJSCCqPIGfj9Ne6jjmprg8fz+swSLbHxZwKdW9wBHmDawDucvujeAEZMywqEcYiwRX4bxrgP7bFAhm3DUoT3zbIyx8P/LzWJ9h0iUTwUolSqGqIE5kJqmKEqs+AlD6SAJT3v7PbveEj0zPf3Kb1TMPPYaAy4Hm7CbgM6jA4ludiZJorCYxHuV/rndswaD4PklPyJDkj8d0bAyIk9Rgh5UyQZYe/' $Torus &= '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' $Torus &= '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' $Torus &= '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' $Torus &= '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' $Torus &= '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' $Torus &= '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' $Torus &= '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' $Torus &= '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' $Torus &= 'Xz4Uf070Ex4rO+SAz5IHnO4HF8yCKeEr4JfuGu8B6O+pOUiJ+MZSPykOlj1VHHwa4LHbAe6mKVLdRISjWqwjexshmuSPJMqoBFjyVGjja1rqGxhi4xAh5W1KpSIZnn8xwIuREK9BQpyJ8DpyoOQP9gfAH3lIIz8wRwAGtfcEDvSUxwcBfFvauw7VmtoaodbvH0DY9KBQxQEUPlvuwhL/+wBbaeCrEbM9ZE3j/sc6urfJInl8NmSYSAKYV7XUNzCixaRRBs2kYPJ0MF5Y/SMAZ58D8PLjcMHI+iQ8fmQKfrLLKOhleV8bIXukp1oRgINZu+2Ou1G1TTMGkjjUm4saQeC2xgWP6wL0gT0A2zYBPHg3wKY7ALaPAXyy2BCGIfjlMCgxQsSAHiNDOILExEug2uta6hsYw0bxCGnDvtlGr7DuhQCnnQdwwXokBhLk+XjyaLxoFbVeTcSksbW5mcd6YImnl+a1a4atTUqU+hHYFq9uEC/tRjrpoq7Z9yTAo1sR/Aj6xx4D2NMdrwQNS/1w6BJ5PAR/eKxJFhUwnAwTVQ8wwhtbVjYq+GvySGzXSHEqwFHPAzgRCXH0mQDnIknOXm0D69V40brEXjcQK8zGtFsQOV1EyDSiY3ovwDNY0j+8GeDpbUiApwD27x1viBE5XHkI/HA/lEKxQbFioA8D5ZjMWbYEIFtuJCAbB/wxAmSR47ym+ZbWoYc44gUApz8bF8o0HYEkWYvk4Do01GbH4B+s0Q3hApbee1EDTNN5EjwYyG7DY308RkM3kKbfiYq/mAXgyeS4nCEJYsBvk0JNmaG2QbNGJcOyseVIArJxwB8jQpQAUCdIFhz3VRDHIElW2zjFTttcP0/DNfe7FkhZcM/jmpRC4dSlEtjhfps3CEv+JiK0eYJhZFhWtlxJQBYCOuYhQiKEniAkAW+HrbUbCQEV0D0JgmMQ2R7VVGS7zSOM6g3COEFuh54gBHxblmjZEYBsQcciXWCjB94LfgO/yFysyeildsQxLqX5ulScl0BnUsjjBQwSAmBpSRCCHWAQ/P3IdTHwN3mCMPuzbOVPaMuZBGz8QiToJdglKSTQm8ggPQUfCz0AQJwEIfgXggRN8cCo8UEohWLgb5NCsSzRsrZDgQRk4QuUpT4fk6BuIkNsv0kSQXAeoJ0EsxnUQA5AFSMB7zd5gCYpVDTsD4sLwuzRsicA2aFCArJQHuRD1jEyhKX/qHFAE/gXkgQx0If7MSIMA39TXBDuHzK2nAPjNvPdjyGeGWoLjtvA3yaLAAbBv9DZIT7eJoPajo0bFxwypb+0Q5UEbDEitJEhBHkuPidGCIDBuABgcUkQS5OGwCcroJkQo8QFhxz42Q51ErCNQoa2Y8MC4ibwL3R2iNfDAuQ2GXTYgp/tcCEB2zAJNEwWATR7AwiOASwMCXi7LUBua0oRk0FN0uiwsMONBGyhBIqBP+YJQgnU5g34OogcH9VickgeV5HtJlI0ESIkw2EDfrbDlQRsUv60AT88DhAnBUC89J8NAdjCGCA81lR5NiwgDusKDnnZ02SHOwnYRs0MNTWTaIsL5LHZ2LDgOLY9CvBD6XTY2goJBk16BoDhnmCUOoL5IsGodQVNGaLDVvK02QoJmq0N9G0eYLE9Aa/b2hGtlPottkKC0SyWGeL9SfIEfExBPJZYsYitkGB2NumeYMXGsBUSzJ8tpSdYsTnYCgkWx+aLBCu2Yiu2Yiu2Yiu2Yiu2Yiu2Yiu2Yiu2Yiu2Yiu2Yiu2Yiu2Yiu2Yiu2YvNn/x8H6goDo7OU7wAAAABJRU5ErkJggg==' Local $bString = Binary(_WinAPI_Base64Decode($Torus)) If $bSaveBinary Then Local $hFile = FileOpen($sSavePath & "\Torus.png", 18) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_Torus Func _WinAPI_Base64Decode($sB64String) Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "") Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]") $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "") Return DllStructGetData($bBuffer, 1) EndFunc ;==>_WinAPI_Base64Decode More examples: Playing SWF file (source code is too large for codebox) AutoIt Windows Screenshooter Play MP3 from mem using FMOD >Toolbar from mem Play a GIF anim from mem Load animated cursor (.ani) from memory Br, UEZ History:
×