1

Тема: AHK: Получить манифест файла

Доброй ночи. Прошу вашей помощи.
Как можно получить и считать содержимое манифеста в файле если он есть как это делает Resource Hacker?
У скомпилированных ахк скриптов есть манифест. Хотелось бы считать содержимое манифеста любого скомпилированого ахк скрипта.
Я так понял что надо копать в сторону функций FindResource, но поиск привел меня только к извлечению иконок.

2

Re: AHK: Получить манифест файла

Вот так можно:


File = D:\Temp\Hello.exe
hFile := DllCall("LoadLibraryEx", "str", File, "ptr", 0, "uint", 2, "ptr")
hRsrc := DllCall("FindResource", "ptr", hFile, "ptr", 1, "ptr", 24, "ptr")
hData := DllCall("LoadResource", "ptr", hFile, "ptr", hRsrc, "ptr")
pData := DllCall("LockResource", "ptr", hData, "ptr")
Manifest := StrGet(pData, "cp0")
DllCall("FreeLibrary", "ptr", hFile)
MsgBox, %Manifest%

3

Re: AHK: Получить манифест файла

Спасибо большое!

4 (изменено: Karagiozis, 2017-09-03 00:16:00)

Re: AHK: Получить манифест файла

Помогите! Скрипт крашит, тоесть просто так сам процесс убивается когда пытается прочитать манифест кое-какого файла. Манифест там есть так как Resource Hacker спокойно видит его.
Крашит из-за этой строчки:

Manifest := StrGet(pData, "cp0")

Пробывал словить ошибку, но не помогает:

File = D:\setup.exe
hFile := DllCall("LoadLibraryEx", "str", File, "ptr", 0, "uint", 2, "ptr")
hRsrc := DllCall("FindResource", "ptr", hFile, "ptr", 1, "ptr", 24, "ptr")
hData := DllCall("LoadResource", "ptr", hFile, "ptr", hRsrc, "ptr")
pData := DllCall("LockResource", "ptr", hData, "ptr")
try {
	Manifest := StrGet(pData, "cp0") ; Крашит из-за этого
} catch e {
	msgbox, error
}
DllCall("FreeLibrary", "ptr", hFile)
MsgBox, %Manifest%

Вот сам файл:
https://www.dropbox.com/s/5r5wqtgdje68t … p.exe?dl=0

5

Re: AHK: Получить манифест файла

В вашем файле 0 байт.

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

6 (изменено: Karagiozis, 2017-09-03 00:19:31)

Re: AHK: Получить манифест файла

teadrinker пишет:

В вашем файле 0 байт.

Очень странно, но у гугл диска проблема с этим файлом.
Обновил ссылку
https://www.dropbox.com/s/5r5wqtgdje68t … p.exe?dl=0

7 (изменено: YMP, 2017-09-03 15:47:13)

Re: AHK: Получить манифест файла

Да, малость недоработал код. Надо размер ресурса узнавать, иначе StrGet залазит дальше положенного.


File = D:\setup.exe
hFile := DllCall("LoadLibraryEx", "str", File, "ptr", 0, "uint", 2, "ptr")
hRsrc := DllCall("FindResource", "ptr", hFile, "ptr", 1, "ptr", 24, "ptr")
hData := DllCall("LoadResource", "ptr", hFile, "ptr", hRsrc, "ptr")
pData := DllCall("LockResource", "ptr", hData, "ptr")
cbData := DllCall("SizeofResource", "ptr", hFile, "ptr", hRsrc)
Manifest := StrGet(pData, cbData, "cp0")
DllCall("FreeLibrary", "ptr", hFile)
MsgBox, %Manifest%

8

Re: AHK: Получить манифест файла

Спасибо. Все работает.