Xiantrius schrieb:
Das heist es gibt Spiele wie @Takafusa schon sagte probleme mit Spielen die ein 2 Fenster nutzen
Nicht ganz korrekt, so hab ich das nicht gesagt(schau noch mal nach), nicht immer ist das Process.MainWindow.Handle, das Handle vom Fenster das man sieht. Bei spielen halte ich es für sehr wahrscheinlich das es nur 1 Fenster gibt, ich habe einige DirectXCodes gesehen, gab nur 1 Fenster, wird auch ausnahmen geben. Bei Programen allerdings sieht das anders aus, da ist es wahrscheinlicher. EIn theoretisches Beispiel, wenn man VS startet, sieht man zuerst ein Fenster mit den zuletzt geöffneten Projekten, man wählt eins aus oder erstellt ein neues, ein weiteres fenster wird geöffnet. Ohne es untersucht zu haben, ist also nur spekulation, könnte das fenster mit dem Projekten das als erstes kommt das "MainWindow" sein. Wenn dem so wäre müsstest du alle Fenster mit EnumThreadWindows durchlaufen um an die anderen zu kommen. Wenn nun der Designer z.B. ein MDI Child ist, würdest du nur mit EnumChildWindows dran kommen, wobei du dann das Handle des ParentFensters in die Funktion geben musst, durchiterieren usw.
Gehen wir nun ein wenig strukturierter vor!
Ich denke du solltest nicht gleich voll durchstarten, ich habe die Vermutung, zu viel Code in einer Datei, zu unübersichtlich, weil du das nicht richtig strukturierst(nicht bös gemeint), sieht man daran das du die WinAPI funktionen in der Form klasse hasst, in einem meiner Beispielprojekte solltest du gesehen haben, das man sowas schön auf weitere Klassen verteilen kann, das macht das arbeiten viel einfacher, zudem ist das auch sauberer, manchmal braucht man diese Fuktionen in mehreren Klassen, da macht es Sinn sowas nicht in Form-klassen zu packen, zudem brauchste falls du diese Funktionen noch mal brauchst nur die Datei einem Projekt hinzufügen. Also leg das bestehende Projekt erstmal an die Seite, neues Projekt die API Funktionen in eine extra Klasse, dann kannste die später einfach in andere Projekt kopieren und als i-Tüpfelchen hast du viel weniger Code in der Form klasse, alles wird übersichtlicher sein.
Also lesen wir nun die Fenstertexte aus in einem neuen leeren Projekt, denke dabei nicht an das bereits bestehende Projekt oder was noch kommen wird, ist dann einfacher, werf quick&dirty einen Timer aufs Form interval 1000 reicht, enabled auf True stellen, im Tick event des Timers hohlste dir mit GetForeGroundWindow das Handle vom vordersten Fensterdamit wir erstmal auf einfachen Weg irgendwelche Handles haben, mit Debug.WriteLine die Handles mal ausgeben(Ausgabefenster aber öffnen, wenn du das geschlossen hast, siehste nix), dabei auch mal andere Fenster selektieren und die DebugAusgabe anschauen, wenn das klappt nächster Schritt, nutze das ausgelesene Handle und hohle die länge des textes und lasse das wieder mit Debug.WriteLine ausgeben, und wieder erst wenn die länge stimmt zum nächsten Schritt, das auslesen des textes. Wenn du das richtig gemacht hast, Congrats, du kannst Fenstertitel von anderen Prozessen auslesen. Projekt bereinigen, zippen, ab in ein Archiv, dann kannste jederzeit gucken wie du das gemacht hast.
Mach das mal, berichte und zeig uns den Code, dann machen wir den nächsten Schritt, auch wieder in einem leeren Projekt. Das wäre dann das Auflisten aller Fenster eines Prozesses.
Anders sehe ich keine Sinn, gibt nur verwirrung und alles zieht sich in die Länge. Am Ende wirst du dann mehrere kleine Projekte haben und kannst dann alles in ein Projekt zusammenfügen, ist leichter für uns alle.
Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Takafusa“ ()