Handle von einem Prozess bekommen?
-
Hallo allerseits
Ich habe vor so etwas wie einen Trainer zu programmieren und dabei folgenden code im Internet gefunden.#include <windows.h> #include <iostream> using namespace std; typedef unsigned int uint; void GetMemMinMax(void); void ScanMem(DWORD start, DWORD end); HANDLE hproc; DWORD procid; int main(void) { HWND hWnd; hWnd = FindWindow(0,"Opfer"); if(!hWnd) return 0; GetWindowThreadProcessId(hWnd, &procid); hproc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, procid); GetMemMinMax(); CloseHandle(hproc);//<-- Wichtig! return 0; } void GetMemMinMax(void) { MEMORY_BASIC_INFORMATION mbi; unsigned int adress = 0x400000; do { VirtualQueryEx( hproc, (void*)adress, &mbi, sizeof(MEMORY_BASIC_INFORMATION) ); if((mbi.State == MEM_COMMIT)&& (mbi.Protect == PAGE_READWRITE)&& (mbi.Type == MEM_PRIVATE)) { uint start = (uint)mbi.BaseAddress; uint end = (uint)mbi.BaseAddress+mbi.RegionSize; cout << "Bereich: " << hex << start << " - " << hex << end; ScanMem(start,end); } adress += mbi.RegionSize; } while(adress < 0x80000000); } void ScanMem(DWORD start, DWORD end) { cout << " Bereich wird gescannt... "; DWORD read = 0; int buffer = 0; for(start;start<end;start++) { ReadProcessMemory( hproc, (void*)start, &buffer, sizeof(int), &read ); if(buffer == 15) { cout << "Wert an " << hex << start << " gefunden!"; char choice; cout << "Abbrechen? [j,n]"; cin >> choice; if(choice == 'j') return; } } }Jetzt ist das aber kein offenes Fenster sondern nur ein Prozess wie muss ich denn das dann machen habe keine Ahnung von WinAPI aber mit FindWindow() gehts nicht. Danke schon mal!
-
Wenn du den Exe-Namen hast sollte diese Funktion dir weiter helfen:
DWORD GetProcessByFileName(char* name){ DWORD process_id_array[1024]; DWORD bytes_returned; DWORD num_processes; HANDLE hProcess; char image_name[256]; char buffer[256]; DWORD exitcode; EnumProcesses(process_id_array, 256*sizeof(DWORD), &bytes_returned); num_processes = bytes_returned/sizeof(DWORD); for(int i=0;i<num_processes;i++){ hProcess=OpenProcess(PROCESS_ALL_ACCESS,TRUE,process_id_array[i]); if(GetModuleBaseName(hProcess,0,image_name,256)){ if(!stricmp(image_name,name)){ CloseHandle(hProcess); return process_id_array[i]; } } CloseHandle(hProcess); } return 0; }
-
Hallo,
Du müsstest an die Prozess-ID herankommen, um den Prozess mittels OpenProcess zu öffnen.
Zu diesem Zweck musst du die Prozesse auflisten und die Id des entsprechenden Prozesses auslesen.
Hier eine kleine Funktion:int GetProcID(const char* szProcess) { HANDLE hSnapshot; PROCESSENTRY32 ProcessEntry; ProcessEntry.dwSize = sizeof(PROCESSENTRY32); hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); int iProcID = -1; if(Process32First(hSnapshot, &ProcessEntry)) do { if(!stricmp(ProcessEntry.szExeFile,szProcess))iProcID = ProcessEntry.th32ProcessID; } while(Process32Next(hSnapshot, &ProcessEntry)); CloseHandle(hSnapshot); return iProcID; }Du musst windows.h und tlhelp32.h einbinden.
Sollte der Prozess nicht existieren, liefert die Funktion -1 zurück.
Ich hoffe, ich konnte die helfen.
Aber mal eine kleine Frage: Meinst du, dass du es schaffst, einen Trainer zu programmieren? Dein Problem, das du hier hattest, ist noch klein im Vergleich zu denen, sie mit Sicherheit noch kommen werden...MfG, Jochen