Informationen in andere EXE-Datei schreiben
-
Läuft das andere Programm (zum Zeitpunkt der versuchten Änderung)?
-
nee - die Anwendung läuft nicht zum Zeitpunkt der Änderung
-
Hast du mal die ganzen Rückgabe-Werte überprüft?
-
mh ich habe soeben mit dem "Ressource Hacker" festgestellt, dass auch ne
neue Ressource erstellt wird - aber halt nur neu erstellt (die alte Ressource,
bzw. der alte String wird nicht gelöscht)
-
moin meister ...
wenn Du schon so pfiffig bist und den Code gefunden hast, schau dann auch mal
in die Doku, was die Funktionen machen die im Code verwendet werden ...HANDLE BeginUpdateResource(
LPCTSTR pFileName, // pointer to executable file name
BOOL bDeleteExistingResources // deletion option
);mehr sag ich aber nicht ...
MfG
RB
-
@RED-BARON:
Ahh.. danke für den Tipp
der Code sieht bei mir jetzt so aus:#include <windows.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevIsntance, PSTR szCmdine, int iCmdShow) { HANDLE h; int Anz; BOOL res; WCHAR* buffw; char buff[] ="Neue String"; buffw = new WCHAR[256]; // ASCII-String in Unicode-String umwandeln Anz = MultiByteToWideChar(CP_ACP, 0, buff, lstrlen(buff), NULL, 0); MultiByteToWideChar( CP_ACP, 0, buff, lstrlen(buff), buffw, Anz); h = BeginUpdateResource("C:\\eineexe.exe", TRUE); res = UpdateResource(h, RT_STRING, "1", MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN), buffw, sizeof(buffw)); EndUpdateResource(h, FALSE); return 0; }..doch in der String-Ressource der EXE steht jetzt:
STRINGTABLE LANGUAGE LANG_GERMAN, SUBLANG_GERMAN { 1392, "e?????????????????????????????????????????????????????????????????????????????" }
thx für die antworten!
cruzo
-
UpdateResource erwartet im letzten Parameter die Größe des Buffers in Bytes. Du übergibst aber mit sizeof(buffw) nur die Größe eines Pointers

-
Danke für den Hinweis!
Würde denn jetztsizeof(buff)funktionieren?
..Ihr müsst wissen, dass ich Zeiger über alles hasse...
-
In Anz hast du ja schon die Länge. Ich weiß gerade nicht, ob da das abschließende NUL-Zeichen schon drin ist - also kannst du z.B. 2*Anz bzw. 2*(Anz + 1) verwenden

Ansonsten könntest du wohl auch 512 (2* 256) angeben, denn so groß ist ja der von dir reservierte Speicher für buffw
-
hi flenders!
ich habe gerade den code hier ausprobiert:#include <windows.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevIsntance, PSTR szCmdine, int iCmdShow) { HANDLE h; int Anz; BOOL res; WCHAR* buffw; char buff[] ="Neue String"; buffw = new WCHAR[256]; // ASCII-String in Unicode-String umwandeln Anz = MultiByteToWideChar(CP_ACP, 0, buff, lstrlen(buff), NULL, 0); MultiByteToWideChar( CP_ACP, 0, buff, lstrlen(buff), buffw, Anz); h = BeginUpdateResource("C:\\eineexe.exe", TRUE); res = UpdateResource(h, RT_STRING, "1", MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN), buffw, 512); EndUpdateResource(h, FALSE); return 0; }...Wenn ich jetzt aber die Anwendung "eineexe" mit dem ResourceHacker
öffne und mir den Stringinhalt ansehen will, kommt die Fehlermeldung"Access violation at adress 77E5AB08 in module 'kernel32.dll'. Read of address 00A1C000"

ich hoffe mal, dass das "experiment" jetzt keine bleibenden schäden in windows
hinterlassen hat...
könnt ihr mir noch einmal helfen?