probleme mit dem befehl ControlSend

  • Hallo Liebe AutoIt gemeinde ich versuche leider vergeblich den Befehl STRG+m mit dem Befehl ControlSend an ein programm im hintergrund zu senden

    ControlSend ( $Program_1, "", "", "{^m}")

    nur leider will er das nicht , ich habe schon alle möglichen schreibweisen durch zb. ohne klammern ohne anfürungszeichen und und und.

    Wenn ich jetzt aber den Befehl

    Send("^m")

    benutze geht es .

    Aber mit "Send" muss ich das jeweilige Fenster erst in den vordergrund bringen also aktiv machen und genau das kann ich nicht gebrauchen.

    Ich möchte bzw. muss Tastatur Befehle wie zb. STRG+m oder ALT+m oder STRG+ALT+m an ein Fenster oder Programm senden das ausschließlich im hintergrund läuft.

    Deswegen meine Frage ob , das was ich will überhaupt mit "ControlSend" geht und wenn ja bitte wie ?

  • Hi,
    dir fehlt die ControlID, welche du mit dem Tool "AutoIt Window Info" (im AutoIt-Verzeichnis) erhälst.
    Schau dir in der Hilfe an, welche Parameter du benötigst!
    Weiterhin solltest du dein Script komplett oder zumindest die für das Verständnis nötigen Teile posten.

  • Danke für die antworten anbei mal das komplette programm so wie es im moment bei mir läuft und auch sehr gut funktioniert
    nur würde ich gerne die CTRL , ALT und SHIFT Tasten mit benutzen was den befehlsumfang erweitern würde.


    Spoiler anzeigen


    Local $szIPADDRESS = "127.0.0.1"
    Local $nPORT = 8765
    Local $MainSocket
    Local $recv
    Local $Fernbedienung_1 = "PHILIPS_26PFL5604H"
    Local $Fernbedienung_2
    Local $split1, $split2, $split3, $split4
    Local $split[1], $split[2], $split[3], $split[4]
    Local $Befehl_1 = "GUIDE"
    Local $Befehl_2 = "MUTE"
    Local $Befehl_3 = "Vol-"
    Local $Befehl_4 = "Vol+"
    Local $Befehl_5 = "up"
    Local $Befehl_6 = "down"
    Local $Befehl_7 = "left"
    Local $Befehl_8 = "right"
    Local $Befehl_9 = "back"
    Local $Befehl_10 = "source"
    Local $Befehl_11 = "ok"
    Local $Befehl_12 = "play"
    Local $Befehl_13 = "stop"
    Local $Befehl_14 = "pause"
    Local $Befehl_15 = "ch+"
    Local $Befehl_16 = "ch-"
    Local $Befehl_17 = "home"
    Local $Befehl_18 = "options"
    Local $Befehl_19 = "info"
    Local $Befehl_20 = ">>"
    Local $Befehl_21 = "<<"
    Local $Befehl_22 = "format"
    Local $Befehl_23 = "0"
    Local $Befehl_24 = "1"
    Local $Befehl_25 = "2"
    Local $Befehl_26 = "3"
    Local $Befehl_27 = "4"
    Local $Befehl_28 = "5"
    Local $Befehl_29 = "6"
    Local $Befehl_30 = "7"
    Local $Befehl_31 = "8"
    Local $Befehl_32 = "9"
    Local $Befehl_33 = "red"
    Local $Befehl_34 = "green"
    Local $Befehl_35 = "yellow"
    Local $Befehl_36 = "blue"

    TCPStartup()
    $MainSocket = TCPConnect($szIPADDRESS, $nPORT)
    While 1
    $recv = TCPRecv($MainSocket, 512)
    IF $recv = "" Then ContinueLoop
    $split = StringSplit($recv, ", ")
    If StringTrimRight($split[4], 1) = $Fernbedienung_1 Then
    If $split[3] = $Befehl_3 Then
    ControlSend ( "Kodi", "", "", "{F9 2}") ; Lautstärke runter
    sleep(0)
    ContinueLoop
    EndIf
    If $split[3] = $Befehl_4 Then
    ControlSend ( "Kodi", "", "", "{F10 2}") ; Lautstärke hoch
    sleep(0)
    ContinueLoop
    EndIf
    If $split[3] = $Befehl_5 Then
    ControlSend ( "Kodi", "", "", "{up}") ; hoch
    sleep(0)
    ContinueLoop
    EndIf
    If $split[3] = $Befehl_6 Then
    ControlSend ( "Kodi", "", "", "{down}") ; runter
    sleep(0)
    ContinueLoop
    EndIf
    If $split[3] = $Befehl_15 Then
    ControlSend ( "Kodi", "", "", "{pgup}") ; channel rauf Taste = eine seite hoch
    sleep(100)
    ContinueLoop
    EndIf
    If $split[3] = $Befehl_16 Then
    ControlSend ( "Kodi", "", "", "{pgdn}") ; channel runter Taste = eine seite runter
    sleep(100)
    ContinueLoop
    EndIf
    If $split[3] = $Befehl_1 Then
    ControlSend ( "Kodi", "", "", "{l}") ; Guide Taste = PvrOsdGuide
    sleep(100)
    Continueloop
    EndIf
    If $split[3] = $Befehl_2 Then
    ControlSend ( "Kodi", "", "", "{F8}") ; Mute
    sleep(500)
    ContinueLoop
    EndIf
    If $split[3] = $Befehl_22 Then
    ControlSend ( "Kodi", "", "", "{q}") ; Format Plugin commands
    sleep(0)
    ContinueLoop
    EndIf
    If $split[3] = $Befehl_7 Then
    ControlSend ( "Kodi", "", "", "{left}") ; links
    sleep(100)
    ContinueLoop
    EndIf
    If $split[3] = $Befehl_8 Then
    ControlSend ( "Kodi", "", "", "{right}") ; rechts
    sleep(100)
    ContinueLoop
    EndIf
    If $split[3] = $Befehl_9 Then
    ControlSend ( "Kodi", "", "", "{backspace}") ; zurück
    sleep(200)
    ContinueLoop
    EndIf
    If $split[3] = $Befehl_10 Then
    ControlSend ( "Kodi", "", "", "{tab}") ; Taste Source = Vollbild
    sleep(200)
    ContinueLoop
    EndIf
    If $split[3] = $Befehl_11 Then
    ControlSend ( "Kodi", "", "", "{enter}") ; ok
    sleep(100)
    ContinueLoop
    EndIf
    If $split[3] = $Befehl_12 Then
    ControlSend ( "Kodi", "", "", "{p}") ; play
    sleep(100)
    ContinueLoop
    EndIf
    If $split[3] = $Befehl_13 Then
    ControlSend ( "Kodi", "", "", "{x}") ; Stop
    sleep(100)
    ContinueLoop
    EndIf
    If $split[3] = $Befehl_14 Then
    ControlSend ( "Kodi", "", "", "{space}") ; pause
    sleep(300)
    ContinueLoop
    EndIf
    If $split[3] = $Befehl_17 Then
    ControlSend ( "Kodi", "", "", "{c}") ; Home Taste = ContexMenü
    sleep(300)
    ContinueLoop
    EndIf
    If $split[3] = $Befehl_18 Then
    ControlSend ( "Kodi", "", "", "{escape}") ; Options Taste = PreviousMenü
    sleep(300)
    ContinueLoop
    EndIf
    If $split[3] = $Befehl_19 Then
    ControlSend ( "Kodi", "", "", "{i}") ; Info anzeigen
    sleep(300)
    ContinueLoop
    EndIf
    If $split[3] = $Befehl_20 Then
    ControlSend ( "Kodi", "", "", "{f}") ; schneller vorlauf
    sleep(300)
    ContinueLoop
    EndIf
    If $split[3] = $Befehl_21 Then
    ControlSend ( "Kodi", "", "", "{r}") ; schneller rücklauf
    sleep(300)
    ContinueLoop
    EndIf
    If $split[3] = $Befehl_23 Then
    ControlSend ( "Kodi", "", "", "{0}") ; 0
    sleep(150)
    ContinueLoop
    EndIf
    If $split[3] = $Befehl_24 Then
    ControlSend ( "Kodi", "", "", "{1}") ; 1
    sleep(150)
    ContinueLoop
    EndIf
    If $split[3] = $Befehl_25 Then
    ControlSend ( "Kodi", "", "", "{2}") ; 2
    sleep(150)
    ContinueLoop
    EndIf
    If $split[3] = $Befehl_26 Then
    ControlSend ( "Kodi", "", "", "{3}") ; 3
    sleep(150)
    ContinueLoop
    EndIf
    If $split[3] = $Befehl_27 Then
    ControlSend ( "Kodi", "", "", "{4}") ; 4
    sleep(150)
    ContinueLoop
    EndIf
    If $split[3] = $Befehl_28 Then
    ControlSend ( "Kodi", "", "", "{5}") ; 5
    sleep(150)
    ContinueLoop
    EndIf
    If $split[3] = $Befehl_29 Then
    ControlSend ( "Kodi", "", "", "{6}") ; 6
    sleep(150)
    ContinueLoop
    EndIf
    If $split[3] = $Befehl_30 Then
    ControlSend ( "Kodi", "", "", "{7}") ; 7
    sleep(150)
    ContinueLoop
    EndIf
    If $split[3] = $Befehl_31 Then
    ControlSend ( "Kodi", "", "", "{8}") ; 8
    sleep(150)
    ContinueLoop
    EndIf
    If $split[3] = $Befehl_32 Then
    ControlSend ( "Kodi", "", "", "{9}") ; 9
    sleep(150)
    ContinueLoop
    EndIf
    If $split[3] = $Befehl_33 Then
    ControlSend ( "Kodi", "", "", "{F1}") ; rot Musik
    sleep(150)
    ContinueLoop
    EndIf
    If $split[3] = $Befehl_34 Then
    ControlSend ( "Kodi", "", "", "{F2}") ; grün PVR
    sleep(150)
    ContinueLoop
    EndIf
    If $split[3] = $Befehl_35 Then
    ControlSend ( "Kodi", "", "", "{F3}") ; gelb Bilder
    sleep(150)
    ContinueLoop
    EndIf
    If $split[3] = $Befehl_36 Then
    ControlSend ( "Kodi", "", "", "{F4}") ; blau
    sleep(150)
    ContinueLoop
    EndIf
    EndIf

    Wend

  • Zuerst einmal ein allgemeiner Tip für dich:

    Das du für längere Scripte einen Spoiler benutzt ist schon mal echt super!
    Allerdings solltest du dann auch einen Code-Tag benutzen, damit dein Script leichter lesbar ist und dein Script in SciTE vorab mit Tidy (Ctrl +T) formatieren.

    Der Code-Tag sorgt z. B. dafür, dass dein Script hier mit Zeilennummern angezeigt wird. Tidy sorgt u.A. dafür, dass die Zeilen korrekt eingerückt werden.

    Du solltest dein Grundwissen in Sachen AutoIt erst einmal vertiefen, denn sonst kommt du auf keinen grünen Zweig.

    Ich habe dir dein Script mal ein wenig 'umgestrickt'... und ein paar Beispiele mit CTRL, ALT und SHIFT Tasten eingebaut. Mehr Infos dazu findest du in der AutoIt-Hilfe zu der Funktion Send().

    Fernbedienung
  • @Bitnugger ein Riesen dank für deine mühe . Ich war so frei und habe dein Program einfach mal so übernommen , getestet und es lief super.
    Nach einem ersten erfolgreichen Test habe ich dann auch gleich mal in Zeile 54 und 55 zwei befehle mit CTRL eingebaut und siehe da es funktionierte nicht.
    Aber nach mehrmaligem drücken der Tasten "tv" und "subtitle" ging es auf einmal doch aber nur sporadisch zb. von 10 mal drücken dann zufällig 1 mal.
    Was mich dann darauf brachte das es da ein timing problem geben muss.
    Also habe ich ein opt("SendKeyDownDelay", 50) in Zeile 65 eingefügt und damit die standartzeit von 5ms auf 50ms erhöht und siehe da es fuktioniert jetzt absolut fehler frei.
    :party::party::party::party:

    Spoiler anzeigen