Forum: PC-Programmierung VBA Shell / Telnet


von Thorben (Gast)


Lesenswert?

Hallo, ich muss in VBA ein Programm schreiben mit Telnet. Telnet bekomme 
ich geöffnet und muss nun ein paar Kommandos in das Fenster senden, aber 
daran scheiter ich.


Shell
1
Option Explicit
2
3
Private Declare Function CloseHandle Lib "kernel32" ( _
4
    ByVal hObject As Long) As Long
5
Private Declare Function GetExitCodeProcess Lib "kernel32" ( _
6
    ByVal hProcess As Long, lpExitCode As Long) As Long
7
Private Declare Function OpenProcess Lib "kernel32" ( _
8
    ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
9
    ByVal dwProcessId As Long) As Long
10
11
Public Function ShellX( _
12
    ByVal PathName As String, _
13
    Optional ByVal WindowStyle As VbAppWinStyle = vbMinimizedFocus, _
14
    Optional ByVal Events As Boolean = True _
15
  ) As Long
16
  Const STILL_ACTIVE = &H103&
17
  Const PROCESS_QUERY_INFORMATION = &H400&
18
  Dim ProcId As Long
19
  Dim ProcHnd As Long
20
  ProcId = Shell(PathName, WindowStyle)
21
  ProcHnd = OpenProcess(PROCESS_QUERY_INFORMATION, True, ProcId)
22
  Do
23
    If Events Then DoEvents
24
    GetExitCodeProcess ProcHnd, ShellX
25
  Loop While ShellX = STILL_ACTIVE
26
  CloseHandle ProcHnd
27
End Function

Button für Telnet
1
Private Sub CommandButton1_Click()
2
     'FTP via Shell ausführen:
3
    ShellX "telnet 199.199.199.199"       
4
End Sub

Die Telnet Session zu der IP Adresse wird gestartet und das CMD Fenster 
öffnet sich. Wie übergebe ich jetzt weitere Kommandos an das Fenster?

von Klaus W. (mfgkw)


Lesenswert?

Telnet ist
1. Ein Netzwerkprotokoll
2. ein Programm, das (1.) implementiert, indem es den Benutzer
   etwas eintippen lässt, das per Telnetprotokoll an einen Server
   schickt und dessen Antworten wieder dem Benutzer anzeigt

Wenn du das Programm telnet startest, um dann per Programm
etwas darüber zu senden, erscheint mir das wenig sinnvoll.

Kann es sein, daß du besser bedient wärst, das Protokoll
telnet zu verwenden, um von deinem Programm aus etwas
an den Server zu schicken, anstatt das Programm telnet zu
starten?

von Klaus W. (mfgkw)


Lesenswert?

PS:
In deinem Quelltext wird nebnbei auch von FTP fabuliert.
Das ist wiederum ein anderes Netzwerkprotokoll. Du wirst
dich schon entscheiden müssen, was du eigentlich willst.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Gibt es für VB keine fertige Telnet-Client-Klasse?

Ich kenne das von Python, da wird so etwas schon in den Standardbiblio-
theken mitgeliefert. Die Anwendung ist denkbar leicht: Einfach ein
Telnet-Objekt instanziieren und mit read(), read_until(), read_all() und
write() Daten hin und her schicken.

Die Kommunikation mit einem externen Prozess, wie du es vor hast, ist
wahrscheinlich deutlich komplizierter.

von Thorben (Gast)


Lesenswert?

Hab es ein bisschen anders getestet, aber klappt nicht wirklich.
1
Private Sub CommandButton1_Click()
2
Dim TaskID As Long
3
4
TaskID = Shell("c:\windows\system32\telnet 199.199.199.199", vbNormalNoFocus)
5
'TaskID = Shell("c:\windows\system32\notepad.exe", vbNormalNoFocus)
6
' Windows-Editor anhand TaskID aktivieren
7
AppActivate TaskID
8
' Windows-Editor schließen
9
SendKeys "uzibuzi 1", True
10
SendKeys "{ENTER}"
11
End Sub

Er bleibt beim AppActive TaskID hängen, aber mit der rauskommentierten 
Zeile mit Notepad funktioniert alles.

Jemand eine Idee?

von Peter (Gast)


Lesenswert?

Thorben schrieb:
> Hab es ein bisschen anders getestet, aber klappt nicht wirklich.


wie schon oben geschriben wurde, das ganze ist unsinn. Baue selber eine 
TCP verbindung mit der IP auf und gut ist.

Bei windows7 ist keine Telnet client mehr dabei (kann aber 
nachinstalliert werden) - was willst du da machen?

von Thorben (Gast)


Lesenswert?

>wie schon oben geschriben wurde, das ganze ist unsinn. Baue selber eine
>TCP verbindung mit der IP auf und gut ist.

Wenn ich das Telnet Fenster mit Focus oeffne klappt es.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.