Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

envoyer la commande CTRL+BREAK en VB6

5 réponses
Avatar
Obiwan
Bonjour;

Je développe une application gérant un routeur CISCO en sériel (port COM).

Pour la gestion des données en input, je n'ai pas de problème. Par contre,
je ne trouve pas comment faire pour envoyer la commande CTRL+BREAK, commande
qui permet de rompre le processus de démarrage du routeur et ainsi reprendre
la main sur celui-ci avant qu'il ne charge sa configuration de démarrage. La
commande CTRL+BREAK doit être envoyée dans les (max) 60' de la mise sous
tension du routeur.
(Je précise que cette commande est celle utilisée depuis Hyperterminal sous
Windows et que ce n'est pas forcément toujours cette commande qui est
requise (pour Teraterm, c'est la combinaison ALT+BREAK qui est valable)


J'ai essayé d'envoyer cette commande par l'instruction sendkeys "^{break}"
mais cette instruction n'est pas faisable dans l'instruction mscomm.output
(Ctl MS Comm Control). J'ai éssayé également d'envoyer un string reprenant
les deux codes ascii de cette combinaison mais rien n'y fait.

Donc en résumé, je me pose deux questions:
1. Comment faire pour que mon application ressemble le plus fidèlement
possible à Hyperterminal (du moins au point de vue gestion de mon textbox -
ce qui me permettrait réellement d'utiliser cette commande CTRL+BREAK)
2 Comment envoyer cette commande dans le mscomm.output afin de faire réagir
le routeur..

Il y aurait t-il qlq qui aurait éventuellement effectué ce genre de
développement ou qlq pourraist-il m'aiguillier sur une solution possible.

Merci d'avance pour toutes aide(s) apportée(s) à ce problème

5 réponses

Avatar
Jean-marc
Obiwan wrote:
Bonjour;

Je développe une application gérant un routeur CISCO en sériel (port
COM).
Pour la gestion des données en input, je n'ai pas de problème. Par
contre, je ne trouve pas comment faire pour envoyer la commande
CTRL+BREAK, commande qui permet de rompre le processus de démarrage
du routeur et ainsi reprendre la main sur celui-ci avant qu'il ne
charge sa configuration de démarrage. La commande CTRL+BREAK doit
être envoyée dans les (max) 60' de la mise sous tension du routeur.
(Je précise que cette commande est celle utilisée depuis
Hyperterminal sous Windows et que ce n'est pas forcément toujours
cette commande qui est requise (pour Teraterm, c'est la combinaison
ALT+BREAK qui est valable)

J'ai essayé d'envoyer cette commande par l'instruction sendkeys
"^{break}" mais cette instruction n'est pas faisable dans
l'instruction mscomm.output (Ctl MS Comm Control). J'ai éssayé
également d'envoyer un string reprenant les deux codes ascii de cette
combinaison mais rien n'y fait.



Hello,

Quel était ta séquence de codes ASCII ?

J'ai fait un petit programme qui récupère ce qu'envoie hyper terminal
quand on fait Ctrl-Break, il envoie les 2 caractères dont les codes ascii
sont:
255
243


Si tu fais un truc comme ça:

Dim s as string
s = chr$(255) & chr$(243)

MsComm1.Output = s

ou éventuellement :
MsComm1.Output = s & vbCrLf

A mon avis, ça doit marcher.

--
Ci joint, le petit programme pour logguer hyper terminal:
Il faut:
1 text box multiline = true
2 sockets
1 command bouton.

Pour Winsock1, local port = 23

Puis ce code:

' 8<------------------------------------------------------
Option Explicit

Private Sub Command1_Click()

Winsock1.Listen
End Sub

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Winsock2.Accept requestID
End Sub

Private Sub Winsock2_DataArrival(ByVal bytesTotal As Long)
Dim s As String
Dim i As Long

Winsock2.GetData s

For i = 1 To Len(s)
Text1.Text = Asc(Mid$(s, i, 1)) & vbCrLf & Text1.Text
Next i
End Sub

' 8<------------------------------------------------------

Et voila.

pour utiliser, cliquer Sur Command1 (met en listen)
puis connecter avec hyper term sur TCP/IP, port 23
et c'est tout.

Hope this helps;

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
Obiwan
Hello J-M;

Effectivement, les caractères 255 et 243 sont respectivement un IAC
(interpreteur de commande) et un break qui sont générés dans un terminal
virtuel réseau (NVT). La RFC 584 (TELNET) les décrits.

Je n'y avais pas pensé mais en lisant ta suggestion, je m'en suis rappelé
directement.

Je vais essayer cela ce WE et je te dirai le résultat. En principe, cela
devrait fonctionner :-)

Dans mon développement, je m'étais orienté vers l'instruction sendkeys de
VB6 mais, au lu des nombreuses remarques sur cette instruction, je n'aurais
pas pu avoir satisfaction dans cette voie.

Voilà, d'avance, je te remercie pour m'avoir rafraichi ma mémoire

Cordialement

Obiwan


"Jean-marc" a écrit dans le message
de news: 4741e8c8$0$29259$
Obiwan wrote:
Bonjour;

Je développe une application gérant un routeur CISCO en sériel (port
COM).
Pour la gestion des données en input, je n'ai pas de problème. Par
contre, je ne trouve pas comment faire pour envoyer la commande
CTRL+BREAK, commande qui permet de rompre le processus de démarrage
du routeur et ainsi reprendre la main sur celui-ci avant qu'il ne
charge sa configuration de démarrage. La commande CTRL+BREAK doit
être envoyée dans les (max) 60' de la mise sous tension du routeur.
(Je précise que cette commande est celle utilisée depuis
Hyperterminal sous Windows et que ce n'est pas forcément toujours
cette commande qui est requise (pour Teraterm, c'est la combinaison
ALT+BREAK qui est valable)

J'ai essayé d'envoyer cette commande par l'instruction sendkeys
"^{break}" mais cette instruction n'est pas faisable dans
l'instruction mscomm.output (Ctl MS Comm Control). J'ai éssayé
également d'envoyer un string reprenant les deux codes ascii de cette
combinaison mais rien n'y fait.



Hello,

Quel était ta séquence de codes ASCII ?

J'ai fait un petit programme qui récupère ce qu'envoie hyper terminal
quand on fait Ctrl-Break, il envoie les 2 caractères dont les codes ascii
sont:
255
243


Si tu fais un truc comme ça:

Dim s as string
s = chr$(255) & chr$(243)

MsComm1.Output = s

ou éventuellement :
MsComm1.Output = s & vbCrLf

A mon avis, ça doit marcher.

--
Ci joint, le petit programme pour logguer hyper terminal:
Il faut:
1 text box multiline = true
2 sockets
1 command bouton.

Pour Winsock1, local port = 23

Puis ce code:

' 8<------------------------------------------------------
Option Explicit

Private Sub Command1_Click()

Winsock1.Listen
End Sub

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Winsock2.Accept requestID
End Sub

Private Sub Winsock2_DataArrival(ByVal bytesTotal As Long)
Dim s As String
Dim i As Long

Winsock2.GetData s

For i = 1 To Len(s)
Text1.Text = Asc(Mid$(s, i, 1)) & vbCrLf & Text1.Text
Next i
End Sub

' 8<------------------------------------------------------

Et voila.

pour utiliser, cliquer Sur Command1 (met en listen)
puis connecter avec hyper term sur TCP/IP, port 23
et c'est tout.

Hope this helps;

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;






Avatar
Jean-marc
Obiwan wrote:
Hello J-M;

Effectivement, les caractères 255 et 243 sont respectivement un IAC
(interpreteur de commande) et un break qui sont générés dans un
terminal virtuel réseau (NVT). La RFC 584 (TELNET) les décrits.

Je n'y avais pas pensé mais en lisant ta suggestion, je m'en suis
rappelé directement.

Je vais essayer cela ce WE et je te dirai le résultat. En principe,
cela devrait fonctionner :-)

Dans mon développement, je m'étais orienté vers l'instruction
sendkeys de VB6 mais, au lu des nombreuses remarques sur cette
instruction, je n'aurais pas pu avoir satisfaction dans cette voie.

Voilà, d'avance, je te remercie pour m'avoir rafraichi ma mémoire

Cordialement



Hello,

J'espère que cela fonctionnera, ça devrait en tout cas !

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
Obiwan
Re hello J-M;

Cet après-midi, j'ai appliqué ton conseil mais cela n'a pas fonctionné. Je
n'avais toujours pas d'interruption du processus lors de l'envoi de cette
séquence dans MsComm1.output

Après avoir approfondi le contrôle MS Comm, j'ai tout simplement injecté
l'instruction Mscomm1.break=true dans le "Command1_click" d'un bouton, et çà
génère le fameux break tant attendu par le routeur :-) Ensuite, je le remets
à false lorsque c'est nécessaire et je poursuis l'exécution de code.

Voilà, j'ai trouvé la solution à mon problème. Il ne me reste plus qu'à
générer le code pour lire un fichier de configuration dit de maintenance et
l'injecter dans le routeur et mon applicaiton est terminée.

En tout cas, merci beaucoup de m'avoir aider sur ce problème

Cordialement

Obiwan



"Jean-marc" a écrit dans le message
de news: 4745d0e3$0$22313$
Obiwan wrote:
Hello J-M;

Effectivement, les caractères 255 et 243 sont respectivement un IAC
(interpreteur de commande) et un break qui sont générés dans un
terminal virtuel réseau (NVT). La RFC 584 (TELNET) les décrits.

Je n'y avais pas pensé mais en lisant ta suggestion, je m'en suis
rappelé directement.

Je vais essayer cela ce WE et je te dirai le résultat. En principe,
cela devrait fonctionner :-)

Dans mon développement, je m'étais orienté vers l'instruction
sendkeys de VB6 mais, au lu des nombreuses remarques sur cette
instruction, je n'aurais pas pu avoir satisfaction dans cette voie.

Voilà, d'avance, je te remercie pour m'avoir rafraichi ma mémoire

Cordialement



Hello,

J'espère que cela fonctionnera, ça devrait en tout cas !

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;






Avatar
Jean-marc
Obiwan wrote:
Re hello J-M;

Cet après-midi, j'ai appliqué ton conseil mais cela n'a pas
fonctionné. Je n'avais toujours pas d'interruption du processus lors
de l'envoi de cette séquence dans MsComm1.output

Après avoir approfondi le contrôle MS Comm, j'ai tout simplement
injecté l'instruction Mscomm1.break=true dans le "Command1_click"
d'un bouton, et çà génère le fameux break tant attendu par le routeur
:-) Ensuite, je le remets à false lorsque c'est nécessaire et je
poursuis l'exécution de code.
Voilà, j'ai trouvé la solution à mon problème. Il ne me reste plus
qu'à générer le code pour lire un fichier de configuration dit de
maintenance et l'injecter dans le routeur et mon applicaiton est
terminée.
En tout cas, merci beaucoup de m'avoir aider sur ce problème



Hello,

merci à toi pour le retour, c'est bon à savoir :-)

Cordialement;

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;