2 Apps abwechselnd anzeigen lassen

  • Hallo,

    ich bin neu hier und gerade dabei, 2 Apps abwechselnd anzeigen zu lassen.

    Ich ein Bsp. im "gute Frage" gefunden (Dank an "TheDoessler623") und getestet und dabei ein paar kleine Fehler berichtet.

    Nun mein Problem: das erste Programm startet und dann hängt es aber in Line 21:

    While _Timer_GetTimer($timer) > 0 And Not $killSwitch

    Ich finde auch keine Anleitung zum Befehl killswitch.

    Kann mir hier vielleicht jemand helfen?
    Ich schicke das BSp. in einer 2. Nachricht (zu viele Zeichen).

    Hier das Bsp. (1. Teil)


    Grüße RSBox

    Einmal editiert, zuletzt von Kanashius (17. Februar 2026 um 17:57) aus folgendem Grund: Codeblock/Formatierung

  • Ohne den Rest des Programmes (in dem auch dein Problem ist) kann man nur schwer helfen, aber eine Frage kann ich dir Beantworten:

    $killSwitch is kein Befehl/Funktion sondern eine Variable. In diesem Fall ein bool, also ein Wahr (True) oder Falsch (False).

    While _Timer_GetTimer($timer) > 0 And Not $killSwitch besagt also, dass die Schleife weiterlaufen soll, wenn _Timer_GetTimer($timer)>0 ist und $killSwitch nicht True ist.

    In dem bisherigen Code wird $killSwitch nie vom initialen "False" auf True geändert. Wenn die Schleife verlassen wird, dann nur weil _Timer_GetTimer($timer)>0 irgendwann nicht mehr zutrifft.

    Vielleicht hilft dir das ja weiter.

  • das ist dein Post dazu bei "Gute Frage"

    App die 2 Programme abwechselnd anzeigt?
    Hi,Du kannst beispielsweise Autolt dafür installieren. Das ist eine Skriptsprache, mit der man mit wenig Kenntnissen und wenig aufwand in Windows verschiedene…
    www.gutefrage.net

    Ein einfaches Beispiel:

    Gruß Marcel

    Einmal editiert, zuletzt von gmmg (18. Februar 2026 um 13:45)

  • Wobei das Beispiel aus "Gute Frage" ja jedesmal das Programm startet und minimiert und nicht anzeigt.

    Eigentlich müsste man vorher prüfen ob die Programme schon laufen, sich dann die PID dazu merken und darauf prüfen.

    Sind die Programme noch nicht am laufen, starte sie, zeige das 1. Programm und wechsel bei Hotkey (ohne sie nochmal starten zu wollen).

    Zudem eine gesonderter Hotkey zum Beenden der ganzen Schleife.

    Einmal editiert, zuletzt von Moombas (18. Februar 2026 um 15:17)

  • Danke für die Antworten.
    @ Kanashius: Moombas hat das Skript gefunden und hier reingestellt. Ich habe übersehen, dass der Rest nicht dabei war.
    @ Moobas: danke! Ich werde die Programme davor mal starten und dann schauen was passiert

    Ich bin wirklich ein kompletter Anfänger und für Eure Hilfe sehr dankbar.

  • mit dem Beispiel kannst du ja auch probieren:

    2 Mal editiert, zuletzt von gmmg (20. Februar 2026 um 10:08)

  • Das Problem was meinen Vorschlag angeht, ist, das ich (unter Win11) es nicht hin bekomme, von der pid zum hwnd zu kommen, da der erstellte Prozess (wo man ja eine pid zurück bekommt) weder in ProcessList, noch in Winlist auftaucht. Erklären kann ich mir das aber nicht.

    Ansonsten sähe meine Umsetzung ca. so aus (nicht komplett zu testen, aus genannten Gründen, leider)

  • Moombas hört sich nach meinem Problem an. Da hatte ich bei der Calc.exe auch das Problem.

    gmmg
    20. Februar 2026 um 09:34

    Eventuell hilft es weiter

  • Naja ProcessExists funktioniert bei mir ja aber halt in der ProcessList oder Winlist taucht der Prozess entweder nicht auf oder mit einer anderen PID als das was ich beim erstellen zurück bekommen habe.

  • Wie prüfst du denn die Pids, wenn du immer nur $pid erstellst? Weiter unten greifst du dann auf die $iPID zu.

    Bei der Calc.exe heißt der Process dann auch "CalculatorApp.exe"

    $pid = ProcessExists("CalculatorApp.exe")

    so kommen die korrekten PID's

    3 Mal editiert, zuletzt von gmmg (20. Februar 2026 um 13:06)

  • Wenn ich den Prozess starte (egal ob mit Shellexecute oder run) bekommst du ja bereits eine pid zurück.

    Dort lag erst mal mein Fokus (Programme laufen noch nicht).

    Und mit WinList() kannst du ja durchgehen und mit WinGetProcess($aList[$i][1]) die jeweiligen pids auslesen, bleibt aber immer ohne Ergebnis.
    Auch wenn ich mir per Processlist (wo ja keine hwnd zu bekommen ist aber ich halt zur Prüfung geschaut habe) die Prozesse nach dem starten anschaue, taucht die pid vom erstellen nicht auf.
    Manchmal auch nichtmal der Prozess laut Name (z.B. Rechner) oder eben mit einer ganz anderen pid (und ja es ist kein 2. Prozess dieser Programme am laufen).

    Keine Ahnung was da falsch läuft.

  • Alles schon gemacht (ein sich ändernder Exename lässt sich aber nicht dynamisch einfach mal so abfangen, ohne ihn manuell mit anzugeben, was ich vermeiden wollte, der calc war auch nur zum testen da).

    Aber ich nehme das trotzdem mal als Beispiel:
    - calc.exe gestartet -> pid: 24316
    - CalculatorApp.exe pid über ProcessList ausgelesen -> pid: 2452
    - msedge.exe gestartet -> pid: 31180
    - msedge.exe pid über ProcessList ausgelesen -> 13 pids aber nicht die 31180

    Oder ist das Problem nur bei mir, weil Unternehmens PC und sich irgendwas dazwischen setzt und daher die pids nicht passen?

  • Moin,

    der Rechner "Calc.exe" startet jetzt die App "CalculatorApp.exe". Das Hauptfenster der Apps gehört immer der "ApplicationFrameHost.exe". Das Fenster des Rechners verbirgt sich unter dem Control "ApplicationFrameInputSinkWindow1". Deshalb all die 'Unstimmigkeiten'.

  • Noch mal Moin,

    dass Run eine 'falsche' PID liefert entsteht dadurch, dass "Calc.exe" nur einen weiteren Prozess mit eigener PID startet und sich dann verabschieded. Die gelieferte PID ist dann wertlos.

  • Noch mal Moin,

    dass Run eine 'falsche' PID liefert entsteht dadurch, dass "Calc.exe" nur einen weiteren Prozess mit eigener PID startet und sich dann verabschieded. Die gelieferte PID ist dann wertlos.

    Das das nicht nur Calc betrifft hast du gesehen? Ich kann das mit msedge (siehe oben) als auch notepad nachstellen, andere habe ich noch nicht probiert.

  • Nochmal mit VSCode getestet,damit geht es, es scheint hier ggf. ein Problem mit bestimmten MS Programmen zu sein, die in Windoof integriert sind und sich da anders verhalten.

    Folgendes Beispiel funktionierte bei mir nun Einwandfrei (Achtung, die Zeit musst du verlängern, zum Testen hier auf 5 Sekunden gesetzt):

  • Ich fand das Problem interessant und hab mal ein Programm dafür geschrieben. Das sollte umsetzen, was du möchtest:

    Kanashius
    21. Februar 2026 um 01:30

    Das Programm kann Fenster automatisch erkennen (Nach Prozessname, Prozesspfad, Fenstertitel und Sichtbarkeit des Fensters). Außerdem können Fenster manuell hinzugefügt werden (Das hinzufügen im Programm aktivieren, dann das Fenster auswählen und ENTER drücken. ENTER ist in dem Modus natürlich blockiert, bis der Modus beendet wird).

    Die Fenster werden dann nacheinander durchgegangen (Reihenfolge kann geändert werden) und angezeigt. Sie werden dabei nicht "aktiviert". Das heißt, man kann den PC nebenbei ganz normal verwenden. Wenn andere Fenster vor die ein/ausblendenden Fenster geschoben werden, bleiben sie auch dahinter.

    Ich hoffe, das ist es was du gesucht hast, ansonsten kannst du dir im Quellcode in Zeile 346 die Funktion _winHandle ansehen, dort kann geändert werden, was passiert, wenn ein Fenster "aktiviert" wird.

    Viel Spaß damit :)