Telnet-Verbindung innerhalb eines Programmes "silent" bedienen

  • Hallo Leute,

    ich sitze da mal wieder vor einem Problem...

    Folgendes Szenario:

    Ich öffne beim Start meines Prgrammes eine Telnet-Verbindung zu einem Netzwerk-Gerät, welches ich nur über Telnet bedienen kann.
    Die Telnet-Verbindung wird aufgebaut:

    [autoit]

    $conn_create = Run('telnet 192.168.1.4', @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD);@SW_HIDE,
    If @error Then
    MsgBox(16, "Attention!", "No TELNET connection!" & @CRLF & "Please be sure that your computer is well configured" & @CRLF & " and your connection is running!", 20)
    EndIf
    Sleep(500)

    [/autoit]

    Die Telnet-Verbindung wird also über @SW_HIDE geöffnet.

    Im Programm habe ich dann einen Button, der über Telnet eine Exe ausführen soll.
    Allerdings ist das Telnet-Fenster ja nicht aktiv, die SEND-Befehle gehen also nciht ans Telnet-Fenster, sondern landen auf meiner Gui...

    Wie bekomme ich das hin, dass die Befehle ans Telnet gehen und auf dem externen Gerät abgearbeitet werden? ?(

    Fragen? Fragen!

    Cheers

    Gruß
    Pitter

    Einmal editiert, zuletzt von Pitter (14. Januar 2012 um 11:59)

  • in $conn_create steht die PID des prozesses drin
    Nun kannst du über diese Funktion:

    Spoiler anzeigen
    [autoit]

    Func _GetHwndFromPID($PID) $hWnd = 0 $stPID = DllStructCreate("int") Do $winlist2 = WinList() For $i = 1 To $winlist2[0][0] If $winlist2[$i][0] <> "" Then DllCall("user32.dll", "int", "GetWindowThreadProcessId", "hwnd", $winlist2[$i][1], "ptr", DllStructGetPtr($stPID)) If DllStructGetData($stPID, 1) = $PID Then $hWnd = $winlist2[$i][1] ExitLoop EndIf EndIf Next Sleep(100) Until $hWnd <> 0 Return $hWnd EndFunc ;==>_GetHwndFromPID

    [/autoit]

    Keine ahnug wer der author ist (http://www.autoitscript.com/forum/topic/86…wnd-conversion/). Zudem keien ahnung warum er es so formatiert, aber original ja im link

    Den Handle für diese Pid bekommen.($handle = _GetHwndFromPID($conn_create)
    Durch den handle kannst du per ControlSend nun Daten an deinen Prozess schicken.

  • Moin zusammen,

    die Func hab ich dann wieder verworfen und noch mal in Ruhe gesucht.
    Hab auch was für meine Bedürfnisse gefunden und angepasst....

    Spoiler anzeigen
    [autoit]


    _main()
    .
    .
    .
    snip
    Case $ConnButton ;===== Connect PC with second
    ;===== open Telnet to connect to target
    _telnet()
    Case $screenButton ;====== Take Screenshot ======
    ;===== call func _screen_dateset to get actual timestamp
    _screen_dateset()
    ;===== call func _screenshot to take screenshot
    _screenshot()
    ;=====
    While WinExists($WinTitle, "")
    If WinActive($WinTitle, "") Then
    HotKeySet("{F10}", "_screenshot")
    Else
    HotKeySet("{F10}")
    EndIf

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

    WEnd
    snap
    .
    .
    .
    EndFunc

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

    ;======= Func to open telnet connection
    Func _telnet()
    ; Run Telnet
    Run("telnet 192.168.1.4", @SystemDir, $STDIN_CHILD + $STDOUT_CHILD)

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

    ;======= Rename window
    $WinTitle = "Telnet connection <<- Screenshot ->>"
    WinWait("Telnet 192.168.1.4", "")
    WinSetTitle("Telnet 192.168.1.4", "", $WinTitle)
    WinActivate($WinTitle)
    EndFunc ;==>_telnet

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

    ;======== take screenshot
    Func _screenshot()
    $Screenshot_name = GUICtrlRead($Screendate)
    xSend($WinTitle, "cd test" & "{ENTER}")
    xSend($WinTitle, "screenshot.exe " & $Picpath & $Screenshot_name & ".png" & "{ENTER}")
    GUICtrlDelete($Screendate)
    WinClose($WinTitle, "")
    EndFunc ;==>_screenshot

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

    Das tut es für mich ganz prächtig... das Telnet-Fenster poppt kurz auf und schickt meine Befehle zum externen Gerät.
    Also noch mal vielen Dank für Eure Hilfe und Denkanstösse.

    Gruß
    Pitter

    Einmal editiert, zuletzt von Pitter (14. Januar 2012 um 18:05) aus folgendem Grund: Spoiler eingefügt