Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Переименовать производителя проги 
:(
    Опции темы
Delphist
  Дата 22.10.2004, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 2
Всего: 3



Как средствами Delphi7 переименовать имя производителя, название проги (они вшиваются в PE файл при его создании), вообщем все то что отображается при свойствах файла.


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
Pakshin A. S.
Дата 22.10.2004, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 21
Всего: 61



Ручками найти в фале еначальный быйт записи информациии (похоже он гже-то в конце, можно через Far почитать); записать туда новую информацию; переделать длину файла (как это делают вирусы)... :( :)
PM   Вверх
p0s0l
Дата 22.10.2004, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Зачем же так ?
Project -> Options -> Version Info
ставим галочку, и заполняем инфу...


--------------------
С уважением, г-н Посол.
PM   Вверх
Pakshin A. S.
Дата 22.10.2004, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 21
Всего: 61



По всей видимости, человеку нужно переименовать это в чужой программе... :(
PM   Вверх
Alex
Дата 22.10.2004, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



если в чужой то это не есть хорошо, ну если очень хочется, то эта информация хранится в ресурсах.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
p0s0l
Дата 22.10.2004, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Цитата
По всей видимости, человеку нужно переименовать это в чужой программе...
Мдя ?... Ну ладно, будет тогда так:
Код
var ResName : PChar; // эта переменная нужна!

procedure ChangeCompany (FileName : string; NewCompany : string);
const CompanyName = 'CompanyName';
var
 hUpdate : THandle;
 hExe : HMODULE;
 Data : WideString;
 ResInfo : HRSRC;
 ResData : HGLOBAL;
 Adr : Pointer;
 Size : DWORD;
 i0, i, l : integer;

 function EnumFunc (hMod : HMODULE; lpszType : LPCTSTR; lpszName : LPTSTR; lParam : integer) : BOOL; stdcall;
 begin
   ResName := lpszName;
   Result := False;
 end;

begin
 hExe := LoadLibrary (PChar(FileName));
 if hExe = 0 then Exit;
 ResName := nil;
 EnumResourceNames (hExe, RT_VERSION, @EnumFunc, 0);
 ResInfo := FindResource (hExe, ResName, RT_VERSION);
 if ResInfo = 0 then Exit;
 ResData := LoadResource (hExe, ResInfo);
 Adr := LockResource (ResData);
 Size := SizeofResource (hExe, ResInfo);
 SetLength(Data, Size div 2);
 CopyMemory (@Data[1], Adr, Size);
 FreeResource (ResData);
 FreeLibrary (hExe);

 i0 := Pos(CompanyName, Data);
 i := i0 + Length(CompanyName);
 while Data[i] = #0 do Inc(i);
 l := 0;
 while Data[i+l] <> #0 do Inc(l);
 while Data[i+l] = #0 do Inc(l);
 Delete (Data, i, l);

 NewCompany := NewCompany + #0;
 Data[i0-2] := WideChar(Length(NewCompany));
 while (Length(NewCompany) mod 2) <> 0 do NewCompany := NewCompany + #0;
 Insert (NewCompany, Data, i);
 Data[i0-3] := WideChar( Word(Data[i0-3]) + (Length(NewCompany) - l)*2 );

 i0 := Pos('StringFileInfo', Data);
 Data[i0-3] := WideChar( Word(Data[i0-3]) + (Length(NewCompany) - l)*2 );

 Size := Length(Data)*2;
 Data[1] := WideChar(Size);
 
 hUpdate := BeginUpdateResource (PChar(FileName), False);
 UpdateResource (hUpdate, RT_VERSION, ResName, 1049, @Data[1], Size);
 EndUpdateResource (hUpdate, False);
end;


Пример вызова:
Код
procedure TForm1.Button1Click(Sender: TObject);
begin
 ChangeCompany ('c:\project1.exe', 'Posol');
end;




--------------------
С уважением, г-н Посол.
PM   Вверх
Alex
Дата 23.10.2004, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



p0s0l по сути, ты конечно дал правильный пример, но во первых он будет работать только в NT системах т.к. функции *UpdateResource присутствуют только в NT, а во вторых ты в UpdateResource жестко задал язык ресурса 1049 (Русский) сам понимаешь, что это не хорошо.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
p0s0l
Дата 23.10.2004, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Цитата
1049 (Русский)
Спасибо, что сказал. Я для теста сделал без определения языка, и так потом и забыл сделать определение языка...
Щас подправлю...




--------------------
С уважением, г-н Посол.
PM   Вверх
p0s0l
Дата 23.10.2004, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Код
var ResName : PChar; // эта переменная нужна!

procedure ChangeCompany (FileName : string; NewCompany : string);
const
 StringFileInfo = 'StringFileInfo';
 CompanyName = 'CompanyName';
 
var
 hUpdate : THandle;
 hExe : HMODULE;
 Data : WideString;
 ResInfo : HRSRC;
 ResData : HGLOBAL;
 Adr : Pointer;
 Size : DWORD;
 i0, i00, i, l, delta : integer;
 NewCompanyZ : string;
 LangID : word;

 function EnumFunc (hMod : HMODULE; lpszType : LPCTSTR; lpszName : LPTSTR; lParam : integer) : BOOL; stdcall;
 begin
   ResName := lpszName;
   Result := False;
 end;

begin
 hExe := LoadLibrary (PChar(FileName));
 if hExe = 0 then Exit;
 ResName := nil;
 EnumResourceNames (hExe, RT_VERSION, @EnumFunc, 0);
 ResInfo := FindResource (hExe, ResName, RT_VERSION);
 if ResInfo = 0 then Exit;
 ResData := LoadResource (hExe, ResInfo);
 Adr := LockResource (ResData);
 Size := SizeofResource (hExe, ResInfo);
 SetLength(Data, Size div 2);
 CopyMemory (@Data[1], Adr, Size);
 FreeResource (ResData);
 FreeLibrary (hExe);

 NewCompanyZ := NewCompany + #0;
 while (Length(NewCompanyZ) mod 2) <> 0 do NewCompanyZ := NewCompanyZ + #0;

 i00 := Pos(StringFileInfo, Data);
 if i00 = 0 then Exit;

 i0 := PosEx(CompanyName, Data, i00);
 if i0 = 0 then Exit;

 i := i0 + Length(CompanyName);
 while Data[i] = #0 do Inc(i);
 l := 0;
 while Data[i+l] <> #0 do Inc(l);
 while Data[i+l] = #0 do Inc(l);
 Delete (Data, i, l);
 Insert (NewCompanyZ, Data, i);

 delta := (Length(NewCompanyZ) - l);
 Data[i0-3] := WideChar( Word(Data[i0-3]) + delta*2 ); // размер CompanyName
 Data[i0-2] := WideChar(Length(NewCompany)+1); // длина нового производителя
 Data[i00-3] := WideChar( Word(Data[i00-3]) + delta*2 ); // размер StringFileInfo
 i := i00+Length(StringFileInfo)+1;
 Data[i] := WideChar( Word(Data[i]) + delta*2 ); // размер языковой инфы
 Size := Length(Data)*2;
 Data[1] := WideChar(Size);

 Inc(i, 3);
 LangId := StrToInt('$' + Copy(Data, i, 4));

 hUpdate := BeginUpdateResource (PChar(FileName), False);
 UpdateResource (hUpdate, RT_VERSION, ResName, LangId, @Data[1], Size);
 EndUpdateResource (hUpdate, False);
end;
По смыслу надо предусмотреть возможность наличия инфы о версии в нескольких языках, но это удовольствие я оставлю для автора темы :), т.к. для испытания этого у себя я таких многоязыковых файлов не нашёл...


--------------------
С уважением, г-н Посол.
PM   Вверх
Alex
Дата 23.10.2004, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



А я бы сделал так:
Код
uses
 acWorkRes;
...

threadvar
 ResName : PChar; // эта переменная нужна!

procedure ChangeCompany (FileName : string; NewCompany : string);
const
 StringFileInfo = 'StringFileInfo';
 CompanyName = 'CompanyName';

var
 hUpdate : THandle;
 hExe : HMODULE;
 Data : WideString;
 ResInfo : HRSRC;
 ResData : HGLOBAL;
 Adr : Pointer;
 Size : DWORD;
 i0, i00, i, l, delta : integer;
 NewCompanyZ : string;

 function EnumFunc (hMod : HMODULE; lpszType : LPCTSTR; lpszName : LPTSTR; lParam : integer) : BOOL; stdcall;
 begin
  ResName := lpszName;
  Result := False;
 end;

begin
 hExe := LoadLibrary (PChar(FileName));
 if hExe = 0 then Exit;
 ResName := nil;
 EnumResourceNames (hExe, RT_VERSION, @EnumFunc, 0);

 ResInfo := FindResource (hExe, ResName, RT_VERSION);
 if ResInfo = 0 then Exit;
 ResData := LoadResource (hExe, ResInfo);
 Adr := LockResource (ResData);
 Size := SizeofResource (hExe, ResInfo);
 SetLength(Data, Size div 2);
 CopyMemory (@Data[1], Adr, Size);
 FreeResource (ResData);
 FreeLibrary (hExe);

 NewCompanyZ := NewCompany + #0;
 while (Length(NewCompanyZ) mod 2) <> 0 do NewCompanyZ := NewCompanyZ + #0;

 i00 := Pos(StringFileInfo, Data);
 if i00 = 0 then Exit;

 i0 := PosEx(CompanyName, Data, i00);
 if i0 = 0 then Exit;

 i := i0 + Length(CompanyName);
 while Data[i] = #0 do Inc(i);
 l := 0;
 while Data[i+l] <> #0 do Inc(l);
 while Data[i+l] = #0 do Inc(l);
 Delete (Data, i, l);
 Insert (NewCompanyZ, Data, i);

 delta := (Length(NewCompanyZ) - l);
 Data[i0-3] := WideChar( Word(Data[i0-3]) + delta*2 ); // размер CompanyName
 Data[i0-2] := WideChar(Length(NewCompany)+1); // длина нового производителя
 Data[i00-3] := WideChar( Word(Data[i00-3]) + delta*2 ); // размер StringFileInfo

 Size := Length(Data)*2;
 Data[1] := WideChar(Size);

 hUpdate := BeginUpdateResourceW(StringToPWide(FileName), False);
 notLang:= True;
 try
   UpdateResourceW(hUpdate, PWideChar(RT_VERSION), PWideChar(ResName), 0, @Data[1], Size);
 finally
   notLang:= False;
 end;
 EndUpdateResourceW(hUpdate, False);
end;

Добавлено @ 22:21
Скачать и прочитать о модуле acWorkRes можно здесь http://forum.vingrad.ru/index.php?showtopic=21183


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
p0s0l
Дата 24.10.2004, 04:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Alex, а без дополнительных библиотек слабо ? :p
Только в чём заключается отличие ? Я мотал туда-сюда, вроде есть отличия, но не значительные... Единственное, что настораживает - это таинственная переменная notLang - зачем она введена ? И переход на Unicode-функции BeginUpdate, Update, EndUpdate... В чём преимущество этого перехода ? Имена ресурсов в файле все равно не уникодовые... А инфа о версии всё равно в любом случае уникодовая, даже если пользоваться анси-функциями (как в моём случае: Data ведь WideString, а не AnsiString)...
Если ради имени файла, то тогда LoadLibrary тоже надо Wideом сделать...
Объясни, плиз... (мне просто интересно, скорее всего я что-то упустил и не знаю того, чего знаешь ты...)
Хотя может это сон на меня наваливается, и я уже ничего не понимаю... :)


--------------------
С уважением, г-н Посол.
PM   Вверх
Alex
Дата 24.10.2004, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Цитата(p0s0l @ 24.10.2004, 05:07)
Alex, а без дополнительных библиотек слабо ? 
Только в чём заключается отличие ? Я мотал туда-сюда, вроде есть отличия, но не значительные... Единственное, что настораживает - это таинственная переменная notLang - зачем она введена ? И переход на Unicode-функции BeginUpdate, Update, EndUpdate... В чём преимущество этого перехода ? Имена ресурсов в файле все равно не уникодовые... А инфа о версии всё равно в любом случае уникодовая, даже если пользоваться анси-функциями (как в моём случае: Data ведь WideString, а не AnsiString)...
Если ради имени файла, то тогда LoadLibrary тоже надо Wideом сделать...
Объясни, плиз... (мне просто интересно, скорее всего я что-то упустил и не знаю того, чего знаешь ты...)
Хотя может это сон на меня наваливается, и я уже ничего не понимаю... 

Ну вот приехали, здрасте, а кто целый раздел “арсенал форума” создавал под модуль acWorkRes. :( В модуле реализованы СВОИ функции *UpdateResource сделано это было для того чтобы можно было использовать эти функции не только в NT, но и в 9х системах. Плюс в этих функциях нет ошибок, которые присутствуют в стандартных функциях при работе с иконками, в модуле присутствуют несколько функций для упрощенной работы с картинками иконками и файлами, которые хранятся в ресурсах. И т.к. в большинстве случаев язык ресурса нам не важен, то при установке переменной notLang в истину модуль перестает обращать внимание на язык ресурса при работе с ним. Так что выбирать, конечно, программисту пользоваться моим модулем или нет, но я лично пишу программы, которые должны запускаться под виндами от 95 до 2003 и мне этот модуль был необходим как воздух.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
p0s0l
Дата 24.10.2004, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Вот и разгадка :)
Ты обозвал свои функции в модуле также, как и в WinAPI, я даже и не подумал, что это твои функции...
Ну тогда всё встаёт на свои места... :)


--------------------
С уважением, г-н Посол.
PM   Вверх
Delphist
Дата 26.10.2004, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 2
Всего: 3



Цитата(Alex @ 23.10.2004, 22:18)
А я бы сделал так:
Код
uses
 acWorkRes;
...

threadvar
 ResName : PChar; // эта переменная нужна!

procedure ChangeCompany (FileName : string; NewCompany : string);
const
 StringFileInfo = 'StringFileInfo';
 CompanyName = 'CompanyName';

var
 hUpdate : THandle;
 hExe : HMODULE;
 Data : WideString;
 ResInfo : HRSRC;
 ResData : HGLOBAL;
 Adr : Pointer;
 Size : DWORD;
 i0, i00, i, l, delta : integer;
 NewCompanyZ : string;

 function EnumFunc (hMod : HMODULE; lpszType : LPCTSTR; lpszName : LPTSTR; lParam : integer) : BOOL; stdcall;
 begin
  ResName := lpszName;
  Result := False;
 end;

begin
 hExe := LoadLibrary (PChar(FileName));
 if hExe = 0 then Exit;
 ResName := nil;
 EnumResourceNames (hExe, RT_VERSION, @EnumFunc, 0);

 ResInfo := FindResource (hExe, ResName, RT_VERSION);
 if ResInfo = 0 then Exit;
 ResData := LoadResource (hExe, ResInfo);
 Adr := LockResource (ResData);
 Size := SizeofResource (hExe, ResInfo);
 SetLength(Data, Size div 2);
 CopyMemory (@Data[1], Adr, Size);
 FreeResource (ResData);
 FreeLibrary (hExe);

 NewCompanyZ := NewCompany + #0;
 while (Length(NewCompanyZ) mod 2) <> 0 do NewCompanyZ := NewCompanyZ + #0;

 i00 := Pos(StringFileInfo, Data);
 if i00 = 0 then Exit;

 i0 := PosEx(CompanyName, Data, i00);
 if i0 = 0 then Exit;

 i := i0 + Length(CompanyName);
 while Data[i] = #0 do Inc(i);
 l := 0;
 while Data[i+l] <> #0 do Inc(l);
 while Data[i+l] = #0 do Inc(l);
 Delete (Data, i, l);
 Insert (NewCompanyZ, Data, i);

 delta := (Length(NewCompanyZ) - l);
 Data[i0-3] := WideChar( Word(Data[i0-3]) + delta*2 ); // размер CompanyName
 Data[i0-2] := WideChar(Length(NewCompany)+1); // длина нового производителя
 Data[i00-3] := WideChar( Word(Data[i00-3]) + delta*2 ); // размер StringFileInfo

 Size := Length(Data)*2;
 Data[1] := WideChar(Size);

 hUpdate := BeginUpdateResourceW(StringToPWide(FileName), False);
 notLang:= True;
 try
   UpdateResourceW(hUpdate, PWideChar(RT_VERSION), PWideChar(ResName), 0, @Data[1], Size);
 finally
   notLang:= False;
 end;
 EndUpdateResourceW(hUpdate, False);
end;

Добавлено @ 22:21
Скачать и прочитать о модуле acWorkRes можно здесь http://forum.vingrad.ru/index.php?showtopic=21183

Вместо того, чтобы переименовать производителя, твой код удаляет всю инфу о версии файла.
Я попробовал код p0s0l'a тоже самое!!!


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
p0s0l
Дата 26.10.2004, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Delphist, выложи или пришли на мыло тот файл, у которого портится инфа о версии...
Потому как у меня всё нормально переименовывется - пробовал файлах на 10...
PS: ты который мой вариант пробовал - первый или второй ? Надо второй...



--------------------
С уважением, г-н Посол.
PM   Вверх
Delphist
Дата 26.10.2004, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 2
Всего: 3



Цитата(p0s0l @ 26.10.2004, 11:44)
Delphist, выложи или пришли на мыло тот файл, у которого портится инфа о версии...
Потому как у меня всё нормально переименовывется - пробовал файлах на 10...
PS: ты который мой вариант пробовал - первый или второй ? Надо второй...

Пробовал и превый и второй вариант.


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
p0s0l
Дата 26.10.2004, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Delphist, пришли этот файл....


--------------------
С уважением, г-н Посол.
PM   Вверх
Alex
Дата 26.10.2004, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Delphist И мне пришли


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Akella
Дата 25.12.2004, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Delphist И мне пришли smile
PM MAIL   Вверх
Guest
Дата 16.2.2005, 08:21 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Господа! Это мы поменяли только имя компании-производителя. А как быть со всем остальным? Вызывать ChangeCompany для каждого параметра с изменёнными StringFileInfo и CompanyName?
И ещё - что это за функция PosEx()? У меня выдаем, что такой не знает. Какой модуль подключить?
  Вверх
Vit
Дата 16.2.2005, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Цитата(Guest @ 15.2.2005, 23:21)
И ещё - что это за функция PosEx()



Стандартная в Дельфи, может у вас старая версия Дельфи


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Alex
Дата 17.2.2005, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Цитата(Guest @ 16.2.2005, 08:21)
Господа! Это мы поменяли только имя компании-производителя. А как быть со всем остальным? Вызывать ChangeCompany для каждого параметра с изменёнными StringFileInfo и CompanyName?

Если не переписывать полностью функцию то да.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
madbrain
Дата 26.10.2009, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 18.10.2009

Репутация: нет
Всего: нет



Таже проблема. Правда я на VB6 пробывал решить.
Файлы прикрепил, до и после.


Код

Private Declare Function BeginUpdateResource Lib "kernel32.dll" Alias "BeginUpdateResourceA" (ByVal pFileName As String, ByVal bDeleteExistingResources As Long) As Long
Private Declare Function UpdateResource Lib "kernel32.dll" Alias "UpdateResourceA" (ByVal hUpdate As Long, ByVal lpType As Long, ByVal lpName As Long, ByVal wLanguage As Long, ByRef lpData As Any, ByVal cbData As Long) As Long
Private Declare Function EndUpdateResource Lib "kernel32.dll" Alias "EndUpdateResourceA" (ByVal hUpdate As Long, ByVal fDiscard As Long) As Long
Private Declare Function GetFileVersionInfoSize Lib "Version.dll" Alias "GetFileVersionInfoSizeA" (ByVal sFile As String, lpLen As Long) As Long
Private Declare Function GetFileVersionInfo Lib "Version.dll" Alias "GetFileVersionInfoA" (ByVal lptstrFilename As String, ByVal dwhandle As Long, ByVal dwlen As Long, lpData As Any) As Long

Private Const RT_VERSION As Long = 16

Private Sub UPDRES(FName As String)
lVerSize = GetFileVersionInfoSize(FName, lTemp)
ReDim IPData(lVerSize)
Ret = GetFileVersionInfo(FName, 0, lVerSize, IPData(0))

Hndl = BeginUpdateResource(FName, False)
Ret = UpdateResource(Hndl, RT_VERSION, 1, 1033, VarPtr(IPData(0)), UBound(IPData)) 
EndUpdateResource Hndl, False
End Sub

Как видите, ничего не меняю, просто считываю, и записываю инфу обратно. Несмотря на это, ничего не получается. Может подскажете где ошибка?
Чуствую что прийдётся отказатся от UpdateResource, и писать всё ручками.

Это сообщение отредактировал(а) madbrain - 26.10.2009, 11:02

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  UPDRES.rar 4,32 Kb
PM MAIL   Вверх
madbrain
Дата 26.10.2009, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 18.10.2009

Репутация: нет
Всего: нет



http://support.microsoft.com/kb/833659

У меня WinXP SP3


Цитата("kernel32.dll")

Version language : Русский
      CompanyName    : Корпорация Майкрософт
      FileDescription    : Библиотека клиента Windows NT BASE API
      FileVersion    : 5.1.2600.5512 (xpsp.080413-2111)
      InternalName    : kernel32
      LegalCopyright    : © Корпорация Майкрософт. Все права защищены.
      OriginalFilename    : kernel32
      ProductName    : Операционная система Microsoft® Windows®
      ProductVersion    : 5.1.2600.5512

Creation Date    : 16/04/2008  04:00:00 
Last Modif. Date    : 16/04/2008  04:00:00 
Last Access Date    : 01/01/2002  00:00:00 
FileSize    : 995840 bytes ( 972.500 KB,  0.950 MB ) 
FileVersionInfoSize    : 1876 bytes  
File type    : Dynamic Link Library (0x2) 
Target OS    : Win32 API (Windows NT) (0x40004) 
File/Product version    : 5.1.2600.5512 / 5.1.2600.5512
Language  : Русский (0x419) 
Character Set    : 1200 (ANSI - Unicode (BMP of ISO 10646)) (0x4B0) 


PM MAIL   Вверх
Акакий
Дата 4.3.2010, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 6.7.2009

Репутация: нет
Всего: нет



Так и не решен вопрос, почему вместо изменения CompanyName вся инфа RT_VERSION просто удаляется? Пробовал примеры p0s0l'a и Alex'a - на любых ехе-шниках просто удаляется RT_VERSION и все. Ось WinXP SP2.
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0759 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.