Fenstername anhand ProzessID ermitteln?



  • Hallo,
    wie kann ich den Fensternamen anhand der ProzessID ermitteln?
    Gibt ja die GetWindowThreadProcessId() Funktion müsste ja eigentlich ne ähnliche Funktion geben die genau das umgekehrte macht.
    Habe bis jetzt leider aber noch nichts gefunden.



  • Spontan würde mir jetzt einfallen, dass du dir mit EnumWindows alle Fenster holst und auf jedes Handle diese Funktion GetWindowThreadProcessId anwendest. Dann kannst du die Process-IDs miteinander vergleichen und so alle Fenster von einem bestimmten Prozess herausfiltern.



  • Also eins vorweg ich habe noch nie mit Callback Funktionen gearbeitet.
    Habe es jetzt geschafft alle Fenster auszulisten:

    BOOL CALLBACK ShowWindows(HWND hwnd,LPARAM lParam)
    {
    char pcWinTitle[256];
    
    if((GetWindow(hwnd, GW_OWNER)) == 0)
    		{
                 printf("Window: %s\n",pcWinTitle);
    		}
    
    return TRUE;
    }
    
    int main() {
    	EnumWindows((WNDENUMPROC)ShowWindows, 0);
    
    return 0;
    }
    

    Jetzt weiß ich nur nicht wie ich in der main() mit dem Handle des aufgelisteten Fensters arbeiten kann.
    Habe bisher Google.de benutzt aber nichts richtiges gefunden was mir weiterhilft.



  • Du kannst z.B. über den LPARAM Parameter die Adresse eines Buffers übergeben in den du die Fensterhandles eintragen kannst

    BOOL CALLBACK EnumProc(HWND hwnd, LPARAM lp)
    {
      static int index=0;
    
      if (irgendwas && index<=9)
      {
        lp[index]=hwnd;
        ++index;
      }
    }
    
    int main()
    {
      HWND buffer[10];
    
      EnumWindows((WNDENUMPROC)EnumProc, (LPARAM)buffer);
    
      // Mach was mit den Fensterhandles
    }
    

    Das Beispiel ist jetzt noch nicht das gelbe vom Ei (weils nur schnell hingeschrieben ist) aber dürfte die Vorgehensweise gut demonstrieren.


Anmelden zum Antworten