Pfad eines Prozesses finden
-
Hallo!
ich würde gerne den Pfad eines Prozesses, der gerade (im Taskmanager) läuft, als string speichern.
Sodass ich hinterher an die Dateien komme des Ordners komme, wo auch die .exe drin liegt.Sinn und Zweck?
Ich möchte von einem Spiel die Configs auslesen.
Das Spiel wäre in diesem Falle Counter-Strike.Wenn die hl.exe gestartet wurde, soll sich mein Programm den Pfad von der hl.exe raussuchen (also z.B.: C:\Spiele\Steam\steamapps\accountname\counter-strike\)und dann die config.cfg, die im selben Ordner liegt, kopieren.
Hat jemand eine Ahnung wie ich das "leicht und effizient" lösen könnte?
Danke! MfG jeNova
-
Du greifst einfach auf den Registry Eintrag von Steam zurück und findest dort den Pfad zum Steam Ordner.
-
feigling schrieb:
Du greifst einfach auf den Registry Eintrag von Steam zurück und findest dort den Pfad zum Steam Ordner.
Ja klar das stimmt schon, aber dann habe ich ja noch nicht den Ordner mit dem Accountnamen. Und dadrin sind ist ja erst die config.txt, die ich auslesen bzw. kopieren möchte!
-
Habe jetzt folgenden Code im Inet gefunden:
BOOL GetProcessModule(DWORD dwPID, DWORD dwModuleID, LPMODULEENTRY32 lpMe32, DWORD cbMe32) { BOOL bRet = FALSE; BOOL bFound = FALSE; HANDLE hModuleSnap = NULL; MODULEENTRY32 me32 = {0}; ZeroMemory(&me32,sizeof(MODULEENTRY32)); hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID); if (hModuleSnap == INVALID_HANDLE_VALUE) return (FALSE); me32.dwSize = sizeof(MODULEENTRY32); if (Module32First(hModuleSnap, &me32)) { do { if (me32.th32ProcessID == dwPID) { CopyMemory (lpMe32, &me32, cbMe32); bFound = TRUE; } } while (!bFound && Module32Next(hModuleSnap, &me32)); bRet = bFound; } else bRet = FALSE; CloseHandle(hModuleSnap); return bRet; } BOOL ListProcesses() { HANDLE hProcessSnap = 0; HANDLE hToken; PROCESSENTRY32 pe32 = {0}; DWORD dwPriorityClass; BOOL bGotModule = FALSE; HANDLE hProcess; MODULEENTRY32 me32 = {0}; hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if(hProcessSnap == INVALID_HANDLE_VALUE) return FALSE; pe32.dwSize = sizeof(PROCESSENTRY32); if(Process32First(hProcessSnap,&pe32)) { do { ZeroMemory(&me32,sizeof(MODULEENTRY32)); hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pe32.th32ProcessID); bGotModule = GetProcessModule(pe32.th32ProcessID, pe32.th32ModuleID, &me32, sizeof(MODULEENTRY32)); dwPriorityClass = GetPriorityClass(hProcess); cout<<"File name: "<<pe32.szExeFile<<endl; cout<<"Path: "<<me32.szExePath<<endl; CloseHandle(hProcess); }while(Process32Next(hProcessSnap,&pe32)); } return bGotModule; }Wie kriege ich das jetzt hin, das er NUR die "hl.exe" aus meinem TaskManager sucht und dann auch nur den PFAD von der "hl.exe" als string speichert?
-
Dir ist schon bewusst, dass du eigentlich im komplett falschen Forum bist? C++ kennt noch nichtmal ein Dateisystem, von Task und Prozessen ganz zu schweigen. Du solltest vielleicht eher ins WinAPI Forum gehen.
Grüssli