Auf Desktop gezeichnte Fenster finden - ehemals (Haupthread finden)



  • Wie erkenne ich, nach dem Enumerieren von Prozessen und deren Threads, welcher der Haupthread ist ? (Denn ich brauche das richtige Fenster)



  • ka ob es einfacher geht, aber du könntes die Erstellungszeiten der Threads vergleichen -> GetThreadTimes()



  • Was ist denn für dich der "Hauptthread"?



  • Du könntest auch GetWindowThreadProcessId verwenden, um zu ermitteln, welcher Thread das Fenster erzeugt hat.

    Edit: Ich habe mir deine Frage noch mal durchgelesen, die Antwort ist wohl genau am Thema vorbei...


  • Mod

    Es gibt keinen Hauptthread!

    Es gibt einen Thread der zuerst gestartet wird, aber theoretisch kann der einen zweiten Thread starten und dann selbst beenden und damit lebt der Prozess denoch weiter.

    Welchen Sinn verfolgst Du mit der Frage?



  • ... Ich habe echt 30 minuten über eine Erklärung nachgedacht ...

    Es gibt einen Thread der zuerst gestartet wird

    Den such ich ! 😉

    Den von dir spezifizierten Fall kann ich auch, denke ich, ignorieren.

    EDIT: Je mehr ich darüber nachdenke, desto mehr wird mir klar, dass das was ich zu suchen gedenke nicht möglich ist. Aber trotzdem gilt obiges noch immer.



  • Und wofür genau brauchst du den?



  • Gibt es sowas wie ein Hauptfenster ?
    Ich wollte die Prozesse enumerieren und dann das Fenster ermitteln, welches der Nutzer als "Hauptfenster", ich nenne es mal so, empfindet.
    Aber ich denke man kann das nicht so einfach sagen, jedes Programm kann anders aufgebaut sein. (oder nicht ?)

    Wie wäre es wenn ich mit GetParent() bei allen gefundenen Fenster nach einem wiederkehrenden Fensterhandle suche ?
    Das lässt sich auch nicht einfach so sagen, oder ? ahhh verzwickt... 😃



  • Tim06TR schrieb:

    Aber ich denke man kann das nicht so einfach sagen, jedes Programm kann anders aufgebaut sein.

    Exakt. Eine ordentliche Lösung für das was du versuchst kann es daher rein prinzipiell schon nicht geben...



  • Noch ein Versuch:

    Ich lasse mir das Handle vom "DesktopWindow" geben: GetDesktopWindow(VOID);
    und enumiere mit EnumChildWindows() die "Kinder".

    Dazu die Frage: Ist ein Fenster, dass auf dem Desktop direkt gezeichnet wird automatisch auch ein "Kind" davon ?



  • Wer sagt dass eine Anwendung nur ein Fenster haben kann?



  • dot schrieb:

    Wer sagt dass eine Anwendung nur ein Fenster haben kann?

    dam dam dam... eben noch dran gedacht, jetzt nicht mehr. 🙄



  • Das Problem ist eben: Theoretisch kann eine Anwendung beliebig viele Fenster haben die von beliebigen Thread erzeugt werden können. Wenn es dir eigentlich um eine ganz bestimmte Anwendung geht dann kannst du dein Programm an das Verhalten ebendieser Anwendung anpassen. Ein Hack wird es allemal sein...



  • Tim06TR schrieb:

    Noch ein Versuch:

    Ich lasse mir das Handle vom "DesktopWindow" geben: GetDesktopWindow(VOID);
    und enumiere mit EnumChildWindows() die "Kinder".

    Dazu die Frage: Ist ein Fenster, dass auf dem Desktop direkt gezeichnet wird automatisch auch ein "Kind" davon ?

    Was du meint nennt sich "Top-Level Window". Diese kannst du mit EnumWindows() auflisten.


Anmelden zum Antworten