VB-Code für den Start von Terms97801

Die roten Stellen enthalten ggf. anzupassende Pfade. Das Programm bietet über eine Auswahlliste alle Unix-Hosts mit einem SSH-Server an. Danach wird ein lokaler SSH-Tunnel aufgebaut und Terms97801 gestartet. Alle Sekunden wird geprüft ob Terms97801 noch läuft. Wenn nicht, wird der Tunnel abgebaut. Es ist möglich, mehrere Sitzungen zum gleichen Rechner zu öffnen. Im Hilfe-Frame kann jeder selbst seine Hinweise einbauen.


Option Explicit Private sshid As Integer Private hShell As Long Private hProc As Long Private lExit As Long ' Konstante für Hex-Werte zum besseren lesen Private Const PROCESS_QUERY_INFORMATION = &H400 Private Const STILL_ACTIVE = &H103 Private Declare Function OpenProcess Lib "kernel32" _ (ByVal dwDesiredAccess&, ByVal bInheritHandle&, ByVal dwProcessId&) _ As Long Private Declare Function GetExitCodeProcess Lib "kernel32" _ (ByVal hProcess As Long, lpExitCode As Long) _ As Long
Sub StartShell(sCmd As String) '** Übergebenen Commandostring ausführen hShell = Shell(Environ$("Comspec") & " /c " & sCmd, vbHide) '** Erzeugen der Prozeßinformationen, basierend auf dem Handle, '** welches von der Funktion Shell() zurückgeliefert wurde hProc = OpenProcess(PROCESS_QUERY_INFORMATION, False, hShell) ' ab hier läuft Terms, per Timer-Ereignis im 1s-Intervall prüfen, ob die ' Applikation noch läuft Timer1.Enabled = True End Sub
Private Sub cmdGo_Click() Dim port As Integer Dim start As Variant If (cmbHost.ListIndex = -1) Then MsgBox "Bitte einen Zielrechner auswählen !", vbOKOnly, "Zielrechner fehlt" Else ' Einträge müssen mit ini-Files unter c:\terms22\97801\connections ' übereinstimmen. (hostname.ini) ' Host Port ' =========================== ' host1.domain(1.teil) - 7511 ' host1.domain(1.teil) - 7512 ' port = 7511 + CInt(cmbHost.ListIndex) ' startet bei 0 lblShowState.Caption = "Starte SSH-Port-Forwarding ..." ' SSH starten, Str(port) bringt führendes Blank --> Format(port) sshid = Shell("C:\Programme\SSH Communications Security\SSH Secure Shell\Ssh2.exe_ -S -l root -L" + Format(port) + ":localhost:23 " + _ cmbHost.List(cmbHost.ListIndex), vbHide) start = Timer ' Anfangszeit setzen. Do While Timer < start + 3 ' 3s warten für ssh DoEvents Loop ' je Host eine sparate ini-Datei mit Autostart lblShowState.Caption = "Starte Terms ..." Me.Hide ' verbirgt Programm --> keine Anzeige in Taskleiste StartShell ("C:\terms22\97801\Terms97801.exe _ -i c:\terms22\97801\connections\" + _ cmbHost.List(cmbHost.ListIndex) + ".ini") End If End Sub
Private Sub cmdHelp_Click() frmAbout.Show (vbModal) End Sub
Private Sub kill_ssh() Dim start As Variant Me.Show ' Formular einblenden lblShowState.Caption = "Kille ssh (pid: " + Format(sshid) + " ) ..." ' Anfangszeit setzen und 1s warten start = Timer Do While Timer < start + 1 DoEvents Loop ' kille Prozess mit externem Programm aus NT-Resource Kit Shell "C:\ntreskit\kill.exe " + Format(sshid), vbHide lblShowState.Caption = "Beende Anwendung ..." ' Anfangszeit setzen und 1s warten start = Timer Do While Timer < start + 1 DoEvents Loop Unload Me ' Ende End End Sub
' alle 1s-Intervall aufgerufen Private Sub Timer1_Timer() ' Prozeßinformationen auswerten .... GetExitCodeProcess hProc, lExit ' ....und überprüfen, ob der Prozeß noch aktiv ist If (lExit <> STILL_ACTIVE) Then Timer1.Enabled = False ' nein kill_ssh ' kille ssh und räume auf End If End Sub