programowe modyfikowanie zasobów typu string

0

Witam!
Poszukuję sposobu aby programowo zmodyfikować zasoby typu tekstowego w pliku *.exe do którego znam ścieżkę dostępu. Nie chodzi mi o taką procedurę jaką napisał Piechnat w arcie pod tytułem "Jak dokleić string do programu exe i go potem odczytać?" tylko chodzi mi modyfikowanie stringów "zasobowych" o których swego czasu Mr Adam opisał to w arcie "Wykorzystanie zasobów", a które odczytuje się w ten sposób:

{$R strings.RES}

LoadString(hInstance, satala_odwolujaca_sie_do_zasobu , Buff, SizeOf(Buff));
odczytane := Buff;

CZy mógłby mi ktoś pomóc???
Proszę o odpowiedź jeśli ktos wie jak to zrobić&Pozdrawiam!

0

Hmm - temat dość ciekawy. Głowy nie dam, ale może da się to zrobić na wzór tego: (oczywiście trzeba do zmodyfikować jak w komentarzach)..

var
  hUpdateRes: THandle;
  Done: Boolean;
  Res: TResourceStream;

begin

  Res := // Tutaj trzeba załadować stringa z zasobów Twoich

  hUpdateRes := BeginUpdateResource(PCHAR('c:\plik.exe'), FALSE); // program gdzie będziemy zamieniać 

  Done := UpdateResource(hUpdateRes, RT_STRING, 'stala_odwolujaca_sie_do_zasobu', LANG_NEUTRAL, Res.Memory, Res.Size); // Zamiana!

 EndUpdateResource(hUpdateRes, FALSE); // Koniec

end;
0

Dziękuję za pomoc!

0

Jak to zrobić?
Res := // Tutaj trzeba załadować stringa z zasobów Twoich

0

No własnie problem ciekawi, może Deti jeszcze czytuje forum na bieżąco i Tobie odpowie, bo takie coś jak tu
poniżej zadziała i tekst doda się do zasobów, program się uruchamia, ale jak to wykorzystać. bo skoro był te
dwa posty wyżej podany sposób z ResourceStreamem. A później widać, ze Updateowany zasób ma zawierać
całą pamięć zasobu to nic innego mi nie przychodzi mi do głowy jak zrobić to tak jak poniżej, tylko czy da się
wtedy jakoś ten zmodyfikowany zasób wykorzystać - tego nie wiem. Nigdy nie kombinowałem w ten sposób.

Najpierw tworzymu plik test.rc o takiej zawartośći:
test RCDATA "aaa.txt"
Poźniej tworzymy plik aaa.txt o takiej zawartości:
Jakiś unikalny tekst
Kombpilujemy test.rc przy użyciu brcc32.exe
i w naszym programie budujemy cały projekt w postaci tego kodu. Oczywiście plik D:\test.exe musi istnieć:

{$R test.res}
var
  hUpdateRes : THandle;
  Res : TResourceStream;
begin
  Res := TResourceStream.Create(hInstance, 'test', RT_RCDATA);
  hUpdateRes := BeginUpdateResource(PCHAR('D:\test.exe'), False);
  UpdateResource(hUpdateRes, RT_STRING, 'stala_odwolujaca_sie_do_zasobu', LANG_NEUTRAL, Res.Memory, Res.Size);
  EndUpdateResource(hUpdateRes, False);
end;

W wyniku czego w naszym pliku D:\test.exe znajdziemy ten string później podglądając go jakimś edytorem,
ktory wyświetli jego zawartość na przykład tym z FAR'a albo Listerem z TotalCommandera albo innym, ale w
sumie nie wiem co taka modyfikacja nam da. I nie wiem na co zmienić "stala_odwolujaca_sie_do_zasobu" ;/
Googlowałem też za funkcją LoadString ale ona wykorzystuje StringTable w zasobie *.rc i zwraca typ integer.

EDIT: ponieważ szukając informacji o stringtablesach w google znajduje się ten wątek. Dodam że jakby ktoś
nadal miał problemy to rozpisałem się na http://4programmers.net/Forum/viewtopic.php?id=154836&start=10
i tam podaje przykładowe kody. Może przynajmniej Polacy szukający informacji na ten temat sobie poradzą :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1