Jump to content

Recommended Posts

What is TrIDLib.dll?

This standard Win32 DLL library, based on TrID's core engine, make adding file identification / file recognition capabilities to any kind of application a very easy & quick process. If you need a managed library, check the TrIDEngine. For more Info Go to Author website http://mark0.net/index-e.html

Functions in the UDF are:

_TrIDLib_Startup

_TrIDLib_Shutdown

_TrIDLib_GetInfo

_TrIDLib_GetRealExtension

_TrIDLib_GetVersion

_TrIDLib_GetFileTypeDef

Here is main udf:

#AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
#include-once

; TrIDlib AutoIt Demo[Modified]

; #INDEX# =======================================================================================================================
; Title .........: 7Zip
; AutoIt Version : 3.3.8.1
; Language ......: English
; Description ...: Functions that assist with TrIDLib DLL.
; Author(s) .....: Gajjar Tejas
; Notes .........: The original code came from this subject : http://mark0.net/download/tridlib-samples.zip
;                 - 12 June 2013 :
;                       * Intial
;                       * Added _TrIDLib_GetInfo, _TrIDLib_GetVersion, _TrIDLib_GetFileTypeDef,_TrIDLib_Startup, _TrIDLib_Shutdown,_TrIDLib_GetRealExtension
;                       * 32bit dll Version(v1.0.2.0).
;                       * Auto Open Dll, Manually Close
;                 - Note
;                       * Using _TrIDLib_Startup() and _TrIDLib_Shutdown() is recommanded for multiples Files.
;                       * The last x32 DLL file can be found here : http://mark0.net/code-tridlib-e.html
;                       * The last Definition file can be found here : http://mark0.net/soft-trid-e.html
; ===============================================================================================================================

; #CURRENT# =====================================================================================================================
;_TrIDLib_Startup
;_TrIDLib_Shutdown
;_TrIDLib_GetInfo           Auto Open dll***
;_TrIDLib_GetVersion        Auto Open dll
;_TrIDLib_GetFileTypeDef    Auto Open dll

;***Using _TrIDLib_Startup() and _TrIDLib_Startup() is recommanded for multiples Files to avoid
;   repetitive dll open that can increase operation time.
;***If _TrIDLib_Startup is not specified then dll will open and close automatically for _TrIDLib_GetInfo()
; ===============================================================================================================================

; #VARIABLES# ===================================================================================================================
; Definations & dll File
Global $sTridDllFile = @ScriptDir & "\TrIDLib.dll"
Global $sTridDefDir = @ScriptDir
Global $sTridDefFile = $sTridDefDir & "\triddefs.trd"

; Others
Global $iTridIsDllOpen = 0 ;Default Dll is not opened.
Global $hTridDll = 0 ;Handle to Dll
Global $iTridAutoLoad = 1 ;Default auto load Dll

; Constants FOR TrID_GetInfo
Const $TRID_GET_RES_NUM = 1 ;Get the number of results available
Const $TRID_GET_RES_FILETYPE = 2 ;Filetype descriptions
Const $TRID_GET_RES_FILEEXT = 3 ;Filetype extension
Const $TRID_GET_RES_POINTS = 4 ;Matching points

Const $TRID_GET_VER = 1001 ;TrIDLib version (major * 100 + minor)
Const $TRID_GET_DEFSNUM = 1004 ;Number of filetypes definitions loaded
; ===============================================================================================================================


; #FUNCTION# ====================================================================================================================
; Name ..........: _TrIDLib
; Description ...: Identify file types from their binary signatures.
; Syntax ........: _TrIDLib($sFile)
; Parameters ....: $sFile               - A full path of file.
; Return values .: Success - Returns the array (n x 4) with results
;                           n = Total No of possible file type found(UBound(array, 1))
;                           array[0][0] = File Type 1st instant
;                           array[0][1] = Extension "
;                           array[0][2] = Points    "
;                           array[0][3] = % Point   "
;                           ...
;                           array[n-1][0] = File Type   (n-1)th instant
;                           array[n-1][1] = Extension   "
;                           array[n-1][2] = Points      "
;                           array[n-1][3] = % Point     "
;                 Failure - Returns 0 and and sets @error to non zero
;                           |1 = TrIDLib.dll File Not Found.(FileExist)
;                           |2 = Triddefs.trd File Not Found(FileExist)
;                           |3 = While Opening TrIDLib.dll(DllOpen)
;                           |4 = While Loading triddefs.trd(DllCall)
;                           |5 = While Submitting File(DllCall)
;                           |6 = While Analysing File(DllCall)
;                           |7 = Unable to detect file type(DllCall)
; Author ........: Gajjar Tejas
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: Yes
; ===============================================================================================================================
Func _TrIDLib_GetInfo($sFile)

    If $iTridAutoLoad Then
        _TrIDLib_Startup()
        If @error Then Return SetError(@error, 0, 0)
        $iTridAutoLoad = 1
    Else
        ;Check if Manually Load Using _TrIDLib_Startup and previously dll open or not
        If Not $iTridIsDllOpen Then
            _TrIDLib_Startup()
            If @error Then Return SetError(@error, 0, 0)
        EndIf
    EndIf

    ; load the definitions
    Local $Ret = DllCall($hTridDll, "int", "TrID_LoadDefsPack", "str", $sTridDefDir)
    If @error Then Return SetError(4, 0, 0)

    ; submit the file
    $Ret = DllCall($hTridDll, "int", "TrID_SubmitFileA", "str", $sFile)
    If @error Then Return SetError(5, 0, 0)

    ; perform the analysis
    $Ret = DllCall($hTridDll, "int", "TrID_Analyze")
    If @error Then Return SetError(6, 0, 0)

    Local $Buf
    $Ret = DllCall($hTridDll, "int", "TrID_GetInfo", "int", $TRID_GET_RES_NUM, "int", 0, "str", $Buf)

    Local $iTotalSumPoints = 0
    Local $RetCom
    If $Ret[0] > 0 Then
        Local $aTridLibInfoInform2D[$Ret[0]][4]

        For $ResId = 0 To $Ret[0] - 1

            ;Get File Type
            $RetCom = DllCall($hTridDll, "int", "TrID_GetInfo", "int", $TRID_GET_RES_FILETYPE, "int", $ResId + 1, "str", $Buf)
            $aTridLibInfoInform2D[$ResId][0] = $RetCom[3] ;First Element

            ;Get Extension
            $RetCom = DllCall($hTridDll, "int", "TrID_GetInfo", "int", $TRID_GET_RES_FILEEXT, "int", $ResId + 1, "str", $Buf)
            $aTridLibInfoInform2D[$ResId][1] = $RetCom[3] ;Second Element

            ;Get Points
            $RetCom = DllCall($hTridDll, "int", "TrID_GetInfo", "int", $TRID_GET_RES_POINTS, "int", $ResId + 1, "str", $Buf)
            $aTridLibInfoInform2D[$ResId][2] = $RetCom[0]
            $iTotalSumPoints += Number($aTridLibInfoInform2D[$ResId][2]) ;Third Element

        Next

        ;Get Points in Percentage
        If $iTotalSumPoints > 0 Then
            For $ResId = 0 To $Ret[0] - 1
                $aTridLibInfoInform2D[$ResId][3] = Round($aTridLibInfoInform2D[$ResId][2] * 100 / $iTotalSumPoints, 2) ;Fourth Element
            Next
        EndIf

    Else
        Return SetError(7, 0, 0)
    EndIf
    If $iTridAutoLoad Then _TrIDLib_Shutdown()
    Return $aTridLibInfoInform2D
EndFunc   ;==>_TrIDLib_GetInfo

; #FUNCTION# ====================================================================================================================
; Name ..........: _TrIDLib_GetRealExtension
; Description ...:
; Syntax ........: _TrIDLib_GetRealExtension($sFile)
; Parameters ....: $sFile               - A full path of file.
; Return values .: Success - Returns the Original File Extension
;                 Failure - Returns Empty String('') and and sets @error to non zero
;                           |1 = TrIDLib.dll File Not Found.(FileExist)
;                           |2 = Triddefs.trd File Not Found(FileExist)
;                           |3 = While Opening TrIDLib.dll(DllOpen)
;                           |4 = While Loading triddefs.trd(DllCall)
;                           |5 = While Submitting File(DllCall)
;                           |6 = While Analysing File(DllCall)
;                           |7 = Unable to detect file type(DllCall)
;                           |8 = File was Identified But Extension Not Found in the Database(null('') extension return by dll)
; Author ........: Gajjar Tejas
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: Yes
; ===============================================================================================================================
Func _TrIDLib_GetRealExtension($sFile)
    Local $at = _TrIDLib_GetInfo($sFile)
    Local $iErr = @error
    Local $sExt = $at[0][1]

    If Not $iErr Then
        If $sExt <> "" Then
            $sExt = "." & $sExt
        Else
            Return SetError(8, 0, '');null extension return by dll
        EndIf
    Else
        Return SetError($iErr, 0, '')
    EndIf
    Return $sExt
EndFunc   ;==>_TrIDLib_GetRealExtension

; #FUNCTION# ====================================================================================================================
; Name ..........: _TrIDLib_GetVersion
; Description ...: Get the TrIDLib.dll version
; Syntax ........: _TrIDLib_GetVersion()
; Parameters ....:
; Return values .: Success - Returns Numrical - Version
;                 Failure - Returns 0 and and sets @error to non zero
;                           |1 = TrIDLib.dll File Not Found.(FileExist)
;                           |2 = Triddefs.trd File Not Found(FileExist)
;                           |3 = While Opening TrIDLib.dll(DllOpen)
;                           |4 = While Loading triddefs.trd(DllCall)
; Author ........: Gajjar Tejas
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: Yes
; ===============================================================================================================================
Func _TrIDLib_GetVersion()

    ;Check if is dll open or not
    If Not $iTridIsDllOpen Then
        _TrIDLib_Startup()
        If @error Then Return SetError(@error, 0, 0)
    EndIf

    ;Get TrIDLib version
    Local $Buf
    Local $RetCom = DllCall($hTridDll, "int", "TrID_GetInfo", "int", $TRID_GET_VER, "int", 0, "str", $Buf)

    Return Round($RetCom[0] / 100, 2)
EndFunc   ;==>_TrIDLib_GetVersion

; #FUNCTION# ====================================================================================================================
; Name ..........: _TrIDLib_GetFileTypeDef
; Description ...: Get the total no of Definitions triddefs.trd
; Syntax ........: _TrIDLib_GetFileTypeDef()
; Parameters ....:
; Return values .: Success - Returns Numrical - Version
;                 Failure - Returns 0 and and sets @error to non zero
;                           |1 = TrIDLib.dll File Not Found.(FileExist)
;                           |2 = Triddefs.trd File Not Found(FileExist)
;                           |3 = While Opening TrIDLib.dll(DllOpen)
;                           |4 = While Loading triddefs.trd(DllCall)
; Author ........: Your Name
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func _TrIDLib_GetFileTypeDef()

    ;Check if is dll open or not
    If Not $iTridIsDllOpen Then
        _TrIDLib_Startup()
        If @error Then Return SetError(@error, 0, 0)
    EndIf

    ; load the definitions
    DllCall($hTridDll, "int", "TrID_LoadDefsPack", "str", $sTridDefDir)
    If @error Then Return SetError(4, 0, 0)

    ;Get Number of filetypes definitions loaded
    Local $Buf
    Local $RetCom = DllCall($hTridDll, "int", "TrID_GetInfo", "int", $TRID_GET_DEFSNUM, "int", 0, "str", $Buf)

    Return $RetCom[0]
EndFunc   ;==>_TrIDLib_GetFileTypeDef

; #FUNCTION# ====================================================================================================================
; Name ..........: _TrIDLib_CheckFiles
; Description ...: Check File
; Syntax ........: _TrIDLib_CheckFiles()
; Parameters ....:
; Return values .: Success - Returns 1
;                  Failure - Returns 0 and and sets @error to non zero
;                           |1 = TrIDLib.dll File Not Found.(FileExist)
;                           |2 = Triddefs.trd File Not Found(FileExist)
; Author ........: Gajjar Tejas
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func _TrIDLib_CheckFiles()
    If Not FileExists($sTridDllFile) Then
        Return SetError(1, 0, 0)
    ElseIf Not FileExists($sTridDefFile) Then
        Return SetError(2, 0, 0)
    Else
        Return SetError(0, 0, 1)
    EndIf
EndFunc   ;==>_TrIDLib_CheckFiles

; #FUNCTION# ====================================================================================================================
; Name ..........: _TrIDLib_Startup
; Description ...: Manually Load TrIDLib.dll
; Syntax ........: _TrIDLib_Startup()
; Parameters ....:
; Return values .: Success - Returns 1
;                  Failure - Returns 0 and and sets @error to non zero
;                           |1 = TrIDLib.dll File Not Found.(FileExist)
;                           |2 = Triddefs.trd File Not Found(FileExist)
;                           |3 = While Opening TrIDLib.dll(DllOpen)
; Author ........: Gajjar Tejas
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func _TrIDLib_Startup()
    _TrIDLib_CheckFiles()
    If @error Then Return SetError(@error, 0, 0)

    $hTridDll = DllOpen($sTridDllFile)
    If $hTridDll = -1 Then Return SetError(3, 0, 0)
    $iTridIsDllOpen = 1
    $iTridAutoLoad = 0
    Return SetError(0, 0, 1)
EndFunc   ;==>_TrIDLib_Startup
; #FUNCTION# ====================================================================================================================
; Name ..........: _TrIDLib_Shutdown
; Description ...:Manually Unload TrIDLib.dll
; Syntax ........: _TrIDLib_Shutdown()
; Parameters ....:
; Return values .: None
; Author ........: Gajjar Tejas
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func _TrIDLib_Shutdown()
    DllClose($hTridDll)
    $iTridAutoLoad = 1;Default auto load
    $iTridIsDllOpen = 0
EndFunc   ;==>_TrIDLib_Shutdown

Example:1

#AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6

#Region    ;************ Includes ************
#Include "_TrIDLib.au3"
#include <Array.au3>
#EndRegion ;************ Includes ************

_Example()

Func _Example()
    MsgBox(0, "Info", _
            "TrIDLib.dll version (major * 100 + minor): " & _TrIDLib_GetVersion() & @CRLF & _
            "Number of filetypes definitions loaded:" & _TrIDLib_GetFileTypeDef())

    Local $sFile, $at, $iErr
    $sFile = FileOpenDialog("Choose Any File", "", "Any File (*.*)", 3) ; a file to analyze
    If @error Then Exit

    $at = _TrIDLib_GetInfo($sFile)
    $iErr = @error

    If Not $iErr Then
        MsgBox(0, "Info", "Total No of possible file type found:" & UBound($at, 1))
        MsgBox(0, "Info", "Suggested Extension:" & _TrIDLib_GetRealExtension($sFile))
        _ArrayDisplay($at, "Result", -1, 0, "", "|", "No.|File Type|Extension|Points|% Points")
    Else
        Switch $iErr
            Case 1
                MsgBox(0, "Error", "TrIDLib.dll File Not Found in Script Directory.")
            Case 2
                MsgBox(0, "Error", "triddefs.trd File Not Found in Script Directory.")
            Case 3
                MsgBox(0, "Error", "Error occurs during opening TrIDLib.dll")
            Case 4
                MsgBox(0, "Error", "Error occurs during Loading triddefs.trd.")
            Case 5
                MsgBox(0, "Error", "Error occurs during Submitting File: " & $sFile)
            Case 6
                MsgBox(0, "Error", "Error occurs during Analysing File: " & $sFile)
            Case 7
                MsgBox(0, "Error", "Unable to detect file type")
            Case 8
                MsgBox(0, "Error", "File was Identified But Extension Not Found in the Database(null extension return by dll)")
        EndSwitch
    EndIf
EndFunc   ;==>_Example

Example:2

#AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6

#Region    ;************ Includes ************
#Include "_TrIDLib.au3"
#EndRegion ;************ Includes ************

_Example()

Func _Example()
    ;Load Dll
    _TrIDLib_Startup()

    ;Select Folder
    Local $sDir = FileSelectFolder("choose folder", "")
    If @error Then Exit
    If StringRight($sDir, 1) <> "\" Then $sDir &= "\"

    ;Search Handle
    Local $search = FileFindFirstFile($sDir & "*.*")

    ; Check if the search was successful
    If $search = -1 Then
        MsgBox(0, "Error", "No files/directories matched the search pattern")
        Exit
    EndIf
    MsgBox(0, "Info", "Now,Press Ok to See Console Output")

    Local $at, $iErr = 0

    While 1
        ;Search for file and Folder
        Local $sFile = FileFindNextFile($search)
        If @error Then ExitLoop

        ;Only file allowed
        If StringInStr(FileGetAttrib($sDir & $sFile), "D") = 0 Then
            ConsoleWrite("==============================================================" & @LF)
            ConsoleWrite(">File: " & $sDir & $sFile & @LF)
            ;Get detailed info in array
            $at = _TrIDLib_GetInfo($sDir & $sFile)
            $iErr = @error

            If Not $iErr Then
                ConsoleWrite("Total no of possible file type found:" & UBound($at, 1) & @LF)
                ConsoleWrite("-Suggested extension:" & $at[0][1] & @LF)

                For $i = 0 To UBound($at) - 1
                    ConsoleWrite($i + 1 & "==============" & @LF)
                    ConsoleWrite("File Type:" & $at[$i][0] & @LF)
                    ConsoleWrite("Extension:" & $at[$i][1] & @LF)
                    ConsoleWrite("Points:" & $at[$i][2] & @LF)
                    ConsoleWrite("Points %:" & $at[$i][3] & @LF)
                Next
            Else
                Switch $iErr
                    Case 1
                        ConsoleWrite("!Error: TrIDLib.dll File Not Found in Script Directory.")
                    Case 2
                        ConsoleWrite("!Error: triddefs.trd File Not Found in Script Directory.")
                    Case 3
                        ConsoleWrite("!Error: Error occurs during opening TrIDLib.dll")
                    Case 4
                        ConsoleWrite("!Error: Error occurs during Loading triddefs.trd.")
                    Case 5
                        ConsoleWrite("!Error: Error occurs during Submitting File: " & $sFile)
                    Case 6
                        ConsoleWrite("!Error: Error occurs during Analysing File: " & $sFile)
                    Case 7
                        ConsoleWrite("!Error: Unable to detect file type")
                EndSwitch
                ConsoleWrite(@LF)
            EndIf
        EndIf
    WEnd

    ; Close the search handle
    FileClose($search)
    ;Close Dll
    _TrIDLib_Shutdown()
EndFunc   ;==>_Example

This udf require the following components:

TrIDLib.dll - The last x32 DLL file can be found here : http://mark0.net/code-tridlib-e.html
triddefs.trd - The last Definition file can be found here : http://mark0.net/soft-trid-e.html
 
Includes in Download:
Examples, triddefs.trd and TrIDLib.dll
 
This is my first udf Hope you will like.  :)
Link to comment
Share on other sites

Very nice, very nice.

UDF List:

 
_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_ArrayFilter/_ArrayReduce_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 22/04/2018

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...