C++ ReadProcessMemory

09/18/2014 00:50 |->|<-|#1
Hallo, ich wollte mir mal die Funktion ReadProcessMemory ansehen in C++ da ich vorhabe eine kleine Hook zu machen für einen Launcher.
Ich hab das ganze einmal in C# getestet und will es jetzt gerne in C++ umsetzen allerdings scheitere ich an komischen sachen.

Erstmal der Code:
Code:
void MemoryFunc(HWND hwND)
{
	HWND hWnd;
	HANDLE hproc;
	DWORD procid;
	DWORD rw = 0;

	unsigned adress = 0x1012F270;
	byte buffer = 0;

	hWnd = hwND;
	if (!hWnd)
	{

		cout << "cant find window" << endl;
	}


	GetWindowThreadProcessId(hWnd, &procid);

	hproc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, procid);

	if (ReadProcessMemory(hproc, (LPCVOID)adress, &buffer,
		sizeof(buffer), &rw))
	{
		cout << "Lesen erfolgreich\n";
		cout << buffer << endl;
	}
	buffer++;

	CloseHandle(hproc);
	
}
Jetzt zu meinem Problem undzwar muss ich per ShellExecute ein Spiel starten und dort dann ein Byte in der Memory verändern hat ja soweit mit C# nun alles geklappt nun seht ihr ja den Code und mein Problem ist bei C++ das hwnd , ich kann das nicht mit FindWindow finden, da es bei jedem user abweicht.
Nun meine genau Frage, wie kriege ich die hwnd raus ohne den Window?
Gibts da ne möglichkeit wie bei CSharp mit dem Prozess-Name?

PS: Ich bin echt kein C++ coder ich benutze es nur wenn es hart auf hart kommt, also postet bitte nicht nur Code ne erklärung oder Verlinkung zu etwas wäre cool!
09/18/2014 00:59 snow#2
Mit [Only registered and activated users can see links. Click Here To Register...] solltest du an die PID des erstellten Prozesses kommen.
Ansonsten kannst du auch mit [Only registered and activated users can see links. Click Here To Register...] einen Snapshot deiner Prozesse erstellen und mit [Only registered and activated users can see links. Click Here To Register...] durch die Prozesse iterieren, bis du deinen Prozess gefunden hast.
09/18/2014 01:07 |->|<-|#3
CreateProcess kann ich nicht benutzen da funktionieren meien Arguments nicht, nur mit ShellExecute klappts, der Offiziele launcher benutzt das auch so.

Edit:
Das wäre der Snapshot oder?
Code:
PROCESSENTRY32 entry; 
        entry.dwSize = sizeof(PROCESSENTRY32); 
  
        HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL); 
  
        if (Process32First(snapshot, &entry) == TRUE) 
        { 
            while (Process32Next(snapshot, &entry) == TRUE) 
            { 
                if (stricmp(entry.szExeFile, "chrome.exe") == 0) 
                {   
                    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, entry.th32ProcessID); 
  
                    SendMessage(hProcess, WM_DESTROY, NULL, NULL); 
                    
  
                    CloseHandle(hProcess); 
                } 
            } 
        } 
  
        CloseHandle(snapshot);
09/18/2014 10:30 MrSm!th#4
Übrigens kannst du mit FindWindow auch nach der Window Class suchen, die sich meistens nicht ändert. Die Window Class liest du mit Programmen wie Spy++ aus.
09/18/2014 16:42 Terrat#5
Multiplecharset:
HWND HWND_FW=FindWindow( ->Class Name , ->Window name);

Msdn Link:[Only registered and activated users can see links. Click Here To Register...]