Wie könnte GetWindowFromProcess() aussehen?
-
Der Prozess hat ein Fenster, Titel unbekannt.
Ich möchte durch den handle des prozesses den handle des einzigen fensters eben dessen bekommen.
MfG
-
Alle fenster durchgehen (EnumWindows() oder so) und mit z.b. GetWindowThreadProcessId() die Prozess ID mit der von deinem Prozess vergleichen. An alle Prozess IDs kommst z.b. mit CreateToolhelp32Snapshot().
-
Okay danke wird schon klappen.
MfG
-
Habs aber nicht getestet:
#include <vector> #include <assert.h> #include <windows.h> typedef std::vector<HWND> ProcessWindows; BOOL CALLBACK WndFromProcessProc(HWND,LPARAM); struct STransmitData { DWORD dwPID; ProcessWindows* pWnds; bool fSkip; }; bool GetWindowFromProcess(DWORD dwPID, ProcessWindows& cwdWindows, bool fSkipChilds) { STransmitData tdData; tdData.dwPID = dwPID; tdData.pWnds = &cwdWindows; tdData.fSkip = fSkipChilds; return (EnumWindows(WndFromProcessProc, reinterpret_cast<LPARAM>(&tdData)) != 0); } BOOL CALLBACK WndFromProcessProc(HWND hWnd, LPARAM lParam) { STransmitData* pData = reinterpret_cast<STransmitData*>(lParam); assert(pData); DWORD dwPID; GetWindowThreadProcessId(hWnd, &dwPID); if(pData->dwPID == dwPID) { if(!fSkipChilds) pData->pWnds->push_back(hWnd); else if(GetWindow(hWnd, GW_CHILD)) pData->pWnds->push_back(hWnd); } return (TRUE); }
-
Oh das wäre nicht nötig gewesen, habs schon geschafft.
Aber trotzdem danke.MfG
-
Willste eventuell ne kleine Entschädigung das du den Code geschrieben hast?
-
ceplusplus@loggedoff schrieb:
Willste eventuell ne kleine Entschädigung das du den Code geschrieben hast?
Och, wenne schon so fragst, ich schick Dir die Rechnung
.Aber Du kannst mir mal Deine Version zeigen, würd mich mal interessieren
.
-
CodeFinder, Dein Trolldetektor funktioniert nicht.

Da ist grade so ein Idiot, der sich die Namen von bekannten "UnRegs" nimmt und damit herumtrollt.
-

-
Ist ziemlich verbaut und schon wieder verschmissen, aber hier:
bool __stdcall windowEnumerateProcess(HWND windowHandle, LPARAM lParam) { DWORD currentProcessId; GetWindowThreadProcessId(windowHandle, ¤tProcessId); if(currentProcessId == KlasseA::getInstance().getServerProcessId()) KlasseA::getInstance().setServerWindowHandle(windowHandle); return true; }serverProcessSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); serverProcessEntry.dwSize = sizeof(serverProcessEntry); handleFound = Process32First(serverProcessSnapShot, &serverProcessEntry); for(; handleFound; handleFound = Process32Next(serverProcessSnapShot, &serverProcessEntry)) { serverProcessHandle = OpenProcess(PROCESS_QUERY_INFORMATION, false, serverProcessEntry.th32ProcessID); rowHelper = serverProcessEntry.szExeFile; if(rowHelper == dataBase[0]) { // MessageBox(NULL, "vcded.exe found", "", MB_OK); serverProcessId = serverProcessEntry.th32ProcessID; EnumWindows(reinterpret_cast<WNDENUMPROC>(windowEnumerateProcess), 0); serverListBoxHandle = FindWindowEx(serverWindowHandle, 0, "ListBox", 0); serverEditFieldHandle = FindWindowEx(serverWindowHandle, 0, "Edit", 0); EnableWindow(buttonHandles[1], true); SendMessage(labelHandle, WM_SETTEXT, 0, reinterpret_cast<LPARAM>(" Server: FOUND")); break; } }MfG