bestehenden Prozess aktivieren ohne Window-Informationen?

  • Hi,

    irgendwie habe ich das Gefühl auf der Leitung zu sitzen, aber ich finde auch nach längerem Suchen keinen Weg das hinzubekommen:

    Kann man einen Prozess direkt an Hand seines Namens, so wie er Taskmanager steht, aktivieren? Also sowas wie ProcessActivate, ähnlich wie Winactivate?

    Hintergund ist das Programm Screamer. Der Titel des Fensters ändert sich mit jedem abgespielten Stück und ich finde mit au3info auch im Text nichts um das Fenster sicher zu "fangen" und es in den Vordergrund zu holen.

    Ich hatte etwas Ähnliches im Forum gefunden, leider ohne konkrete Lösung. Dort wurde u.a. der Rat gegeben dem Prozess etwas zu "übergeben". Wie ginge das z.B. ?

    Merci
    Tom

    Einmal editiert, zuletzt von beagle (29. November 2009 um 14:00)

  • Du musst dann mit dem FensterHandle arbeiten. Also einfach so was hier vor deine "normale" Schleife

    [autoit]


    #include <Misc.au3>
    While 1 * sleep(100)
    ToolTip("Bitte klicken Sie auf das Screamer Radio Fenster, und drücken sie ENTER",MousegetPos(0)+20,MouseGetPos(1))
    If _IsPressed("0D") Then
    $ScreamerHandle = WinGetHandle("")
    ExitLoop
    EndIf
    WEnd

    [/autoit]

    Den Fensterhandle eines Prozesses herauszufinden, kann schon aus dem Grund nicht gehen, dass ein Prozess kein Fenster haben muss bzw. auch mehrere Fenster haben kann (diese können auch unsichtbar sein)*

    *Alle angaben ohne gewähr

  • Danke für die Infos.

    Dann muß ich mal schauen ob ich das betriebssicher hinkriege. Das Fensterhandle ändert sich ja bei jedem Programmneustart wenn ich es richtig sehe, muß dann also immer wieder neu ermittelt und übergeben werden, auch bei z.B. einen Absturz von Screamer, während das Skript läuft. Leider läßt sich Screamer nicht nur in einer Instanz starten, sonst hätte es ja über Neuaufruf per Run gehen können. Und vorher killen ist auch nicht wirklich schön, dann hätte man ja bei jeden Zugriff, z.B. um die Aufnahme zu starten, eine Unterbrechung in der Musik.

    Bin aber doch etwas überrascht dass das so schwierig ist. Es gibt ja wahrscheinlich immer wieder Programme die schwer zu "fangen" sind, da würde die Option einen Prozess "anspringbar" zu machen doch nicht schaden, zumindest für Programme die nur ein Fenster haben. Über den Taskmanager komme ich ja händisch dran. Evtl. werde ich es dann auch auf dem Weg probieren, scheint nur nicht sehr elegant.

    Nochmal danke!

    • Offizieller Beitrag

    Habe ich das richtig verstanden? Du willst ein Fenster anhand des Prozessnamens aktivieren (in den Vordergrund holen)?

    Dann vielleicht so:

    Spoiler anzeigen
    [autoit]


    _WinActivateByProcessName('firefox.exe')
    ToolTip('ok')
    Sleep(2000)
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Func _WinActivateByProcessName($sProcessName)
    Local $aProcessList, $aWinList
    $aProcessList = ProcessList($sProcessName)
    If @error Then Return
    $aWinList = WinList()
    If $aWinList[0][0] = 0 Then Return
    For $i = 1 To $aWinList[0][0]
    For $j = 1 To $aProcessList[0][0]
    If WinGetProcess($aWinList[$i][1]) = $aProcessList[$j][1] Then
    WinActivate($aWinList[$i][1])
    Return ; diese Zeile weglassen, dann werden alle Fenster des Prozesses nach vorne geholt
    EndIf
    Next
    Next
    EndFunc

    [/autoit]