ProcessID eines anderen Prozesses über Prozessname ermitteln (->ProcessHandle)
-
Hallo,
Ich hab jetzt schon einige Zeit gegoogelt und die doku durchgeforstet, allerdings komme ich zu keinem Ergebnis. Ein ProcessHandle mit Windownamen zu bekommen ist nicht das Problem
HWND hWnd; DWORD threadid; HANDLE hPrc; hWnd = FindWindowA(NULL, "Zielprogramm"); threadid = GetWindowThreadProcessId(hWnd, NULL); hPrc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, threadid); // hier der code CloseHandle(hPrc);Aber über den Prozessnamen schon

Hab selbstverständlich http://www.codeproject.com/threads/getprocessid.asp?df=100&forumid=4487&exp=0&select=1507518 das hier gefunden, aber weiterbringen tut mich das nicht unbedingt, weil ich diese 2 Zeilen:
std::vector<DWORD> SetOfPID;
GetProcessID("Rundll32",SetOfPID);
nicht verstehe.Hm, hab mir zwar Mühe gegeben, aber ich brauch wirklich Hilfe

-
chris2k6 schrieb:
...allerdings komme ich zu keinem Ergebnis.
Du würdest vermutlich im WinAPI-Forum Hilfe bekommen, das Thema hat aber nichts mit AnsiC++ zu tun, daher hier auch nichts verloren. Aber warte, der Thread wird mit Sicherheit von einem Aufmerksamen Forumsadmin verschoben...
-
Das Problem ist, dass ich nie wirklich weiss wan API und wann normales C++ Forum ..
Wie dem auch sei:
Hab bin das mal angegangen..
HWND targetHWND=0; DWORD otherThread; HANDLE hProcess; //Ziel finden targetHWND=FindWindowA(NULL,"sa"); if(targetHWND==0) {MessageBoxA(0,"Can't find...","OUCH",0);} otherThread = GetWindowThreadProcessId(targetHWND, NULL); cout << otherThread << "\n"; hProcess = OpenProcess(PROCESS_VM_READ, FALSE, otherThread); DWORD error = GetLastError(); cout << "\n" << error << "\n"; CloseHandle(hProcess);Der errorcode ist immer 87.
ERROR_INVALID_PARAMETER
87 The parameter is incorrect.Obwohl ich keinen Fehler erkenne kann

-
chris2k6 schrieb:
Das Problem ist, dass ich nie wirklich weiss wan API und wann normales C++ Forum ..
Das ist eigentlich ganz einfach:
Wenn es um die grundlegende Sprache geht (Sprich: Die Schlüsselworte von C++ wie z.B. int, if, return, template...) oder um die STL bist du hier richtig (ebenso auch für allgemeingültige C++ Bibliotheken die an kein Betriebssystem gebunden sind und kein eigenes Forum haben wie z.B. Boost und Loki). Ebenso wenn es sich um allgemeine, nicht Plattformspezifische Probleme handelt, wo du nicht weißt wie du sie umsetzen kannst.
Geht es wie hier aber um Plattformspezifisches Wissen (und HWND etc. deutet schon darauf hin), bist du im AnsiC++ Bereich falsch. Grundsätzlich kann man sagen alles wo es um GUI geht (es gibt in den Basisbibliotheken von C++ keine GUI außer die Konsole), und um Zugriffe auf Betriebssystemfunktionen sind die speziellen Unterforen richtig.
cu André
-
Ah danke
Also sobald ich windows.h includiere ab ins API Forum 
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
OpenProcess () braucht eine ProcessID und keine ThreadID :
DWORD threadid, processid; ... threadid = GetWindowThreadProcessId(targetHWND, &processid); ... hProcess = OpenProcess(PROCESS_VM_READ, FALSE, processid); ...