Что нового

Внедрение текста в скрипт при компиляции

kasper_sky

Antivirus
Сообщения
116
Репутация
1
Доброго времени суток.
Задача довольно простая: нужно при компиляции скрипта внедрить в него определенный текст, который каждый раз(перед компиляцией) изменяется.

Пробовал своими силами решить, но что-то не получается(я не силен в работе WinAPI с ресурсами).

Если у кого-то есть идеи, как это попроще реализовать - я только буду рад.

Итак, мой код.
1. Вспомогательный скрипт changebuild.au3
Код:
$build = FileRead('build.txt')
$build += 1
FileDelete('build.txt')
FileWrite('build.txt', $build)


2. Основной код
Код:
#AutoIt3Wrapper_Run_Before=changebuild.au3
#AutoIt3Wrapper_Res_File_Add=build.txt, TXT, BUILD_NUMBER

#include <WinAPIEx.au3>

If @Compiled Then
	$hResource = _WinAPI_FindResource(_WinAPI_GetModuleHandle(0), 'TXT', 'BUILD_NUMBER')
	MsgBox(0,'$hResource',$hResource)
	$hLoad = _WinAPI_LoadResource(_WinAPI_GetModuleHandle(0), $hResource)
	MsgBox(0,'$hLoad',$hLoad)
	$lock = _WinAPI_LockResource($hLoad)
	MsgBox(0,'$lock',$lock)
	$build = FileRead($hLoad)
	MsgBox(0,'$build',$build)
EndIf


Как вы заметили, в папке со скриптами еще есть и файл build.txt, в нем - только пара цифер.
Загвоздка у меня возникла на этапе
Код:
$build = FileRead($hLoad)
MsgBox(0,'$build',$build)

в основном скрипте.

Кто что скажет?
 
Автор
K

kasper_sky

Antivirus
Сообщения
116
Репутация
1
Viktor1703
Читал.

А вы мое решение и код читали?
 

Viktor1703

AutoIT Гуру
Сообщения
1 535
Репутация
410
Вы добавляете этот текстовый файл при компиляции а дальше достаёте его из ресурсов, или вам нужно по ходу выполнения программы этот файл добавлять в ресурсы exe файла? написано у вас очень мутно!
 
Автор
K

kasper_sky

Antivirus
Сообщения
116
Репутация
1
Viktor1703

kasper_sky [?]
нужно при компиляции скрипта внедрить в него определенный текст


Добавлено:
Сообщение автоматически объединено:

В начале компиляции я изменяю текст, затем добавляю его в ресурсы. При запуске скомпилированной программы мне необходимо считать этот текст. Так понятнее?
 

Viktor1703

AutoIT Гуру
Сообщения
1 535
Репутация
410
Понятно - понятно, только не пойму что тебя не устроило, пример я тебе дал как раз тот который и требуется, всё таки ты не дочитал до конца и не увидел его!!!! :whistle:

Код:
#Region
#AutoIt3Wrapper_Res_File_Add=String.txt, TEXTDATA, RUS, 1049
#EndRegion

#Include <WinAPIEx.au3>

$hInstance = _WinAPI_GetModuleHandle(0)
$sText = _LoadResourceText($hInstance, "TEXTDATA", "RUS")
$aText = StringSplit(StringStripCR($sText), @LF, 2)
GUICreate($aText[0], 244, 100)
GUICtrlCreateLabel($aText[1], 60, 28, 124, 46)
GUICtrlSetFont(-1, 26, 700, 0, "Arial")
GUISetState()

Do
Until GUIGetMsg() = -3

Func _LoadResourceText($hInstance, $sResType, $sResName, $iResLanguage = 0)

    Local $hInfo, $hData, $pData, $iSize

    If $iResLanguage Then
        $hInfo = _WinAPI_FindResourceEx($hInstance, $sResType, $sResName, $iResLanguage)
    Else
        $hInfo = _WinAPI_FindResource($hInstance, $sResType, $sResName)
    EndIf
    $hData = _WinAPI_LoadResource($hInstance, $hInfo)
    $iSize = _WinAPI_SizeOfResource($hInstance, $hInfo)
    $pData = _WinAPI_LockResource($hData)
    If @error Then
        Return SetError(1, 0, "")
    EndIf
    Return DllStructGetData(DllStructCreate("char[" & $iSize & "]", $pData), 1)
EndFunc   ;==>_LoadResourceText
 
Автор
K

kasper_sky

Antivirus
Сообщения
116
Репутация
1
Viktor1703
Ой.. А я в том FAQ начал читать про строки, увидел, что нужно будет пользоваться ресурс хакером(а у меня вообще пока нету желания с ним работать) - вот и бросил читать.
Извините :-[
 

winstan

Эксплотатор)
Сообщения
406
Репутация
78
А вот мой вариантик)

Скипт который комплеирует
Код:
#include <string.au3>
_StringToHex("string")

$Scipt_url="12.au3"
$data_url="1.txt"
$Scipt=FileRead($Scipt_url)
$data=FileRead($data_url)

$Scipt=StringReplace($Scipt,"{data}",_StringToHex($data))

$script_temp_h=FileOpen("script_temp.au3",2)
FileWrite($script_temp_h,$Scipt)
RunWait("C:\Program Files\AutoIt3\Aut2Exe\Aut2exe.exe /in "&@ScriptDir&"\"&"script_temp.au3")


То что комплеируем (12.au3)
Код:
#include <string.au3>
$t=_HexToString("{data}")
MsgBox(0,0,$t)


Данные для текста (1.txt)
Код:
Апап
та та
В общем бред ;D
 
Верх