ReadProcessMemory & WriteProcessMemory umschreiben sodass man den Rückgabetyp bestimmen kann
-
Hi, ich wollte mal nachfragen wie es möglich ist diese beiden Funktionen So umzuschreiben das man selber einen Rückgabewert Typ (mittels parameter) bestimmen kann.
Ich hoffe das mit jmd. Helfen kann
float ReadMem(char * Window,long offset){ HWND GWhwnd;DWORD GWProcID;HANDLE GWHandle;float Value; LPCSTR GW = Window; GWhwnd = FindWindow(NULL, GW); GetWindowThreadProcessId(GWhwnd, &GWProcID); GWHandle = OpenProcess(PROCESS_ALL_ACCESS, false, GWProcID); ReadProcessMemory(GWHandle,(LPCVOID)offset, &Value, 4, 0); return Value; } void WriteMem(char * Window,int Value,long offset){ HWND GWhwnd;DWORD GWProcID;HANDLE GWHandle; LPCSTR GW = Window; GWhwnd = FindWindow(NULL, GW); GetWindowThreadProcessId(GWhwnd, &GWProcID); GWHandle = OpenProcess(PROCESS_ALL_ACCESS, false, GWProcID); WriteProcessMemory(GWHandle,(LPVOID)offset, &Value, 4, 0); }
-
was sollte denn zurückgegeben werden? Die erste Funktion gibt dir den ausgelesenen Wert zurück und die zweite kann außer funktioniert/nicht funktioniert schlecht was zurückgeben.
greetz KN4CK3R
-
Ja also die Erste kann zurzeit nurn Float zurück geben, ich will aber das ich z.B.
int i;
i = ReadMem("blabl","0x000000");dann soll er den Speicher als int zurückgeben..
Bei der anderen funktion (die funktioniert) soll er z.B. einen integer im speicher schreiben oder float usw. (mitteld übergabeparameter z.B.
WriteMem("blabl","0x000000","float"); <---Als Float
oder
WriteMem("blabl","0x000000","int"); <---Als IntegerMfG
-
Sieh dir mal Templates an.
-
Finde nichts, was mir helfen könnte
-
Hallo
Dann hast du das Prinzip von Templates nicht verstanden. Denn genau dafür lassen sich Templates einsetzen. Das sollte dann so aussehen (ungetestet) :
template <class Type> // Template-Deklaration Type ReadMem(char * Window,long offset) // Variabler Rückgabetyp { HWND GWhwnd;DWORD GWProcID;HANDLE GWHandle; Type Value; // lokale Variable mit variablem Typ LPCSTR GW = Window; GWhwnd = FindWindow(NULL, GW); GetWindowThreadProcessId(GWhwnd, &GWProcID); GWHandle = OpenProcess(PROCESS_ALL_ACCESS, false, GWProcID); ReadProcessMemory(GWHandle,(LPCVOID)offset, &Value, sizeof(Type), 0); // Statt festen 4 Bytes muß die Größe des Types bestimmt werden return Value; } // Analog die Schreibfunktion template <class Type> void WriteMem(char * Window,Type Value,long offset){ HWND GWhwnd;DWORD GWProcID;HANDLE GWHandle; LPCSTR GW = Window; GWhwnd = FindWindow(NULL, GW); GetWindowThreadProcessId(GWhwnd, &GWProcID); GWHandle = OpenProcess(PROCESS_ALL_ACCESS, false, GWProcID); WriteProcessMemory(GWHandle,(LPVOID)offset, &Value, sizeof(Type), 0); }
bis bald
akari
-
Leider gehts so immer noch nciht, er sagt immer
Vorlageargument für ReturnType konnte nicht hergeleitet werden.template <class ReturnType> // Template-Deklaration ReturnType ReadMemAll(char * Window,long offset) // Variabler Rückgabetyp { DWORD GWProcID;HANDLE GWHandle;ReturnType Value; GetWindowThreadProcessId(FindWindow(NULL, Window), &GWProcID); GWHandle = OpenProcess(PROCESS_ALL_ACCESS, false, GWProcID); ReadProcessMemory(GWHandle,(LPCVOID)offset, &Value, sizeof(ReturnType), 0); // Statt festen 4 Bytes muß die Größe des Types bestimmt werden return Value; } void main () { float Wert = ReadMemAll(WindowName,0x00000000); cout<<Wert<<endl; }
-
Wie könnte er auch. Gib ihn explizit an.
-
Okay, funktioniert, danke für die schnelle Hilfe :xmas1:
void main () { cout<<ReadMemAll<typ>(FensterName,0x00000000)<<endl; }
-
Edit: zu spät.