Hier meine Version zum Einfärben des aktiven / veränderten(*) SciTE Tabs.
Zum Hooken wird eine DLL verwendet, die ich in Freebasic geschrieben habe, da durch Virtual Address Space dies nicht aus Autoit direkt möglich ist. Die DLL injiziert sich in den SciTE Speicher und das Autoit Skript kommuniziert mit der DLL, die wiederum die Tabs einfärbt. Über das TrayIcon kann man das Programm beenden.
Es ist mir gelungen, die Größe der DLLs auf etwa 6 KB zu reduzieren, und wenn man sie mit UPX komprimiert, sollten sie noch kleiner werden.
Source Code + DLLs hier auf meinem OneDrive: SciTETabHook
AutoIt: SciTETabHook.au3
;Coded by UEZ build 2026-04-21 beta
;It is important to run AutoIt on the same architecture as SciTE!
#pragma compile(FileVersion, 0.3.1.0)
#pragma compile(ProductVersion, 3.3.18.0)
#pragma compile(LegalCopyright, "UEZ 2026")
#pragma compile(CompanyName, "UEZ Software Development")
#pragma compile(FileDescription, "SciTETabHook - a simple tool to colorize tabs in SciTE.")
#pragma compile(Icon, "shell32dll.0252-32x32.ico")
#AutoIt3Wrapper_UseX64=n
#AutoIt3Wrapper_Run_Au3Stripper=y
#Au3Stripper_Parameters=/so /pe ;/rm
#AutoIt3Wrapper_OutFile_X64=SciTETabHook64.exe
#include <Misc.au3>
#include <TrayConstants.au3>
#include <WinAPISysWin.au3>
#include <WinAPIProc.au3>
Global $iPID = ProcessExists(@ScriptName)
If Not _Singleton(@ScriptName, 1) Or ($iPID <> @AutoItPID And $iPID <> 0) Then Exit MsgBox(16, "ERROR", "An occurence of " & @ScriptName & " is already running!", 20)
; Load the appropriate DLL based on AutoIt's architecture
If Not FileExists(@AutoItX64 ? @ScriptDir & "\SciTETabHook_x64.dll" : @ScriptDir & "\SciTETabHook.dll") Then
If @AutoItX64 Then
_SciTeTabHook_x64dll(True)
Else
_SciTeTabHookdll(True)
EndIf
EndIf
Global $hDLL = DllOpen(@AutoItX64 ? @ScriptDir & "\SciTETabHook_x64.dll" : @ScriptDir & "\SciTETabHook.dll")
If $hDLL < 1 Then Exit MsgBox($MB_ICONERROR, "ERROR", "Unable to load SciTETabHook DLL!", 10)
OnAutoItExitRegister("_CleanupSciTEHook")
AutoItSetOption("TrayMenuMode", 3)
Global Const $idTrayExit = TrayCreateItem("Exit")
Global Const $iTrayAutostart = TrayCreateItem("Autostart")
TraySetState($TRAY_ICONSTATE_SHOW)
If RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Run", "SciTETabHook") = '"' & @ScriptDir & '\SciTETabHook' & (@AutoItX64 ? '64' : '') & '.exe"' Then TrayItemSetState($iTrayAutostart, $TRAY_CHECKED)
; Message constants, matching the FreeBASIC DLL definitions
Global Const $WM_USER_HOOK_INIT = $WM_APP + 0x0450
Global Const $WM_USER_SET_COLORS = $WM_APP + 0x0451
Global Const $WM_USER_UNHOOK = $WM_APP + 0x0452
Global Const $WM_USER_APPLY_DARK = $WM_APP + 0x0453
Global $bSciTE_Hooked = False, $iPID = 0, $bSciTEIsx86, $sSciTEArch, $sAutoItArch, $iTID, $hSciTE, $hSciTE_Exit, $bCheckAutostart
Global $cActiveTab = _RGBtoBGR(0x3030C0)
Global $cInactiveTab = 0xF0F0F0
Global $cText = 0x000000
Global $cTextSel = 0xFFFFFF
Global $cUnsaved = _RGBtoBGR(0xFFC0C0)
Global $cUFrameSel = _RGBtoBGR(0x408040)
Global $cUFrame = 0xE5E5E5
ConsoleWrite("Waiting for SciTE..." & @CRLF)
While True
; 1. Check Tray Menu
Switch TrayGetMsg()
Case $idTrayExit
ExitLoop
Case $iTrayAutostart
$bCheckAutostart = BitAND($TRAY_CHECKED, TrayItemGetState($iTrayAutostart))
If $bCheckAutostart Then
TrayItemSetState($iTrayAutostart, $TRAY_UNCHECKED)
AutoStartReg(False)
Else
TrayItemSetState($iTrayAutostart, $TRAY_CHECKED)
AutoStartReg(True)
EndIf
EndSwitch
; 2. Check if SciTE window exists and verify architecture
$iPID = WinGetProcess("[CLASS:SciTEWindow]")
$bSciTEIsx86 = _WinAPI_IsWow64Process($iPID)
$sSciTEArch = $bSciTEIsx86 ? "x86" : "x64"
$sAutoItArch = @AutoItX64 ? "x64" : "x86"
If $sSciTEArch = $sAutoItArch Then
$hSciTE = WinGetHandle("[CLASS:SciTEWindow]")
; CASE A: SciTE is present but not yet hooked
If ($hSciTE <> 0) And (Not $bSciTE_Hooked) Then
; Give SciTE a brief moment to initialize the tab control internally
Sleep(100)
$iTID = _WinAPI_GetWindowThreadProcessId($hSciTE, $iPID)
DllCall($hDLL, "bool", "InstallHook", "dword", $iTID)
; Initialize subclassing within the DLL
_SendMessage($hSciTE, $WM_USER_HOOK_INIT, 0, 0)
; Apply desired colors (Standard RGB Hex values converted to BGR)
_SetSciTeTabColors($hSciTE, $cActiveTab, $cInactiveTab, $cText, $cUnsaved, $cUFrame, $cTextSel, $cUFrameSel)
$bSciTE_Hooked = True
ConsoleWrite("SciTE detected and successfully hooked!" & @CRLF)
; CASE B: SciTE is gone, but our status is still set to "hooked"
ElseIf $hSciTE = 0 And $bSciTE_Hooked Then
; Safety first: remove the hook from the system
DllCall($hDLL, "bool", "UninstallHook")
$bSciTE_Hooked = False
ConsoleWrite("SciTE closed. Waiting for restart..." & @CRLF)
EndIf
Else
MsgBox($MB_ICONERROR, "ERROR", "No cross-architecture DLL-loads possible!" & @CRLF & _
"Script / SciTE architecture must match!" & @CRLF & @CRLF & _
"SciTE: " & $sSciTEArch & @CRLF & _
"Script: " & $sAutoItArch, 10)
Exit
EndIf
Sleep(30)
WEnd
; Cleanup when exiting the AutoIt script
Func _CleanupSciTEHook()
If $bSciTE_Hooked Then
$hSciTE_Exit = WinGetHandle("[CLASS:SciTEWindow]")
If $hSciTE_Exit Then
_SendMessage($hSciTE_Exit, $WM_USER_UNHOOK, 0, 0) ; Remove subclassing
Sleep(50)
If $hDLL > 0 Then DllCall($hDLL, "bool", "UninstallHook") ; Remove hook
Sleep(50)
; Force SciTE to process the queue (triggers deferred FreeLibrary)
_SendMessage($hSciTE_Exit, $WM_NULL, 0, 0)
Sleep(50)
_SendMessage($hSciTE_Exit, $WM_NULL, 0, 0)
EndIf
EndIf
If $hDLL > 0 Then DllClose($hDLL)
ConsoleWrite("SciTE hooking terminated." & @CRLF)
ConsoleWrite("Bye." & @CRLF)
EndFunc
Func AutoStartReg($bSet)
Switch $bSet
Case True
If RegWrite("HKCU\Software\Microsoft\Windows\CurrentVersion\Run", "SciTETabHook", "REG_SZ", '"' & @ScriptDir & '\SciTETabHook' & (@AutoItX64 ? '64' : '') & '.exe"') Then
MsgBox($MB_ICONINFORMATION, "Information", "Autostart entry properly set to the registry", 10)
Else
MsgBox($MB_ICONERROR, "ERROR", "Unable to set autostart entry to the registry!", 30)
EndIf
Case Else
If RegDelete("HKCU\Software\Microsoft\Windows\CurrentVersion\Run", "SciTETabHook") Then
MsgBox($MB_ICONINFORMATION, "Information", "Autostart entry properly removed from the registry", 10)
Else
MsgBox($MB_ICONERROR, "ERROR", "Unable to remove autostart entry from the registry!", 30)
EndIf
EndSwitch
EndFunc ;==>AutoStartReg
Func _SetSciTeTabColors($hSciTE, $iSelColor, $iBgColor, $iTextColor, $iUnsaved, $iFrameColor, $iTextSelColor, $iFrameSelColor)
_SendMessage($hSciTE, $WM_USER_SET_COLORS, 0, $iSelColor)
_SendMessage($hSciTE, $WM_USER_SET_COLORS, 1, $iBgColor)
_SendMessage($hSciTE, $WM_USER_SET_COLORS, 2, $iTextColor)
_SendMessage($hSciTE, $WM_USER_SET_COLORS, 3, $iUnsaved)
_SendMessage($hSciTE, $WM_USER_SET_COLORS, 4, $iFrameColor)
_SendMessage($hSciTE, $WM_USER_SET_COLORS, 5, $iTextSelColor)
_SendMessage($hSciTE, $WM_USER_SET_COLORS, 6, $iFrameSelColor)
EndFunc ;==>_SetSciTeTabColors
Func _RGBtoBGR($iColor)
Return BitOR(BitShift(BitAND($iColor, 0x0000FF), -16), BitAND($iColor, 0x00FF00), BitShift(BitAND($iColor, 0xFF0000), 16))
EndFunc ;==>_RGBtoBGR
;Code below was generated by: 'File to Base64 String' Code Generator v1.20 Build 2020-06-05
Func _SciTeTabHook_x64dll($bSaveBinary = False, $sSavePath = @ScriptDir)
Local $SciTeTabHook_x64dll
$SciTeTabHook_x64dll &= 'GbgATVqQAAMAAACCBAAw//8AALgAOC0BAEAEOBkAgAAMDh8Aug4AtAnNIbgAAUzNIVRoaXMAIHByb2dyYW0AIGNhbm5vdCAAYmUgcnVuIGkAbiBET1MgbW+AZGUuDQ0KJASGAFBFAABkhgUAEPyA52kFV/AALoAiCwICIgAIAAz1AQMCAAMQBAMJBQAXAbctAQAFAiQAAGADzOSL4gAC1wAAIAMXAzUHCBcGDwQFAHjsAkgAAKSDAxxKAARRAADImA8gLnRleHSAA+gHDwRIgXsFbgQAIABQYMAucmRhdGGEWQFtBQF7DIsTQABQQC4oYnNzhuMwld9QwLwuZcMTwj4BC8ETDs0T8DBALmnDCcJGwEjCJvvIUMQJwH9KPwA/AD8APwADPwAhAP/KdU3HBQIKIEmI0IgAxwWk8B/gOIBAIAHiIAGo5eXlIAHkIAH/gIMYxwXeIAEBAMcFzFEgAfDw8CABtqEDwEDAAEiJDc9AAYMAyP/DRTHJTI0ABaEPAAAx0ukA+gYAAEFUV0gAiddWSInOU0wAicNIg+woSIUgyQ+IpQFAA4tAABA9UIQAAHQJBD1RwAB1b+t9g0Q9gAEND4WEAARJIItIGOiq4A9JiYDESIXAD4RvgAIlwAswIFC6/OACSIkgwUiJBWMgBuhWW2ANYAFPYAFCBURBBYkE4UGAEjHSxwUnMQMZ/+hG4ATgAum0iaAMPVKgDg+FGUAFhOmr4AFJi0AIgAcAdAhIg/gBdQ0A6xNJiwCJBeygHgAA62ZAAgJGAqrNQQJTQAIDRgLCQQKqQEACBEYCm0ECLUACqgVAAhxCApBBAhpAAqgGdRQCAnsBAglCAcJ8QAFIiw2VwQBAJIyEgiASwxfokQVCAxJ6QAPoVWAB62mDRD1YgAEAdGDAAmOBIwZ0VEyLBU9gAUpNQBhI4iPoQAMHQaugAkQJRiMCL0EJCmABGMcFDAEJAABIxwWKDUcBCkUBiw0L4QsAg8QoSYnZ'
$SciTeTabHook_x64dll &= 'ifIAW0mJ+F5fQVwE6T2AB1VIieVBAFdBVkmJzkFVAEFUSYnUugoTIAAAV1ZMxT3k8BBIgeyQIItIx0QEJEgBCkyNfCRIA6EBQYkATYn56KMLwDliNvLCO0wkaDEIwLkK4TGJ2EyJQM9MjawkkKABuiIFQAvzq7lhz0yJAO9MiWwkePOrKEyJ8WAJaCAHAMeUhCRhA/9gAehPYAoQiw0xHSALOfN0EAaLDRpAATHAQWSAfMAWdQfADWAyLiBI/8BIPeEFdeZAMdKAvASPwAcqgA+UwjHA99rgBoAPlcD32IXCwQcUzxyACoKACkyJ+gHAR0mJwEiJRCQoOOgfQQKLIAFMiQjB6FqAAUSLBatTYAWgB3UHYAGbYAG6IYETMcnoS8IH4UiAicJJicfoFYIFCEQkVEFmieGLVGugIsACBsQCTAEC4ALoNv3AruABUIICAAKNUKj/6OloAlRkAtVgAlJIghPoukABTAAryingALoxwiXxoAxFMUDARTH26DQCBcIVAV0L0QKM8ABJicaLUgrxAHTBBRXyG0MMsAaLFeOgAIEBU2EFEeAZWA8QsBxBuP5BECZMicm6+nIATAAkOA8RRCRY6BLs0B5Mi+AATInqM2AD0BkgJXAZ8Sfo+FGwAU2F9oEH8iEFECGxCI1lyFshJUFdAEFeQV9dw4M9onwQBwB0S7Anh2EItbAtP7Atc7AAsS0zUUTF8y1g8ATHBUrhAmMrGkunAEilAKArw8NBElYRKldWUDvsOIGC+pE/dBBJicxQKgBNic2D+g91DxDrIeiBQAVFMe0E6XLAEIP6FA+FSWFCQb2hEeleUAC6GvBRBxJQBxAgqEB0YBFJg+C/QgHRDNKRMkdsJCCQMkG4MFBIADH2MAy7GmEB4ozoA4ERsSPF6NiQAhkTGboEUC1SAcbomoVXAQtTAUiJw+iRUAhI/8vAIUg53n+AFkmJ8EmJ+fQTgntQEEj/xuvl9AAKYKFMtYAHg/pOdCAV'
$SciTeTabHook_x64dll &= 'TIs1P7AHgfoHoUQgVVAA6zdBgXmAENn9//91ExRBcjSTUuj88h/QCyALCEdgA0AMUAtBuE5hA1xQgz3nGUEZQuEbPehNifADGN9FAyIPcQZYxwW7gQIzGLynALnNpADrsB/0AonQAAawKbTo6cI+xZAaQCPoxiDJ8EM9jWEDdTYhHyAgAmjQAEGJyUiNFSCk+f//uZGI6FTl8QWF8DgFYtABMDsBH7QPtqA7wxFp0AxKcAG1QSQZUQToEDnxCDGlCQPhIYEC/yWmOgAAoJCQ/yWWdACGdACqdnQAZnQAVnQARnQAqjZ0ACZ0ABZ0AAZ0AFT2OXMA5nQA1nQAxlV0AK50AJ50AI50AH5VdABudABedABOdAA+P3MABAB2ffwADwADAFNjAGlUZVRhYkN0/HJs3wEPAA8ADwAPAA8A/w8ADwAPAA8ADwAPAA8ADwD/DwAPAA8ADwAPAA8ADwAPAH8PAA8ADwAPAA8ADwC113hX8L9BTmXXKPAASDAAaGUwAGb010MSAH9wAKMAFgAAmRQAAO5VMADnsACNMAKZMAChVTAArzAAuzAAxzAA1lUwAN5CyAGgxQNgwwUQAAYAB3YnSG9vAGtfeDY0LmRsAGwAQ2FsbFduAGRQcm9jAERsAGxNYWluAERygGF3U2luZ2zRAhAAR2V0lQMASW4Mc3QAAxEEAFJlbQBvdmVTdWJjbI5hgM/gAUIEVW5pSAL/DwAPAA8ADwAPAA8ADwAPAP8PAA8ADwAPAA8ADwAPAAMAqrEIPFAABgBQUwAAoARRAACECJiYAExWTABMEQDMBFzYBA7spQQO/AQOBlIDDhIEDloiBA4uBA4FAD4ED1BVBAdiBAduBAd6BAeKVQQHkgQHpgQHtAQHxlUEB9IEB+IEB/YEBwobAMsBACAEB83HMwRDAHJlYXRlUGVuBAA9hAVTb2xpZCBCcnVzaIAfBEQAZWxldGVPYmoAZWN0AABJBkwAaW5lVG8AAFcQBk1v'
$SciTeTabHook_x64dll &= 'dkACRXgAkAC8BlNACWN0RQkCxMADdEJrTW9kCGUA68ECVGV4dABDb2xvcgAAH0AAQ2FsbE4ABEgob29rQQ8gQgRXaQBuZG93UHJvYwBBANgARHJhdwEBDUEADQFGaWyUbFLCFQ/AAm5kQwoARXhBAD8BR2VgdERDANbBAYMFTABvbmdQdHJBAMD3AUluZmyAM4IOwAoCSW52YcA1BQQQANkCUsAsYXNlAcAP7QJTZW5kTYBlc3NhZ2VBQK9WA8AszBNYxwRzQy5BwACFA1VuaMACigXgAJoDVXDBGUMFAXcB2wBHREkzMi5kNGxsgAMUwAP1AFVTHEVSBhI/ABYA'
$SciTeTabHook_x64dll = _WinAPI_Base64Decode($SciTeTabHook_x64dll)
If @error Then Return SetError(1, 0, 0)
Local $tSource = DllStructCreate('byte[' & BinaryLen($SciTeTabHook_x64dll) & ']')
DllStructSetData($tSource, 1, $SciTeTabHook_x64dll)
Local $tDecompress
_WinAPI_LZNTDecompress($tSource, $tDecompress, 5120)
If @error Then Return SetError(3, 0, 0)
$tSource = 0
Local Const $bString = Binary(DllStructGetData($tDecompress, 1))
If $bSaveBinary Then
Local Const $hFile = FileOpen($sSavePath & "\SciTeTabHook_x64.dll", 18)
If @error Then Return SetError(2, 0, $bString)
FileWrite($hFile, $bString)
FileClose($hFile)
EndIf
Return $bString
EndFunc ;==>_SciTeTabHook_x64dll
Func _SciTeTabHookdll($bSaveBinary = False, $sSavePath = @ScriptDir)
Local $SciTeTabHookdll
$SciTeTabHookdll &= 't7cATVqQAAMAAACCBAAw//8AALgAOC0BAEAEOBkAgAAMDh8Aug4AtAnNIbgAAUzNIVRoaXMAIHByb2dyYW0AIGNhbm5vdCAAYmUgcnVuIGkAbiBET1MgbW+AZGUuDQ0KJASGAFBFAABMAQYAEHB652kFV+AADoAjCwECIgAIAAxqCgADAgADEAQDAwAQtwILABcBtwEEvwIAcAMMiA6+AALXAAAgBDcvAAQEPwIGAODoAoAAAIbYgS8VAGAAAKyghRUNAKCAK2SYDy50ZfR4dIFOBwRIgXUGYgMAACAAMGAucmRhXHRhhFkAZYKFDIsTQIAAMEAuYnNzgQWGMAYCkdcwwC5lgyfXgn0B8sETDtATacMJwkYPwDLCJsdfxQnALnJluGxvY8RIwErCExTOCf5CsFA/AD8APwA/AD8AGAAAg3wkCAF1T8cABRgwABCI0IgAAItEJATHBQgBoAFAgEAAxwUEUSAB5eXlIAEQIAH/MWCExwUUIAGBB8cFYgwgAfDw8CABgE4QQP/AwACjIAABgwDI/8IMAIPsDAhqAGigVhBqAP9AdCQc6DcGAA7EAAzCBABXVlOLAHwkEItcJBiFEP8PiHhAeItDCAA9UIQAAHQJPQJRwAB1Zetzgz1iHCEND4VY4AOgCf8wcwzop0AQYAiFwCCJxg+EQOACoyghYARQaH8UwAz8VgDomwUAAFqFwESjJKACD4QfAARQgGr/agBWxwVhCRGAB//okEAEUFBWJOmYQBg9UmAND4US90AB6Y+AAItDBACFwHQHg/gBdUAL6xCLA6PhIuswVYP4AuQBIR7rRRiD+APkAWEh6zWDDPgE5AHhIOslg/gaBeABF+ABISnrFYOY+AZ1oQOhKesHAAFNgSmhIRegDX1SIRRQhOj4YGxRUf81wQIk6LuAAetgJCB0WhFlBVGLFSEbhdJ0AEdRUmr8UOirl+AEwQfEBrTAAVZWhAH+d4AB4x6jNSEHIwHBA8I/CMQM'
$SciTeTabHookdll &= 'U0AzGFf/NYosIQa1IAZbXl+ANyBVMcBXuYF+VlMIgexMoHqLtCRoAcAAjVQkBInXiwicJGSAAfOrUlaIaAoTQMe0JGzgAQToJSAGhcAPhMwD4C4gBSgxwInXuSegPiAFwAFAuUHGiVQAJDCNbCQkidfA86vHRCQkwbfgAIQ0/wABVVZoBcgJUtZAuIsVQTA7IwJ0CAaLFSEwMcCAfAAEQAB1BoXAdSAK6yxAPYEHdesEMcnAAj8qD5TBEDHA99lkBg+VwHD32IXBQQeBM+BIUgToBeAUicVQUFUAjUQkHFBT6KVBAA1YWlXo5eAAoUdBNgAjxAd1BaGhNlGAUGoBagDo1AAEIlcgB1PooiABiccUWFpiWxRgAAxT6NqWYAJRQQHDAY/AASEBqWBqFEhABn/jARTlAYJv4AFQV1PoV+EAYFUx7ehmAAEgD2pqACAAMYUg0YAAID8NFFdXQAYsoQ7FWFpiUMARU+gWwRUhUFqmWacVQUtWVmAF8OABwUI4jXwkHI3gEEAfQPOlav5q+oABMAhW6JDgA19YaCVRQBlWav+QEFhAA6MjQAHxNe10C+ARU+jCu/AAWlmBxCEgkCFQXcIQAEUpQUUpOKFGKS6D7BBiKRTgAkOvJ6snEMPDVYBAg2TsHAARNIswCTBBOA0wQTxSOVE4D3UO6wgf6ItQOzHb6TlBUUD4FA+Fm+ADuwlhI+km8T1QavBWBOjLkABaqEBZdLAOg+C/wBogAZAgAcJdMA9TV2oPIDEhCILogSlWicPopLEEkMQMicWxFmgEMCdoVuhoMAFqMB0AAQuFAgFXUSxX/zH/ICsECDuQUn8UUIlEACQQV0dVVujbiPz//3ALDOvmcBIIVugzsAJYWumVgZEN+E50Dz2C0UQCLUEHdXHrL4F7AAjZ/f//dRZR2dJI6AzBLmAD1EM4UwpSTlQK60glFjdwGDN0UFWBTcLSEx8VFxVSkFJTV2hhB+sG8gSgUFZV6NwBN8MR'
$SciTeTabHookdll &= 'BjDEHInYBhzBPgB1I9AakSoQ/zVBW2h3oVCVagToUSADowECyYA8lcCgAw+2ADRAWw1RXQTwOLIB0nQXg+DsGFLoGyII8gSiDAQYw2ACw5D/JfxQUAAQkHAA+HQA9FV0APB0AOx0AOh0AORVdADgdADcdADYdADUVXQA0HQAzHQAyHQAxFV0ALx0ALh0ALR0ALDVdACsdACodACkdAAQm/9xABFusrBzAA8ADwAPAA8A/w8ADwAPAA8ADwAPAA8ADwABBQBTY2lUZVRh4GJDdHJs3wEPAA8A/w8ADwAPAA8ADwAPAA8ADwD/DwAPAA8ADwAPAA8ADwAPAP8PAA8ADwAPAA8ADwAPAA8Aew8Atdd48MBRVaHIMQAodfAASDAAaDAAsEHyvxkQEgAAXHAA9RUAjAA0cL5glwAyFjBGVTAClTAAnTAAqzAAt1UwAMMwANIwANrC5AEFoMEDYMQFAAYABwF2J0hvb2suZGwAbABDYWxsV24IZFBy0MREbGxNAGFpbgBEcmF3IFNpbmdskQIARwRldFUDAEluc3QDAAPRAwBSZW1vdoBlU3ViY2xhQNDj4AFCBFVuaUgCDwAPAP8PAA8ADwAPAA8ADwAPAA8APw8ADwAPAA8ADwAHAIGyCDxQAAYAhFIAAKqgAHhgCJjMAEzECDxBCQAEUQAAEAAGJFUABjQABj4ABkoABlqtAAZmAAYBAHYADogABqqaAAamAAayAAbCAAaqygAG3AAG6gAD/AADqggAZxgAAyoAAz4AAwZUAANlYz0AQ3JlAGF0ZVBlbgBGAYQFU29saWRCcgB1c2gAAEwARABlbGV0ZU9iagBlY3QAAP8ATABpbmVUbwAAAhABTW92gARFeACQADIBU4ASY3SFEgI5gAd0QmtNb2QIZQBdgQVUZXh0AENvbG9yAAAeQABDYWxsTgAISChvb2uBHh+CCFdpAG5kb3dQcm9jAEEA1wBEcmF3AQEaQQAJAUZpbJRsUoIr'
$SciTeTabHookdll &= 'C4AFbmSDFABFeEEAOAFHZWB0REMAyIEDAwtMAG9uZ0EAAOgBsEluZmwAZgIc9IAGDHZhgGoFCACvAlIRgFhhc2VAD8ECUwBlbmRNZXNzYWRnZcAOGQNALEoTJAVHBHNDLUEAWANVDG5owAKKBQBsA1U+cEEZQwUAWMGP2ABHRIBJMzIuZGxsgAOGFMAD9QBVU0VSBhIfPwA/AD8APwAdABAAAAKswAAJMBcwITAAKzA1MD8wSTAAUjBiMJ8wwzAAyTDZMOswITEAMTFBMVExYTEAbzF4MX0xlDEAoTGpMbMxyzEA2DHjMe0x9zEACjKkMrMy7jIAFDMlM8Mz0zMANjQ+NEg0XjQAaDRyNOs0YDUAkTWZNbA1ujUAxDX3NQc2DDYAGDY0Nkc2WjYAYjZqNnI2ejYAgjaKNpI2mjYAojaqNrI2ujYAwjbKNtI22jYA4jbqNvI2+jbwAjcKN18ZHwAfAB8APx8AHwAfAB8AHwAfAAAA'
$SciTeTabHookdll = _WinAPI_Base64Decode($SciTeTabHookdll)
If @error Then Return SetError(1, 0, 0)
Local $tSource = DllStructCreate('byte[' & BinaryLen($SciTeTabHookdll) & ']')
DllStructSetData($tSource, 1, $SciTeTabHookdll)
Local $tDecompress
_WinAPI_LZNTDecompress($tSource, $tDecompress, 5632)
If @error Then Return SetError(3, 0, 0)
$tSource = 0
Local Const $bString = Binary(DllStructGetData($tDecompress, 1))
If $bSaveBinary Then
Local Const $hFile = FileOpen($sSavePath & "\SciTeTabHook.dll", 18)
If @error Then Return SetError(2, 0, $bString)
FileWrite($hFile, $bString)
FileClose($hFile)
EndIf
Return $bString
EndFunc ;==>_SciTeTabHookdll
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
Func _WinAPI_LZNTDecompress(ByRef $tInput, ByRef $tOutput, $iBufferSize)
$tOutput = DllStructCreate("byte[" & $iBufferSize & "]")
If @error Then Return SetError(1, 0, 0)
Local $aRet = DllCall("ntdll.dll", "uint", "RtlDecompressBuffer", "ushort", 0x0002, "struct*", $tOutput, "ulong", $iBufferSize, "struct*", $tInput, "ulong", DllStructGetSize($tInput), "ulong*", 0)
If @error Then Return SetError(2, 0, 0)
If $aRet[0] Then Return SetError(3, $aRet[0], 0)
Return $aRet[6]
EndFunc ;==>_WinAPI_LZNTDecompress
Alles anzeigen