Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Файл в ехе

344
09 сентября 2005 года
Delpher
493 / / 14.08.2005
Подскажите плз как засунуть какой-либо файл внутрь программы в ран-тайм
406
09 сентября 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by Delpher
Подскажите плз как засунуть какой-либо файл внутрь программы в ран-тайм


Можно удалить,добавить ресурсы в экзешник и дллки с помощью UpdateResource,правда не везде работает.

344
09 сентября 2005 года
Delpher
493 / / 14.08.2005
Цитата:
Originally posted by vitaly2003s
Можно удалить,добавить ресурсы в экзешник и дллки с помощью UpdateResource,правда не везде работает.



Подробнее можно

406
09 сентября 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by Delpher
Подробнее можно


Почитай MSDN. Вот оттуда пример. Если что будет непонятно,объясню поподробнее.

HRSRC hResLoad; // handle to loaded resource
HANDLE hExe; // handle to existing .EXE file
HRSRC hRes; // handle/ptr. to res. info. in hExe
HANDLE hUpdateRes; // update resource handle
char *lpResLock; // pointer to resource data
BOOL result;
// Load the .EXE file that contains the dialog box you want to copy.
hExe = LoadLibrary("hand.exe");
if (hExe == NULL)
{
ErrorHandler("Could not load exe.");
}

// Locate the dialog box resource in the .EXE file.
hRes = FindResource(hExe, "AboutBox", RT_DIALOG);
if (hRes == NULL)
{
ErrorHandler("Could not locate dialog box.");
}

// Load the dialog box into global memory.
hResLoad = LoadResource(hExe, hRes);
if (hResLoad == NULL)
{
ErrorHandler("Could not load dialog box.");
}

// Lock the dialog box into global memory.
lpResLock = LockResource(hResLoad);
if (lpResLock == NULL)
{
ErrorHandler("Could not lock dialog box.");
}

// Open the file to which you want to add the dialog box resource.
hUpdateRes = BeginUpdateResource("foot.exe", FALSE);
if (hUpdateRes == NULL)
{
ErrorHandler("Could not open file for writing.");
}

// Add the dialog box resource to the update list.
result = UpdateResource(hUpdateRes, // update resource handle
RT_DIALOG, // change dialog box resource
"AboutBox", // dialog box name
MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), // neutral language
lpResLock, // ptr to resource info
SizeofResource(hExe, hRes)); // size of resource info.
if (result == FALSE)
{
ErrorHandler("Could not add resource.");
}

// Write changes to FOOT.EXE and then close it.
if (!EndUpdateResource(hUpdateRes, FALSE))
{
ErrorHandler("Could not write changes to file.");
}

// Clean up.
if (!FreeLibrary(hExe))
{
ErrorHandler("Could not free executable.");
}

344
10 сентября 2005 года
Delpher
493 / / 14.08.2005
Почти понятно. Если бы на паскале а то в типы не врубаюсь
406
10 сентября 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by Delpher
Почти понятно. Если бы на паскале а то в типы не врубаюсь


Ну в паскале я не шарю,может кто поможет перевести это в паскаль из наших форумчан те.

344
11 сентября 2005 года
Delpher
493 / / 14.08.2005
Цитата:
Originally posted by vitaly2003s
Ну в паскале я не шарю,может кто поможет перевести это в паскаль из наших форумчан те.




Попробую сам разобраться, но кто сможет помочь - помогите плз

303
12 сентября 2005 года
makbeth
1.0K / / 25.11.2004
Цитата:
Originally posted by Delpher
Попробую сам разобраться, но кто сможет помочь - помогите плз


HRSRC и HANDLE с успехом можно заменить на Cardinal , char * - в данным случае = Pointer ;)

339
12 сентября 2005 года
verybadbug
619 / / 12.09.2005
Цитата:
Originally posted by Delpher
Подскажите плз как засунуть какой-либо файл внутрь программы в ран-тайм



ты хочешь засунуть ресурс своей прогой в левый exe, или...
во время выполнения проги, открыть ресурс, который засунул туда (в свою прогу) при компиляции?

344
12 сентября 2005 года
Delpher
493 / / 14.08.2005
Цитата:
Originally posted by verybadbug
ты хочешь засунуть ресурс своей прогой в левый exe, или...
во время выполнения проги, открыть ресурс, который засунул туда (в свою прогу) при компиляции?




открыть ресурс со своей ехе могу.
Надо запихнуть рес в свою ехе, ну и в левый ;)

339
12 сентября 2005 года
verybadbug
619 / / 12.09.2005
перевод msdn-ского исходника... только он не хочет работать так как надо...

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  hExe: THandle;
  hRes: HRSRC;
  hResLoad: HRSRC;
  lpResLock: Pointer;
  hUpdateRes: THandle;
begin
  hExe := LoadLibrary(PChar(Application.ExeName));
  if hExe = 0 then begin
    MessageBox(Handle, 'Не удалось загрузить библиотеку.', 'Ошибка', 0);
    Exit;
  end;
  hRes := FindResource(hExe, 'MAINICON', RT_GROUP_ICON);
  if hRes = 0 then begin
    MessageBox(Handle, 'Не удалось найти ресурс.', 'Ошибка', 0);
    Exit;
  end;
  hResLoad := LoadResource(hExe, hRes);
  if hResLoad = 0 then begin
    MessageBox(Handle, 'Не удалось загрузить ресурс.', 'Ошибка', 0);
    Exit;
  end;
  lpResLock := LockResource(hResLoad);
  if lpResLock = nil then begin
    MessageBox(Handle, 'Не удалось блокировать ресурс.', 'Ошибка', 0);
    Exit;
  end;
  if OpenDialog1.Execute then begin
    hUpdateRes := BeginUpdateResource(PChar(OpenDialog1.FileName), False);
    if hUpdateRes = 0 then begin
      MessageBox(Handle, 'Не удалось открыть файл для записи.', 'Ошибка', 0);
      Exit;
    end;
    if not UpdateResource(hUpdateRes, RT_GROUP_ICON, 'MAINICON', 0, lpResLock, SizeofResource(hExe, hRes)) then begin
      MessageBox(Handle, 'Не удалось добавить ресурс в файл.', 'Ошибка', 0);
      Exit;
    end;
    if not EndUpdateResource(hUpdateRes, False) then begin
      MessageBox(Handle, 'Не удалось сохранить изменения в файле.', 'Ошибка', 0);
      Exit;
    end;
    if not FreeLibrary(hExe) then begin
      MessageBox(Handle, 'Не удалось выгрузить библиотеку.', 'Ошибка', 0);
      Exit;
    end;
  end;
end;
344
12 сентября 2005 года
Delpher
493 / / 14.08.2005
Цитата:
Originally posted by verybadbug
только он не хочет работать так как надо...
[/CODE]




А что не так?

339
12 сентября 2005 года
verybadbug
619 / / 12.09.2005
Цитата:
Originally posted by Delpher
А что не так?



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

Я завтра на свежую голову посмотрю исходник еще раз... мож чё исправлю... ато спать пора уже

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог