Windows Titel aus Process ID ermitteln



  • hi

    das habe ich :

    HWND h = ::GetTopWindow(0 );
    								while ( h )
    								{
    								  DWORD pid;
    								  DWORD dwTheardId = ::GetWindowThreadProcessId( h,&pid);
    										 if ( pid == dwProcessIDs[nIndex] )
    										 {
    												char cBuffer[255], cBuffer1[255];
    												GetWindowText(h,cBuffer1, 255);
    												SendMessage(h, WM_GETTEXT, (WPARAM)255,(LPARAM) cBuffer); 
    												//TerminateProcess(OpenProcess(SYNCHRONIZE|PROCESS_TERMINATE, FALSE, dwProcessIDs[nIndex]),0);								
    												//sprintf(strbuffer, "%s %d %s", strName, dwProcessIDs[nIndex], lpStartupInfo->lpDesktop ); //ftCreation;
    												MessageBox( NULL,(LPCSTR)cBuffer1, "Mein erstet Windowsprogramm!", MB_OK); // here h is the handle to the window
    												break;
    										 }
    										 h = ::GetNextWindow( h , GW_HWNDNEXT);
    								}
    

    zu meinem Leitwesen bekomme ich aber nicht die Fensterbezeichnungen der client.exe. Vermutlich hab ich es mit einem child window zu tun. Was könnte ich anders machen?

    danke



  • An die Childfenster kommst du mit EnumChildWindows().
    Aber auch Spy++ könnte dir weiterhelfen.


  • Mod

    Wenn Dein Fenster aber so im Taskamanger mit diesem Namen auftaucht, dann ist es kein Child-Window.

    Grundsätzlich: Deine Absicht einen Thread mit TerinateProcess zu beenden beduetet letzten Endes eine "unsauberes" "hartes" Beenden des Prozesses. Dadurch werden evtl. nicht alle System Ressourcen freigegeben. Wenn ein Prozess "sauber" beenden soll, muss er sich selbst beenden. Sende WM_CLOSE!



  • Mist, dann mach ich was falsch, denn der Name taucht im Taskmanager auf.


Anmelden zum Antworten