Sign in to follow this  
Followers 0
wolf9228

ASM BinarySearch

5 posts in this topic

#1 ·  Posted (edited)

Project to search for binary data in three different ways using assembly language

Three ways

- Search for a binary
- Search for a binary using the callback function
- Search for a binary using the data structure

Find very fast .. Greetings

Project Files

 ASM_BinarySearch.zip

 

ASM_BinarySearch.au3

#include <WinAPI.au3>

Global $MsvcrtDll  =   _WinAPI_LoadLibrary(  "msvcrt.dll"  )
Global $Mmove = _WinAPI_GetProcAddress($MsvcrtDll,"memmove")
Global $Malloc = _WinAPI_GetProcAddress($MsvcrtDll,"malloc")
Global $FreeMemy = _WinAPI_GetProcAddress($MsvcrtDll,"free")
Global $DwordSize=DllStructGetSize(DllStructCreate("DWORD"))
Global $PointerSize=DllStructGetSize(DllStructCreate("PTR"))

Global $AddressBinarySearch = LoadBinarySearch()
Global $AddressBinarySearchPtr = DllStructGetPtr($AddressBinarySearch)
Global $AddressCallbackBinarySearch = LoadCallbackBinarySearch()
Global $AddressCallbackBinarySearchPtr = DllStructGetPtr($AddressCallbackBinarySearch)
Global $AddressXBinarySearch = LoadXBinarySearch()
Global $AddressXBinarySearchPtr = DllStructGetPtr($AddressXBinarySearch)

Func BinarySearch($DataPtr,$SubDataPtr,$DataPtrSize,$SubDataPtrSize,$Step = 1) ; $Step Loop Step

if ($SubDataPtrSize < 1) Or ($DataPtrSize < 1) Or ($SubDataPtrSize > $DataPtrSize) Then Return SetError(1,0,0)

Local $MaxPosition = ($DataPtrSize - $SubDataPtrSize)

$Return = DllCallAddress("DWORD",$AddressBinarySearchPtr,"DWORD",$MaxPosition, _
"DWORD",$DataPtrSize,"DWORD",$SubDataPtrSize,"PTR",$DataPtr,"PTR",$SubDataPtr,"DWORD",$Step)
if @error Then Return SetError(2,0,0)

Return $Return[0] ; Return FindPosition // OffSetPosition = FindPosition - 1

EndFunc


Func CallbackBinarySearch($DataPtr,$SubDataPtr,$CbFuncName,$DataPtrSize,$SubDataPtrSize,$Step = 1) ; $Step Loop Step

;$CbFuncName
;Func CallbackFunc($FindPosition,$OffSetPosition,$DataPtr,$SubDataPtr,$DataPtrSize,$SubDataPtrSize)


;MsgBox(0,"OffSetPosition = " & $OffSetPosition ,"FindPosition = " & $FindPosition)

;Return 1
;return
;0 ; Stop
;Other Ways : Continue

;EndFunc

if ($SubDataPtrSize < 1) Or ($DataPtrSize < 1) Or ($SubDataPtrSize > $DataPtrSize) Then Return SetError(1,0,False)

Local $RegCallbackFunc = DllCallbackRegister($CbFuncName,"DWORD","DWORD;DWORD;PTR;PTR;DWORD;DWORD")
if @error Then Return SetError(2,0,False)

Local $CkFuncPtr = DllCallbackGetPtr($RegCallbackFunc)

Local $MaxPosition = ($DataPtrSize - $SubDataPtrSize)
Local $StepTest = $Step >= $SubDataPtrSize
$Return = DllCallAddress("DWORD",$AddressCallbackBinarySearchPtr,"DWORD",$MaxPosition,"DWORD", _
$DataPtrSize,"DWORD",$SubDataPtrSize,"PTR",$DataPtr,"PTR",$SubDataPtr,"PTR",$CkFuncPtr,"DWORD",$Step,"DWORD",$StepTest)
if @error Then
DllCallbackFree($RegCallbackFunc)
Return SetError(3,0,False)
EndIf

DllCallbackFree($RegCallbackFunc)
Return True ; Return BOOL

EndFunc

Func XBinarySearch($DataPtr,$SubDataPtr,$DataPtrSize,$SubDataPtrSize,$Step = 1) ; $Step Loop Step

if ($SubDataPtrSize < 1) Or ($DataPtrSize < 1) Or ($SubDataPtrSize > $DataPtrSize) Then Return SetError(1,0,False)

Local $tagReturnStruct = "DWORD ArrayCount;PTR PositionArray"
Local $ReturnStruct = DllStructCreate($tagReturnStruct)
Local $RtStructPtr = DllStructGetPtr($ReturnStruct)

Local $MaxPosition = ($DataPtrSize - $SubDataPtrSize)
Local $StepTest = $Step >= $SubDataPtrSize
Local $Return = DllCallAddress("DWORD",$AddressXBinarySearchPtr,"DWORD",$MaxPosition,"DWORD",$DataPtrSize, _
"DWORD",$SubDataPtrSize,"PTR",$DataPtr,"PTR",$SubDataPtr,"PTR",$RtStructPtr,"DWORD",$Step,"DWORD",$StepTest)
if @error Then Return SetError(2,0,0)

Local $ArrayCount = DllStructGetData($ReturnStruct,1)
Local $PosonArray = DllStructGetData($ReturnStruct,2)
if ($ArrayCount = 0) Then Return SetError(3,0,0)

Local $tagReturnStruct = "DWORD ArrayCount;DWORD PositionArray[" & $ArrayCount & "]"
Local $ReturnStruct = DllStructCreate($tagReturnStruct)
Local $NewPosonArray = DllStructGetPtr($ReturnStruct,2)

DllStructSetData($ReturnStruct,1,$ArrayCount)
DllCallAddress("ptr:cdecl",$Mmove,"ptr",$NewPosonArray,"ptr",$PosonArray,"int",($ArrayCount * $DwordSize))
DllCallAddress("none:cdecl",$FreeMemy,"ptr",$PosonArray)

Return $ReturnStruct ; Return Struct of FindPosition // tagStruct = "DWORD ArrayCount;DWORD PositionArray[" & ArrayCount & "]"

EndFunc


Func LoadBinarySearch()

Local $TA,$TB,$TC,$Start,$JGEnd,$JZTC,$TBJNZ,$JMPTA,$JMPStart,$End

Local $OffSetMaxPosition = $PointerSize
Local $OffSetDataPtrSize = ($OffSetMaxPosition + $DwordSize)
Local $OffSetSubDataPtrSize = ($OffSetDataPtrSize + $DwordSize)
Local $OffSetDataPtr = ($OffSetSubDataPtrSize + $DwordSize)
Local $OffSetSubDataPtr = ($OffSetDataPtr + $PointerSize)
Local $OffSetStep = ($OffSetSubDataPtr + $PointerSize)

For $i = 1 To 2

$_ASMCode =  "0x"

$_ASMCode &= "BF" & HexBinary(0) ;mov edi,0
$_ASMCode &= "8B7424" & Hex($OffSetSubDataPtrSize,2) ;mov esi,[esp + $OffSetSubDataPtrSize]
$_ASMCode &= "8B5C24" & Hex($OffSetDataPtr,2) ;mov ebx,[esp + $OffSetDataPtr]
$_ASMCode &= "8B4424" & Hex($OffSetSubDataPtr,2) ;mov eax,[esp + $OffSetSubDataPtr]

; $Start: //
$Start = BinaryLen($_ASMCode)

$_ASMCode &= "BA" & HexBinary(0) ;mov edx,0

; TA: //
$TA = BinaryLen($_ASMCode)

$_ASMCode &= "3BF2";CMP esi,edx
$_ASMCode &= "74" & Hex(($TC - $JZTC),2) ;JZ $TC;
$JZTC = BinaryLen($_ASMCode)

$_ASMCode &= "8A2C10" ;mov CH,[eax + edx];

$_ASMCode &= "3A2C13" ;CMP CH,[ebx + edx]
$_ASMCode &= "75" & Hex(($TB - $TBJNZ),2) ;JNZ TB
$TBJNZ = BinaryLen($_ASMCode)

$_ASMCode &= "83C2" & Hex(1,2) ;add edx,1
$JMPTA = BinaryLen($_ASMCode)
$_ASMCode &= "E9" & HexBinary(-(($JMPTA - $TA) + 5)) ;JMP TA

; TB: //
$TB = BinaryLen($_ASMCode)

$_ASMCode &= "037C24" & Hex($OffSetStep,2) ;add edi,[esp + $OffSetStep]
$_ASMCode &= "3B7C24" & Hex($OffSetMaxPosition,2) ;CMP edi,[esp + $OffSetMaxPosition]
$_ASMCode &= "7F" & Hex(($End - $JGEnd),2) ;JG End
$JGEnd = BinaryLen($_ASMCode)

$_ASMCode &= "035C24" & Hex($OffSetStep,2) ;add ebx,[esp + $OffSetStep]
$JMPStart = BinaryLen($_ASMCode)
$_ASMCode &= "E9" & HexBinary(-(($JMPStart - $Start) + 5)) ;JMP Start

; TC: //
$TC = BinaryLen($_ASMCode)
$_ASMCode &= "83C7" & Hex(1,2) ;add edi,1
$_ASMCode &= "8BC7" ;mov eax,edi
$_ASMCode &= "C2" & Hex((($PointerSize * 2) + ($DwordSize * 4)),2) & Hex(0,2) ;ret (($PointerSize * 2) + ($DwordSize * 3)) & "00" // Args Size

; End: //
$End = BinaryLen($_ASMCode)
$_ASMCode &= "B8" & HexBinary(0) ;mov eax,0
$_ASMCode &= "C2" & Hex((($PointerSize * 2) + ($DwordSize * 4)),2) & Hex(0,2) ;ret (($PointerSize * 2) + ($DwordSize * 3)) & "00" // Args Size

Next

$Address = DllStructCreate("byte[" & BinaryLen($_ASMCode) & "]")
DllStructSetData($Address,1,$_ASMCode)
Return $Address

EndFunc

Func LoadCallbackBinarySearch()

Local $TA,$TB,$TC,$Start,$JGEnd,$JZTC,$TBJNZ,$JMPTA,$JMPStartA,$JMPStartB,$End,$JZEnd,$JGEnd2,$JZTD,$TD,$JGEnd3,$JMPStartC

Local $OffSetMaxPosition = $PointerSize
Local $OffSetDataPtrSize = ($OffSetMaxPosition + $DwordSize)
Local $OffSetSubDataPtrSize = ($OffSetDataPtrSize + $DwordSize)
Local $OffSetDataPtr = ($OffSetSubDataPtrSize + $DwordSize)
Local $OffSetSubDataPtr = ($OffSetDataPtr + $PointerSize)
Local $OffSetCkFuncPtr = ($OffSetSubDataPtr + $PointerSize)
Local $OffSetStep = ($OffSetCkFuncPtr + $PointerSize)
Local $OffSetStepTest = ($OffSetStep + $DwordSize)

For $i = 1 To 2

$_ASMCode =  "0x"

$_ASMCode &= "BF" & HexBinary(0) ;mov edi,0
$_ASMCode &= "8B7424" & Hex($OffSetMaxPosition,2) ;mov esi,[esp + $OffSetMaxPosition]
$_ASMCode &= "8B5C24" & Hex($OffSetDataPtr,2) ;mov ebx,[esp + $OffSetDataPtr]
$_ASMCode &= "8B4C24" & Hex($OffSetSubDataPtr,2) ;mov ecx,[esp + $OffSetSubDataPtr]

; $Start: //
$Start = BinaryLen($_ASMCode)

$_ASMCode &= "BA" & HexBinary(0) ;mov edx,0

; TA: //
$TA = BinaryLen($_ASMCode)
$_ASMCode &= "3B5424" & Hex($OffSetSubDataPtrSize,2) ;CMP edx,[esp + $OffSetSubDataPtrSize]
$_ASMCode &= "74" & Hex(($TC - $JZTC),2) ;JZ $TC;
$JZTC = BinaryLen($_ASMCode)

$_ASMCode &= "8A2413" ;mov AH,[ebx + edx]
$_ASMCode &= "3A2411" ;CMP AH,[ecx + edx]
$_ASMCode &= "75" & Hex(($TB - $TBJNZ),2) ;JNZ TB
$TBJNZ = BinaryLen($_ASMCode)

$_ASMCode &= "83C2" & Hex(1,2) ;add edx,1
$JMPTA = BinaryLen($_ASMCode)
$_ASMCode &= "E9" & HexBinary(-(($JMPTA - $TA) + 5)) ;JMP TA

; TB: //
$TB = BinaryLen($_ASMCode)
$_ASMCode &= "037C24" & Hex($OffSetStep,2) ;add edi,[esp + $OffSetStep]

$_ASMCode &= "3BFE" ;CMP edi,esi
$_ASMCode &= "7F" & Hex(($End - $JGEnd),2) ;JG End
$JGEnd = BinaryLen($_ASMCode)

$_ASMCode &= "035C24" & Hex($OffSetStep,2) ;add ebx,[esp + $OffSetStep]
$JMPStartA = BinaryLen($_ASMCode)
$_ASMCode &= "E9" & HexBinary(-(($JMPStartA - $Start) + 5)) ;JMP Start

; TC: //
$TC = BinaryLen($_ASMCode)

$_ASMCode &= "8B4424" & Hex($OffSetCkFuncPtr,2) ;mov eax,[esp + $OffSetCkFuncPtr]

$_ASMCode &= "FF7424" & Hex($OffSetSubDataPtrSize,2) ;push [esp + $OffSetSubDataPtrSize]
$_ASMCode &= "FF7424" & Hex($OffSetDataPtrSize,2) ;push [esp + $OffSetDataPtrSize]
$_ASMCode &= "FF7424" & Hex($OffSetSubDataPtr,2) ;push [esp + $OffSetSubDataPtr]
$_ASMCode &= "FF7424" & Hex($OffSetDataPtr,2) ;push [esp + $OffSetDataPtr]
$_ASMCode &= "57" ;push edi;
$_ASMCode &= "83C7" & Hex(1,2) ;add edi,1
$_ASMCode &= "57" ;push edi;
$_ASMCode &= "83EF" & Hex(1,2) ;sub edi,1

$_ASMCode &= "FFD0" ;call eax

$_ASMCode &= "83F8" & Hex(0,2);CMP eax,0
$_ASMCode &= "74" & Hex(($End - $JZEnd),2) ;JZ $End;
$JZEnd = BinaryLen($_ASMCode)

$_ASMCode &= "8B4424" & Hex($OffSetStepTest,2) ;mov eax,[esp + $OffSetStepTest]
$_ASMCode &= "83F8" & Hex(1,2);CMP eax,1
$_ASMCode &= "74" & Hex(($TD - $JZTD),2) ;JZ $TD;
$JZTD = BinaryLen($_ASMCode)

$_ASMCode &= "037C24" & Hex($OffSetSubDataPtrSize,2) ;add edi,[esp + $OffSetSubDataPtrSize]
$_ASMCode &= "3BFE" ;CMP edi,esi
$_ASMCode &= "7F" & Hex(($End - $JGEnd3),2) ;JG End
$JGEnd3 = BinaryLen($_ASMCode)

$_ASMCode &= "035C24" & Hex($OffSetSubDataPtrSize,2) ;add ebx,[esp + $OffSetSubDataPtrSize]
$_ASMCode &= "8B4C24" & Hex($OffSetSubDataPtr,2) ;mov ecx,[esp + $OffSetSubDataPtr]

$JMPStartC = BinaryLen($_ASMCode)
$_ASMCode &= "E9" & HexBinary(-(($JMPStartC - $Start) + 5)) ;JMP Start

; TD: //
$TD = BinaryLen($_ASMCode)
$_ASMCode &= "037C24" & Hex($OffSetStep,2) ;add edi,[esp + $OffSetStep]
$_ASMCode &= "3BFE" ;CMP edi,esi
$_ASMCode &= "7F" & Hex(($End - $JGEnd2),2) ;JG End
$JGEnd2 = BinaryLen($_ASMCode)

$_ASMCode &= "035C24" & Hex($OffSetStep,2) ;add ebx,[esp + $OffSetStep]
$_ASMCode &= "8B4C24" & Hex($OffSetSubDataPtr,2) ;mov ecx,[esp + $OffSetSubDataPtr]

$JMPStartB = BinaryLen($_ASMCode)
$_ASMCode &= "E9" & HexBinary(-(($JMPStartB - $Start) + 5)) ;JMP Start

; End: //
$End = BinaryLen($_ASMCode)
$_ASMCode &= "B8" & HexBinary(0) ;mov eax,0
$_ASMCode &= "C2" & Hex((($PointerSize * 3) + ($DwordSize * 5)),2) & Hex(0,2) ;ret (($PointerSize * 3) + ($DwordSize * 5)) & "00" // Args Size

Next

$Address = DllStructCreate("byte[" & BinaryLen($_ASMCode) & "]")
DllStructSetData($Address,1,$_ASMCode)
Return $Address

EndFunc


Func LoadXBinarySearch()

Local $TA,$TB,$TC,$TD,$Start,$JGEnd,$JZTC,$TBJNZ,$JMPTA,$JMPStartA,$JMPStartB
Local $JMPStartC ,$End,$JZEnd,$JZTD,$TE,$JZTE,$JMPStartD,$TF,$JZTF,$JMPStartE

Local $OffSetMaxPosition = $PointerSize
Local $OffSetDataPtrSize = ($OffSetMaxPosition + $DwordSize)
Local $OffSetSubDataPtrSize = ($OffSetDataPtrSize + $DwordSize)
Local $OffSetDataPtr = ($OffSetSubDataPtrSize + $DwordSize)
Local $OffSetSubDataPtr = ($OffSetDataPtr + $PointerSize)
Local $OffSetRtStPtr = ($OffSetSubDataPtr + $PointerSize)
Local $OffSetStep = ($OffSetRtStPtr + $PointerSize)
Local $OffSetStepTest = ($OffSetStep + $DwordSize)

For $i = 1 To 2

$_ASMCode =  "0x"

$_ASMCode &= "BF" & HexBinary(0) ;mov edi,0

;$Start: //
$Start = BinaryLen($_ASMCode)
$_ASMCode &= "8B4424" & Hex($OffSetMaxPosition,2) ;mov eax,[esp + $OffSetMaxPosition]
$_ASMCode &= "3BF8" ;CMP edi,eax
$_ASMCode &= "0F8F" & HexBinary(($End - $JGEnd)) ;JG End
$JGEnd = BinaryLen($_ASMCode)

$_ASMCode &= "BE" & HexBinary(0) ;mov esi,0

; TA: //
$TA = BinaryLen($_ASMCode)
$_ASMCode &= "8B4424" & Hex($OffSetSubDataPtrSize,2) ;mov eax,[esp + $OffSetSubDataPtrSize]
$_ASMCode &= "3BF0" ;CMP esi,eax
$_ASMCode &= "74" & Hex(($TC - $JZTC),2) ;JZ $TC;
$JZTC = BinaryLen($_ASMCode)

$_ASMCode &= "8B5C24" & Hex($OffSetDataPtr,2) ;mov ebx,[esp + $OffSetDataPtr]
$_ASMCode &= "03DF" ;add ebx,edi
$_ASMCode &= "03DE" ;add ebx,esi
$_ASMCode &= "8A0B" ;mov CL,[ebx];
$_ASMCode &= "8B5C24" & Hex($OffSetSubDataPtr,2) ;mov ebx,[esp + $OffSetSubDataPtr]
$_ASMCode &= "03DE" ;add ebx,esi
$_ASMCode &= "8A2B" ;mov CH,[ebx];

$_ASMCode &= "3ACD" ;CMP CL,CH
$_ASMCode &= "75" & Hex(($TB - $TBJNZ),2) ;JNZ TE
$TBJNZ = BinaryLen($_ASMCode)

$_ASMCode &= "83C6" & Hex(1,2) ;add esi,1
$JMPTA = BinaryLen($_ASMCode)
$_ASMCode &= "E9" & HexBinary(-(($JMPTA - $TA) + 5)) ;JMP TA

; TB: //
$TB = BinaryLen($_ASMCode)
$_ASMCode &= "037C24" & Hex($OffSetStep,2) ;add edi,[esp + $OffSetStep]
$JMPStartA = BinaryLen($_ASMCode)
$_ASMCode &= "E9" & HexBinary(-(($JMPStartA - $Start) + 5)) ;JMP Start

; TC: //
$TC = BinaryLen($_ASMCode)
$_ASMCode &= "8B4424" & Hex($OffSetRtStPtr,2) ;mov eax,[esp + $OffSetRtStPtr]
$_ASMCode &= "8B00" ;mov eax,[eax]
$_ASMCode &= "83F8" & Hex(0,2);CMP eax,0
$_ASMCode &= "74" & Hex(($TD - $JZTD),2) ;JZ $TD
$JZTG = BinaryLen($_ASMCode)

$_ASMCode &= "83C7" & Hex(1,2) ;add edi,1

$_ASMCode &= "8B4424" & Hex($OffSetRtStPtr,2) ;mov eax,[esp + $OffSetRtStPtr]
$_ASMCode &= "8B00" ;mov eax,[eax]
$_ASMCode &= "83C0" & Hex(1,2) ;add eax,1
$_ASMCode &= "B9" & HexBinary($DwordSize) ;mov ecx,$DwordSize
$_ASMCode &= "F7E1" ;MUL ecx;
$_ASMCode &= "50" ;push eax
$_ASMCode &= "B8" & HexBinary($Malloc) ;mov eax,$Malloc
$_ASMCode &= "FFD0" ;call eax
$_ASMCode &= "83C4" & Hex($DwordSize,2) ;add esp,$DwordSize
$_ASMCode &= "8BD8" ;mov ebx,eax

$_ASMCode &= "8B4424" & Hex($OffSetRtStPtr,2) ;mov eax,[esp + $OffSetRtStPtr]
$_ASMCode &= "8B00" ;mov eax,[eax]
$_ASMCode &= "B9" & HexBinary($DwordSize) ;mov ecx,$DwordSize
$_ASMCode &= "F7E1" ;MUL ecx;
$_ASMCode &= "50" ;push eax
$_ASMCode &= "8B4424" & Hex(($OffSetRtStPtr + $DwordSize),2) ;mov eax,[esp + ($OffSetRtStPtr + $DwordSize)]
$_ASMCode &= "83C0" & Hex($DwordSize,2) ;add eax,$DwordSize
$_ASMCode &= "8B00" ;mov eax,[eax]
$_ASMCode &= "50" ;push eax
$_ASMCode &= "53" ;push ebx
$_ASMCode &= "B8" & HexBinary($Mmove) ;mov eax,$Mmove
$_ASMCode &= "FFD0" ;call eax
$_ASMCode &= "83C4" & Hex((($PointerSize * 2) + $DwordSize),2) ;add esp,(($PointerSize * 2) + $DwordSize)

$_ASMCode &= "8B4424" & Hex($OffSetRtStPtr,2) ;mov eax,[esp + $OffSetRtStPtr]
$_ASMCode &= "83C0" & Hex($DwordSize,2) ;add eax,$DwordSize
$_ASMCode &= "8B00" ;mov eax,[eax]
$_ASMCode &= "50" ;push eax
$_ASMCode &= "B8" & HexBinary($FreeMemy) ;mov eax,$FreeMemy
$_ASMCode &= "FFD0" ;call eax
$_ASMCode &= "83C4" & Hex($PointerSize,2) ;add esp,$PointerSize

$_ASMCode &= "8B4424" & Hex($OffSetRtStPtr,2) ;mov eax,[esp + $OffSetRtStPtr]
$_ASMCode &= "8B00" ;mov eax,[eax]
$_ASMCode &= "B9" & HexBinary($DwordSize) ;mov ecx,$DwordSize
$_ASMCode &= "F7E1" ;MUL ecx;
$_ASMCode &= "893C03" ;mov [ebx + eax],edi

$_ASMCode &= "8B4424" & Hex($OffSetRtStPtr,2) ;mov eax,[esp + $OffSetRtStPtr]
$_ASMCode &= "8000" & Hex(1,2) ;add [eax],1
$_ASMCode &= "83C0" & Hex($DwordSize,2) ;add eax,$DwordSize
$_ASMCode &= "8918" ;mov [eax],ebx

$_ASMCode &= "83EF" & Hex(1,2) ;sub edi,1

$_ASMCode &= "8B4424" & Hex($OffSetStepTest,2) ;mov eax,[esp + $OffSetStepTest]
$_ASMCode &= "83F8" & Hex(1,2);CMP eax,1
$_ASMCode &= "74" & Hex(($TF - $JZTF),2) ;JZ $TF;
$JZTF = BinaryLen($_ASMCode)

$_ASMCode &= "037C24" & Hex($OffSetSubDataPtrSize,2) ;add edi,[esp + $OffSetSubDataPtrSize]
$JMPStartE = BinaryLen($_ASMCode)
$_ASMCode &= "E9" & HexBinary(-(($JMPStartE - $Start) + 5)) ;JMP Start

; TF: //
$TF = BinaryLen($_ASMCode)
$_ASMCode &= "037C24" & Hex($OffSetStep,2) ;add edi,[esp + $OffSetStep]
$JMPStartB = BinaryLen($_ASMCode)
$_ASMCode &= "E9" & HexBinary(-(($JMPStartB - $Start) + 5)) ;JMP Start

; $TD: //
$TD = BinaryLen($_ASMCode)
$_ASMCode &= "83C7" & Hex(1,2) ;add edi,1
$_ASMCode &= "BB" & HexBinary($DwordSize) ;mov ebx,$DwordSize
$_ASMCode &= "53" ;push ebx
$_ASMCode &= "B8" & HexBinary($Malloc) ;mov eax,$Malloc
$_ASMCode &= "FFD0" ;call eax
$_ASMCode &= "83C4" & Hex($DwordSize,2) ;add esp,$DwordSize
$_ASMCode &= "8938" ;mov [eax],edi
$_ASMCode &= "8B5C24" & Hex($OffSetRtStPtr,2) ;mov ebx,[esp + $OffSetRtStPtr]
$_ASMCode &= "C603" & Hex(1,2) ;mov [ebx],1
$_ASMCode &= "83C3" & Hex($DwordSize,2) ;add ebx,$DwordSize
$_ASMCode &= "8903" ;mov [ebx],eax

$_ASMCode &= "83EF" & Hex(1,2) ;sub edi,1

$_ASMCode &= "8B4424" & Hex($OffSetStepTest,2) ;mov eax,[esp + $OffSetStepTest]
$_ASMCode &= "83F8" & Hex(1,2);CMP eax,1
$_ASMCode &= "74" & Hex(($TE - $JZTE),2) ;JZ $TE;
$JZTE = BinaryLen($_ASMCode)

$_ASMCode &= "037C24" & Hex($OffSetSubDataPtrSize,2) ;add edi,[esp + $OffSetSubDataPtrSize]
$JMPStartD = BinaryLen($_ASMCode)
$_ASMCode &= "E9" & HexBinary(-(($JMPStartD - $Start) + 5)) ;JMP Start

; $TE: //
$TE = BinaryLen($_ASMCode)
$_ASMCode &= "037C24" & Hex($OffSetStep,2) ;add edi,[esp + $OffSetStep]
$JMPStartC = BinaryLen($_ASMCode)
$_ASMCode &= "E9" & HexBinary(-(($JMPStartC - $Start) + 5)) ;JMP Start

; End: //
$End = BinaryLen($_ASMCode)
$_ASMCode &= "B8" & HexBinary(0) ;mov eax,0
$_ASMCode &= "C2" & Hex((($PointerSize * 3) + ($DwordSize * 5)),2) & Hex(0,2) ;ret (($PointerSize * 3) + ($DwordSize * 3)) & "00" // Args Size

Next

$Address = DllStructCreate("byte[" & BinaryLen($_ASMCode) & "]")
DllStructSetData($Address,1,$_ASMCode)

Return $Address

EndFunc

Func HexBinary($Value)
Return Hex(Binary($Value))
EndFunc

 

ColorSearch.au3

#include <WinAPI.au3>
#include <Memory.au3>
#include <Color.au3>
#include <ScreenCapture.au3>
#include "ASM_BinarySearch.au3"

Global $itagRGBQUAD = "BYTE rgbBlue;BYTE rgbGreen;BYTE rgbRed;BYTE rgbReserved"
Global $RgbSize = DllStructGetSize(DllStructCreate($itagRGBQUAD))

$hGUI = GUICreate("Color Gui",20,20,@DesktopWidth - 20,@DesktopHeight - 100)
GUISetBkColor(0xFF80FF, $hGUI)
GUISetState(@SW_SHOW, $hGUI)

MsgBox(0,"PixelSearch","PixelSearch")

$hTimer = TimerInit()
$Pos1 = PixelSearch(0 , 0, @DesktopWidth, @DesktopHeight,0xFF80FF) ;0xFFFFFF
$iDiff1 = TimerDiff($hTimer)

MsgBox(0,"nPixelSearch","nPixelSearch")

$hTimer = TimerInit()
$Pos2 = nPixelSearch(0, 0, @DesktopWidth, @DesktopHeight,0xFF80FF) ;0xFFFFFF
$iDiff2 = TimerDiff($hTimer)

if IsArray($Pos1) And IsArray($Pos2) Then
$Text1 = String($Pos1[0] & "  " & $Pos1[1] & " PixelSearch Time  ==> " & $iDiff1)
$Text2 = String($Pos2[0] & "  " & $Pos2[1] & " nPixelSearch Time ==> " & $iDiff2)
MsgBox(0,"PixelSearch",$Text1 & @CRLF & $Text2)
EndIf

MsgBox(0,"nPixelSearch","nPixelSearch")

$hTimer = TimerInit()
$Pos2 = nPixelSearch(0, 0, @DesktopWidth, @DesktopHeight,0xFF80FF) ;0xFFFFFF
$iDiff2 = TimerDiff($hTimer)

MsgBox(0,"PixelSearch","PixelSearch")

$hTimer = TimerInit()
$Pos1 = PixelSearch(0 , 0, @DesktopWidth, @DesktopHeight,0xFF80FF) ;0xFFFFFF
$iDiff1 = TimerDiff($hTimer)


if IsArray($Pos1) And IsArray($Pos2) Then
$Text1 = String($Pos1[0] & "  " & $Pos1[1] & " PixelSearch Time  ==> " & $iDiff1)
$Text2 = String($Pos2[0] & "  " & $Pos2[1] & " nPixelSearch Time ==> " & $iDiff2)
MsgBox(0,"PixelSearch",$Text1 & @CRLF & $Text2)
EndIf


Func nPixelSearch($left = 0,$top = 0,$right = -1,$bottom = -1,$Color = 0,$bCursor = False)
Local $hBmp = _ScreenCapture_Capture("",$left,$top,$right,$bottom,$bCursor)
if Not($hBmp) Then Return SetError(1,0,0)
Local $aCoord = BmpSearchColor($hBmp,$Color)
_WinAPI_DeleteObject($hBmp)
if Not IsArray($aCoord) Then Return SetError(2,0,0)
Return $aCoord
EndFunc

Func BmpSearchColor($hBmp,$Color)
Local $BitsStruct = GetBitsStruct($hBmp)
if @error Then Return SetError(1,0,0)
Local $BitsStringPtr = DllStructGetPtr($BitsStruct,"RGBQUAD")
Local $BitsSize = DllStructGetData($BitsStruct,"SIZE")
Local $biWidth = DllStructGetData($BitsStruct,"WIDTH")
Local $biHeight = DllStructGetData($BitsStruct,"HEIGHT")
Local $iColor = DllStructCreate("BYTE RGB[3]")
DllStructSetData($iColor,1,$Color)
$iColorPtr = DllStructGetPtr($iColor)
$FindPosition = BinarySearch($BitsStringPtr,$iColorPtr,$BitsSize,3,4)
;$SubDataPtrSize = 3 // $Step = $RgbSize = 4 // ; $Step Is Loop Step
if @error Then Return SetError(2,0,0)
Local $OffSetPosition = $FindPosition - 1
$OffSetPosition /= $RgbSize ; $RgbSize = 4 /// 4byte = 1pixel
$X =  Mod($OffSetPosition,$biWidth) ; Get left
$Y = (($OffSetPosition - $X) / $biWidth) ; Get top
Local $aCoord[2]
$aCoord[0] = $X
$aCoord[1] = $Y
Return $aCoord
EndFunc

Func GetBitsStruct( $hBmp , $L = -1 , $T = -1 , $W = -1 , $H = -1 )
Local $SizeArray = GetImageSize($hBmp)
if @error Then Return SetError(1,0,0)
Local $biWidth = $SizeArray[0]
Local $biHeight = $SizeArray[1]
if ($L < 0) Then $L = 0
if ($T < 0) Then $T = 0
if ($W < 0) Then $W = ($biWidth - $L)
if ($H < 0) Then $H = ($biHeight - $T)
if ($L >= $biWidth Or (($L + $W) > $biWidth)) Then $L = 0
if ($T >= $biHeight Or (($T + $H) > $biHeight)) Then $T = 0
Local $vRgbSize = ($RgbSize * ($biWidth * $biHeight))
Local $vStBits = DllStructCreate("INT WIDTH;INT HEIGHT;INT SIZE;BYTE RGBQUAD[" & ($vRgbSize) & "]")
DllStructSetData($vStBits ,"WIDTH",$biWidth)
DllStructSetData($vStBits,"HEIGHT",$biHeight)
DllStructSetData($vStBits,"SIZE",$vRgbSize)
GetBitmapBits($hBmp,DllStructGetPtr($vStBits,"RGBQUAD"),$vRgbSize)
if @error Then Return SetError(2,0,0)
if ($L = 0 And $T = 0 And $W = $biWidth And $H = $biHeight) Then Return $vStBits
Local $nRgbSize = ($RgbSize * ($W * $H)) , $ColusCount = $W
Local $nStBits = DllStructCreate("INT WIDTH;INT HEIGHT;INT SIZE;BYTE RGBQUAD[" & ($nRgbSize) & "]")
DllStructSetData($nStBits ,"WIDTH",$W)
DllStructSetData($nStBits,"HEIGHT",$H)
DllStructSetData($nStBits,"SIZE",$nRgbSize)
For $RowIndex = 0 To ($H - 1)
Local $nStBPtr = GetPointerAtRowPos($nStBits,$RowIndex)
; Move Ptr To First BYTE Of Row => $RowIndex
Local $vStBPtr = GetPointerAtRowPos($vStBits,($RowIndex + $T)) + ($L * $RgbSize)
; Move Ptr To First BYTE Of Row => ($RowIndex + $T)
; + ($L * $RgbSize) Move PointerAtRowPos From left to right + ($L * $RgbSize)
_MemMoveMemory($vStBPtr,$nStBPtr,($RgbSize * ($ColusCount - 1))) ;Size Of One Row In $nStBPtr
Next
Return $nStBits
EndFunc

Func GetBitmapBits($hbmp,$lpvBits,$cbBuffer)
$BytesNu = DllCall("Gdi32.dll","LONG","GetBitmapBits","ptr" _
,$hbmp,"LONG",$cbBuffer,"ptr",$lpvBits)
if @error Or Not($BytesNu[0]) Then SetError(1,0,0)
Return SetError(0,0,$BytesNu[0])
EndFunc

Func GetPointerAtRowPos($StBits,$RowIndex)
if Not IsDllStruct($StBits) Then Return SetError(1,0,0)
Local $ColusCount = DllStructGetData($StBits,"WIDTH")
Local $RowsCount = DllStructGetData($StBits,"HEIGHT")
If ($RowIndex < 0 Or $RowIndex > ($RowsCount -1)) Then Return SetError(2,0,0)
Local $StBitsPtr = DllStructGetPtr($StBits,"RGBQUAD")
Local $PointerAtRowPos = ($StBitsPtr + (($RowIndex * $ColusCount) * $RgbSize))
Return $PointerAtRowPos
EndFunc

Func GetImageSize($hBmp)
Local $ntagBITMAPINFO = "DWORD biSize;LONG biWidth;LONG biHeight;USHORT biPlanes;" & _
"USHORT biBitCount;DWORD biCompression;DWORD biSizeImage;LONG biXPelsPerMeter;" & _
"LONG biYPelsPerMeter;DWORD biClrUsed;DWORD biClrImportant;BYTE RGBQUAD[4]"
Local $vBITMAPINFO = DllStructCreate($ntagBITMAPINFO)
DllStructSetData($vBITMAPINFO,"biSize",(DllStructGetSize($vBITMAPINFO) - $RgbSize))
Local $hDC = _WinAPI_CreateCompatibleDC(0)
if Not($hDC) Then
_WinAPI_DeleteDC($hDC)
Return SetError(1,0,0)
EndIf
$Return = _WinAPI_GetDIBits($hDC,$hBmp,0,0,0,DllStructGetPtr($vBITMAPINFO),0)
if Not($Return) Then
_WinAPI_DeleteDC($hDC)
Return SetError(2,0,0)
EndIf
_WinAPI_DeleteDC($hDC)
Local $biWidth = DllStructGetData($vBITMAPINFO,"biWidth")
Local $biHeight = DllStructGetData($vBITMAPINFO,"biHeight")
Local $SizeArray[2]
$SizeArray[0] = $biWidth
$SizeArray[1] = $biHeight
Return $SizeArray
EndFunc

CallbackBinarySearch.au3

#include <WinAPI.au3>
#include <Memory.au3>
#include <Color.au3>
#include <ScreenCapture.au3>
#include "ASM_BinarySearch.au3"

$Text = ""
$SubText = "Autoit"

For $i = 1 To 10000
$Text &= "1"
Next

$Text &= "Autoit" & "Autoit" & "Autoit"

$Len1 = StringLen($Text)
$Len2 = StringLen($SubText)

$St1 = DllStructCreate("CHAR[" & $Len1 & "]")
DllStructSetData($St1,1,$Text)
$Ptr1 = DllStructGetPtr($St1)

$St2 = DllStructCreate("CHAR[" & $Len2  & "]")
DllStructSetData($St2,1,$SubText)
$Ptr2 = DllStructGetPtr($St2)

$Return = CallbackBinarySearch($Ptr1,$Ptr2,"CallbackFunc",$Len1,$Len2)
MsgBox(0,"Return",$Return)

Func CallbackFunc($FindPosition,$OffSetPosition,$DataPtr,$SubDataPtr,$DataPtrSize,$SubDataPtrSize)

MsgBox(0,"OffSetPosition = " & $OffSetPosition ,"FindPosition = " & $FindPosition)

Return 1
;return
;0 ; Stop
;Other Ways : Continue

EndFunc

XBinarySearch.au3

#include <WinAPI.au3>
#include <Memory.au3>
#include <Color.au3>
#include <ScreenCapture.au3>
#include "ASM_BinarySearch.au3"

$Text = ""
$SubText = "Autoit"

For $i = 1 To 10000
$Text &= "1"
Next

$Text &= "Autoit" & "Autoit" & "Autoit"

$Len1 = StringLen($Text)
$Len2 = StringLen($SubText)

$St1 = DllStructCreate("CHAR[" & $Len1 & "]")
DllStructSetData($St1,1,$Text)
$Ptr1 = DllStructGetPtr($St1)

$St2 = DllStructCreate("CHAR[" & $Len2  & "]")
DllStructSetData($St2,1,$SubText)
$Ptr2 = DllStructGetPtr($St2)

$ReturnStruct = XBinarySearch($Ptr1,$Ptr2,$Len1,$Len2)

For $i = 1 To DllStructGetData($ReturnStruct,"ArrayCount")

$FindPosition = DllStructGetData($ReturnStruct,"PositionArray",$i)

MsgBox(0,"Msg","FindPosition = " & $FindPosition)

Next

 

Edited by wolf9228
3 people like this

صرح السماء كان هنا

 

Share this post


Link to post
Share on other sites



Good Work :bye:

Share this post


Link to post
Share on other sites

Good Work :bye:

 

Thanks MsgBox :)


صرح السماء كان هنا

 

Share this post


Link to post
Share on other sites

Find an error in BmpSearchColor function :sweating:


صرح السماء كان هنا

 

Share this post


Link to post
Share on other sites

Another error in the same function :sweating:


صرح السماء كان هنا

 

Share this post


Link to post
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
Sign in to follow this  
Followers 0

  • Similar Content

    • RyukShini
      By RyukShini
      Hello AutoIT masters

      I am gonna start writing a fun little script to resize X amount of images with the Horizontal/Vertical aspects to 15/15 instead of the standard 100/100

      I need to be able to do this with X amount of images and after changing the dimensions I need to save all the images in a path.
      so to keep things simple.

      1: File open prompt
      2: Choose X amount of images
      3: Automatically choose 15/15 for all images
      4: Save in path chosen by user
      5: Might be more to come.
      6: the faster the better!
       
      I am gonna start this project tomorrow, any help/references is highly appreciated!
      Thanks in advance and Wish me luck
       
       
      #### I Hit a bump on the road ###
      I successfully manage to do what I want to do and I successfully manage to rewrite names but 3 of the image names won't rename?
      So lets say I have 10 images that all get resized, then 7 of them gets renamed but not the last three, confuses me quite a bit?
      Thanks in advance!
      Rename script:
       
      Func renameall() local $path = @ScriptDir & "\" & $nymappe & "\" local $ret Local $hSearch = FileFindFirstFile($path & "*.jpg") $i = 1 While 1 $sFileName = FileFindNextFile($hSearch) If @error Then ExitLoop if FileMove($path & $sFileName, $path & String("NewName" & +$i) & ".jpg", 0) = 1 then ConsoleWrite($path & $sFileName & ' renamed to ' & $path & String("NewName" & +$i) & ".jpg" & @LF) Else ConsoleWrite('File rename failed for file = ' & $path & $sFileName & @LF) endif $i += 1 WEnd FileClose($hSearch) EndFunc Full script:
      #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Icon=car.ico #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #include <GDIPlus.au3> #include <File.au3> #include <Array.au3> #include <ColorConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <ProgressConstants.au3> ; Declare array Dim $Images[1] ; Gets all JPG files in the current directory (@ScriptDir). Local $search = FileFindFirstFile("*.jpg") ; Check if the search was successful If $search = -1 Then MsgBox(0, "Error", "No JPG files could be found.") Exit EndIf ; Resize array While 1 If IsArray($Images) Then Local $Bound = UBound($Images) ReDim $Images[$Bound+1] EndIf $Images[$Bound] = FileFindNextFile($search) If @error Then ExitLoop WEnd ; Close the search handle FileClose($search) ; Create directory "resized" if not there yet $nymappe = InputBox("Mappe / Bil Navn", "Mappe / Bil Navn") If NOT FileExists(@ScriptDir & "\" & $nymappe & "\") Then DirCreate(@ScriptDir & "\" & $nymappe & "\") EndIf ; Loop for JPGs - gets dimension of JPG and calls resize function to resize to 50% width and 50% height For $i = 1 to Ubound($Images)-1 If $Images[$i] <> "" AND FileExists(@ScriptDir & "\" & $Images[$i]) Then Local $ImagePath = @ScriptDir & "\" & $Images[$i] _GDIPlus_Startup() Local $hImage = _GDIPlus_ImageLoadFromFile($ImagePath) Local $ImageWidth = _GDIPlus_ImageGetWidth($hImage) Local $ImageHeight = _GDIPlus_ImageGetHeight($hImage) _GDIPlus_ImageDispose($hImage) _GDIPlus_Shutdown() ;MsgBox(0,"DEBUG", $ImageWidth & " x " & $ImageHeight) Local $NewImageWidth = ($ImageWidth / 100) * 15 Local $NewImageHeight = ($ImageHeight / 100) * 15 ;MsgBox(0,"DEBUG: " & $i,$Images[$i]) _ImageResize(@ScriptDir & "\" & $Images[$i], @ScriptDir & "\" & $nymappe & "\" & $Images[$i], $NewImageWidth, $NewImageHeight) EndIf Next ; Resize function Func _ImageResize($sInImage, $sOutImage, $iW, $iH) Local $hWnd, $hDC, $hBMP, $hImage1, $hImage2, $hGraphic, $CLSID, $i = 0 ;OutFile path, to use later on. Local $sOP = StringLeft($sOutImage, StringInStr($sOutImage, "\", 0, -1)) ;OutFile name, to use later on. Local $sOF = StringMid($sOutImage, StringInStr($sOutImage, "\", 0, -1) + 1) ;OutFile extension , to use for the encoder later on. Local $Ext = StringUpper(StringMid($sOutImage, StringInStr($sOutImage, ".", 0, -1) + 1)) ; Win api to create blank bitmap at the width and height to put your resized image on. $hWnd = _WinAPI_GetDesktopWindow() $hDC = _WinAPI_GetDC($hWnd) $hBMP = _WinAPI_CreateCompatibleBitmap($hDC, $iW, $iH) _WinAPI_ReleaseDC($hWnd, $hDC) ;Start GDIPlus _GDIPlus_Startup() ;Get the handle of blank bitmap you created above as an image $hImage1 = _GDIPlus_BitmapCreateFromHBITMAP ($hBMP) ;Load the image you want to resize. $hImage2 = _GDIPlus_ImageLoadFromFile($sInImage) ;Get the graphic context of the blank bitmap $hGraphic = _GDIPlus_ImageGetGraphicsContext ($hImage1) ;Draw the loaded image onto the blank bitmap at the size you want _GDIPLus_GraphicsDrawImageRect($hGraphic, $hImage2, 0, 0, $iW, $iH) ;Get the encoder of to save the resized image in the format you want. $CLSID = _GDIPlus_EncodersGetCLSID($Ext) ;Generate a number for out file that doesn't already exist, so you don't overwrite an existing image. Do $i += 1 Until (Not FileExists($sOP & $i & "_" & $sOF)) ;Prefix the number to the begining of the output filename $sOutImage = $sOP & $i & "_" & $sOF ;Save the new resized image. _GDIPlus_ImageSaveToFileEx($hImage1, $sOutImage, $CLSID) ;Clean up and shutdown GDIPlus. _GDIPlus_ImageDispose($hImage1) _GDIPlus_ImageDispose($hImage2) _GDIPlus_GraphicsDispose ($hGraphic) _WinAPI_DeleteObject($hBMP) _GDIPlus_Shutdown() Call("renameall") EndFunc Func renameall() local $path = @ScriptDir & "\" & $nymappe & "\" local $ret Local $hSearch = FileFindFirstFile($path & "*.jpg") $i = 1 While 1 $sFileName = FileFindNextFile($hSearch) If @error Then ExitLoop if FileMove($path & $sFileName, $path & String("NewName" & +$i) & ".jpg", 0) = 1 then ConsoleWrite($path & $sFileName & ' renamed to ' & $path & String("NewName" & +$i) & ".jpg" & @LF) Else ConsoleWrite('File rename failed for file = ' & $path & $sFileName & @LF) endif $i += 1 WEnd FileClose($hSearch) EndFunc  
    • ProgrammerKid
      By ProgrammerKid
      Hello, I decided to start a new project of a web browser. I saw someone already did a good job but I figured out a TAB MANAGEMENT System



      The latest AutoIt Web Browser,
      ARMAND ICYBLUE

      The search section in autoit forums offered me the answer from my question: CAN YOU MAKE A WEB BROWSER IN AUTOIT?

      So, I started up a new source, trying to improve from the old but the good, Gecko Web Browser.

      But, here's my question: Can someone who knows that can improve the current version of my web browser, enter my team and work together at the project?

      Here's the website of the project: Armand IcyBlue Official Website
      Here are some screenshots: Screenshots of Armand IcyBlue's development going along
      Here's of course, the download page: Download Page of Armand IcyBlue

      This web browser contains:




      Any help would be gratefully accepted.

      P.S.: Can't offer the web browser autoit code source for preventing stealing. Icons and images have been took from GECKO WEB BROWSER SOURCE.

      Thank you,
      -ProgrammerKid
    • matwachich
      By matwachich
      New Release: 1.2.0.1 (beta 2) 17/02/2012
      Minor bug fix, see change log


      +: Add/Ajout, -: Remove/Retrait, *:Modified/Modifié, !: Corrected/Corrigé === Version: 1.0.0.0 == First public version === Version: 1.2.0.0 == +: First launch configuration - Search for AutoIt path - Set file associations - Select language according to the system - Ask for SciTE window adaptation +: It is now possible to deactivate the SciTE window adaptation +: Search functionality +: When a file is not found in the Projects/Workspaces history, it is deleted from the list *: File are now opened using SciTE Director Extension (smoother and faster) *: When minimizing SPM while SciTE is minimized, SciTE is not maximized *: File extension .lng is no longer displayed in language selection *: When opening files from Explorer, the are all opened in the current runing SPM instance *: Current working directory is now always set as the last activated project !: When item is renamed, if the name is the same as the old one, so the project is not set as Modified !: A file is now correctly renamed (change icon, correctly sorted) === Version: 1.2.0.1 === !: ShellNew file Template.auproj !: New files where created in bad folder
      New Release: 1.2 (beta 2)
      Here is the new version! lot of enhancements and bug corrections.
      As always, all suggestions and comments are very welcome!

      (See the link below for download)

      PS: 1.2 because iv got a testing version (1.1) that i compiled just for me.

      ----
      Hi everybody!
      As a user of Programmer's Notepad, that i adapted to AutoIt, i really like it's Project Manager

      But, SciTE has got really usefull thing/tools related to AutoIt that i couldn't adapt to Programmer's Notepad.
      I suggested the devs to make a project manager to SciTE but no...

      So i made it my self, and here it is!
      Scite Project Manager is intended for who (like me!) like to divide his scripts into many script, each one related to a particulare aspect of the program you are making (Ex: a program can be splited into files like: gui.au3, database.au3, display.au3, events.au3 .....)
      A program can also have other files, like documentation, to do list, bugs list, change log....

      With SPM (Scite Project Manager) all the paths to all those files is stored in a single file .auproj (AutoIt Project), and you have to do, is open this file, and you have all your project's in a simple TreeView, and you can rearange them in folders if you want!!!

      For example, SPM is made like this (many files, each one for a particular aspect of the program)

      It's simple and beautiful, fully functionnal and well integrated with SciTE.

      It's in beta test, and i'm searching for bugs and suggestions.

      Hope you like it, and why not, if it become enought stable, it will be added to the official SciTE4AutoIt!!!

      Project Page
      Bug Report
      Download
    • Dracil
      By Dracil
      Hello, iam interested in buying a autoit script.

      Please pm me your references.

      Iam a serious buyer, so i need a serious programmer.

      Dracil