1

Тема: AHK: Добавление ресурсов директивой компилятора

Добрый день.

Правильно ли я понимаю, что ресурсы добавляются в исполняемый файл чтобы спрятать их от общего доступа? Т.е. вместо .exe файла и еще "какой-то" папки, будет только один .exe. Если это так, то ресурсы нельзя будет достать через "Resource Hacker" после какого-нибудь MPress?

Попробовал добавить dll файл в .exe. Пишет ошибку к пути .dll. Нашел эту тему, там похожее, но я не понял. А как правильно указать путь?


;@Ahk2Exe-AddResource 64.dll
;@Ahk2Exe-AddResource 32.dll

SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

LoadDll() 
{
	dllFile := (A_PtrSize=8) ? "res://test_comp.exe/10/64.dll" : "res://test_comp.exe/10/32.dll"
		if !this.hModule := DllCall("LoadLibrary", "Str", dllFile, "Ptr") 
		{
			if !FileExist(dllFile) 
			{
				OnException("Ошибка с библиотекой: 1")
				Exit
			}
			OnException("Ошибка с соединением: 2")
			Exit
		}
	this.dllFile := dllFile
}

return

F12::ExitApp

Аналогичная ситуация с модулем OCR. Не знаю только, возможно ли всё это включить в .exe.

+ открыть спойлер

https://i.ibb.co/tLyZDvQ/ocr.jpg

Включил .exe в ресурсы, но как быть с файлами которые идут вместе с exe (на картинке файлы в папке leptonica_util)? leptonica_util.exe использует же их.
А так же как указать путь к файлам в папке, а не к самим файлам? tessdata_best и tessdata_fast - выбирает нужный языковой файл в папке, в зависимости от того, какой язык выбирается.


;@Ahk2Exe-AddResource bin\leptonica_util\leptonica_util.exe
;@Ahk2Exe-AddResource bin\tesseract\tesseract.exe

static leptonica := "res://test.exe/10/leptonica_util.exe" 
static tesseract := "res://test.exe/10/tesseract.exe"
static tessdata_best := A_ScriptDir "\bin\tesseract\tessdata_best"
static tessdata_fast := A_ScriptDir "\bin\tesseract\tessdata_fast"

convert(in:="", out:="", fast:=1){
in := (in) ? in : this.fileProcessedImage
out := (out) ? out : this.fileConvertedText
fast := (fast) ? this.tessdata_fast : this.tessdata_best

static q := Chr(0x22)
_cmd .= q this.tesseract q " --tessdata-dir " q fast q " " q in q " " q SubStr(out, 1, -4) q
_cmd .= (this.language) ? " -l " q this.language q : ""
_cmd := ComSpec " /C " q _cmd q
RunWait % _cmd,, Hide

Вдруг кто сталкивался с подобным, спасибо.

GD

2

Re: AHK: Добавление ресурсов директивой компилятора

Botsy пишет:

чтобы спрятать их от общего доступа?

Нет, будут обычными ресурсами, которые видны через ResHacker и аналогичные менеджеры ресурсов.

Botsy пишет:

Пишет ошибку к пути .dll

Укажите полный путь.

Botsy пишет:

А так же как указать путь к файлам в папке, а не к самим файлам?

Чтобы запихнуть большое количество файлов, создайте zip-архив и включите одним файлом. После распаковки ресурса распакуйте zip (ищите примеры на форуме ahk).

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: Botsy, 2021-08-05 17:50:25)

Re: AHK: Добавление ресурсов директивой компилятора

Прописал полный путь:


test := StrReplace(A_ScriptFullPath, "\", "/")
dllFile := (A_PtrSize=8) ? "res://" test "/10/64.dll" : "res://" test "/10/32.dll"

И так тоже:


dllFile := (A_PtrSize=8) ? A_ScriptFullPath "\64.dll" : A_ScriptFullPath "\32.dll"

Не сработало.

Если только 1 версию оставить (64), то ошибок нет при запуске, но вот команды не работают:


if !this.hModule := DllCall("LoadLibrary", "Str", A_ScriptFullPath, "Ptr")
GD

4

Re: AHK: Добавление ресурсов директивой компилятора

Переменные при добавлении ресурсов не работают, нужен буквальный путь текстом.
Нельзя загрузить dll непосредственно из ресурса, нужно сначала выгрузить в файл, либо использовать довольно сложный и объёмный код для загрузки dll в память.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder