ProcessID eines externen Programms ohne WinNamen (Programmieren)

ProcessID eines externen Programms ohne WinNamen (Programmieren)

Hallo,

ich versuche ein ProzessHandle zu erstellen. Die OpenProcess Funktion benötigt allerdings die ProzessID. Prinzipiell eigentlich weniger ein Problem. Aaaaber:


HWND hWnd;
DWORD threadid;
HANDLE hPrc;

hWnd = FindWindowA(NULL, "Zielprogramm");

threadid = GetWindowThreadProcessId(hWnd, NULL);

hPrc = OpenProcess(PROCESS_VM_READ, FALSE, threadid);
// hier der code
CloseHandle(hPrc);


Das ist die Geschichte mit Windownamen. Rein theopraktisch müsste die Geschichte funktioniern, allerdings ist hPrc == 0, was bedeutet, dass die Funktion fehlgeschlagen ist. Das ist zwar wichtig aber zweitrangig.

Also, mit welcher APIFunktion komme ich über den Prozessnamen an die ProcessID?
http://www.codeproject.com/threads/getprocessid.asp?df=100&;forumid=4487&exp=0&select=1507518 das hab ich schon gefunden, allerdings hilft mir das nicht weiter, da ich das hier:
std::vector<DWORD> SetOfPID;
GetProcessID("Rundll32",SetOfPID);
nicht verstehe ;>
Hm kann nicht mehr editiert werden..

habe mich in der Zwischenzeit mit dem ProcessHandle übers WinHandle befasst.


hProcess = OpenProcess(PROCESS_VM_READ, FALSE, otherThread);

DWORD error = GetLastError();

cout << "\n" << error << "\n";


der error ist durchgehend 87 (inkorrekte parameter). Das Problem ist, ich weiss nicht weswegen ;>
Hab zwar kein Windows da, aber ein Fehler fällt schonmal auf. GetWindowThreadProcessId liefert Dir per Referenz die threadid. res = GetWindow...Id() liefert die Fehlernnmmer zurück, wenn ich das noch richtig weiß.

Probier mal:

GetWindowThreadProcessId(hWnd, threadid);
hPrc = OpenProcess(PROCESS_VM_READ, 0, threadid);


Mal noch grundsätzlich: Warum stellst Du in diesem Forum solche Fragen? Wären doch besser in einem C/C++ Forum aufgehoben.
Hallo,

das Problem mit ProcessHandle über WinHandle habe ich bereits lösen könnten. Ich weiss nur noch nicht, wie ich an das ProcessHandle komme, ohne einen Fensternamen zur verfügung zu haben. Da bin ich auf Hilfe angwiesen.
Dann geh doch per ProcessFirst und ProzessNext durch alle Prozesse und ermittle den EXE Namen (falls Dir der reicht um den den gewünschten zu identifizieren).
also der exename reicht schon :) Danke.
Logge dich ein um einen Beitrag zu schreiben.