Alternativ: (Ich habe den Link oben mal entfernt, da mein 2. Ansatz doch aufwändiger ist als erst gedacht):
AutoIt
Opt('MustDeclareVars', 1)
#include <Array.au3>
SetFocus('ftel.exe')
Func SetFocus($sAppName)
Local $aWindows, $handle, $list
Local Const $aProcesses = ProcessList($sAppName)
For $i = 1 To $aProcesses[0][0]
$aWindows = _ProcessGetWinEx($aProcesses[$i][1])
For $Row = 1 to $aWindows[0]
$handle = $aWindows[$Row]
$list = WinList()
For $i = 0 To UBound($list)-1
If $handle=$list[$i][1] Then
WinActivate($list[$i][0])
ExitLoop
EndIf
Next
Next
Next
EndFunc
;Source: https://www.autoitscript.com/forum/topic/80830-how-to-activate-window-by-pid/#comment-581721
Func _ProcessGetWinEx($ivPid, $svClass = "", $svTitle = "", $svText = "", $ivReturnOnlyFirstMatch = False)
Local $avClass
$ivPid = ProcessExists($ivPid)
If Not $ivPid Then Return(SetError(1, 0, 0))
Local $avwArray = WinList()
Local $avRet[1] = [0]
For $i = 1 To $avwArray[0][0]
$avClass = DllCall("User32.dll", "int", "GetClassName", "hwnd", $avwArray[$i][1], "str", "", "int", 4096)
If WinGetProcess($avwArray[$i][1]) = $ivPid Then
If $svClass = "" Or (IsArray($avClass) And $avClass[2] = $svClass) Then
If ($svTitle = "" Or StringInStr($avwArray[$i][0], $svTitle)) And ($svText = "" Or StringInStr(WinGetText($avwArray[$i][1]), $svText)) Then
$avRet[0] += 1
ReDim $avRet[$avRet[0]+1]
$avRet[$avRet[0]] = $avwArray[$i][1]
If $ivReturnOnlyFirstMatch Then
$avRet = $avret[1]
ExitLoop
EndIf
EndIf
EndIf
EndIf
Next
Return $avRet
EndFunc
Alles anzeigen
Wenn du natürlich das Programm immer über dein Skript startest, würde der Teil mit dem finden der PID hier weg fallen.