Salut

je cherche comme le titre l'indique a synchroniser la sortie d'un processus dans une RichTextBox ( si la solution est bien cela ^^ )

Pour tenter de faire clair et simple :

j'ai une form1 avec :
- 1 RichTexBox
- 1 button
- 1 TextBox

Le Button de ma Form1 fait appel à un module qui à pour but de lancer le Processus CMD.exe avec les arguments inscrit dans ma Textbox .

je ne sais pas si c'est la bonne solution mais :
ce que j'aimerai c'est synchroniser le résultat dans ma RichTextBox sans perdre le processus afin de pouvoir lui repasser des argument a partir du résultat obtenu.

donc en gros utiliser mon interface VB.Net de la même manière que si j'était dans ma console CMD.exe.

Et là beaucoup se demanderont bien le pourquoi du comment hé bah mon but serai par la suite de pouvoir simplement administrer un script Python avec mon interface VB.Net.

Je ne sais pas si je suis sur la bonne piste mais j'ai chercher du côté de :
https://msdn.microsoft.com/en-us/lib...v=vs.110).aspx
je ne sais pas si j'ai utiliser la bonne manière mais mes test non pas été concluant car j'ai pas réussis à obtenir quoique ce soit dans ma RichTextBox ^^.

Mon code actuel est :
La Form1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
Public Class Form1
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
 
    End Sub
 
    Private Sub RichTextBox1_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox1.TextChanged
 
    End Sub
 
        Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
 
    End Sub
 
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        TextBox1.Text.RunCMD(WaitForProcessComplete:=True)
    End Sub
 
    Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
 
    End Sub
End Class
Mon module "Extension"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
Imports System.Runtime.CompilerServices
''' <summary>
''' INFO FORM1
''' DANS LE "Private Sub Button1_Click" TextBox1.Text.RunCMD(WaitForProcessComplete:=True)
''' </summary>
Public Module Extensions
    ''' <summary>
    ''' Extension method to run string as CMD command.
    ''' </summary>
    ''' <param name="command">[String] Command to run.</param>
    ''' <param name="ShowWindow">[Boolean](Default:False) Option to show CMD window.</param>
    ''' <param name="WaitForProcessComplete">[Boolean](Default:False) Option to wait for CMD process to complete before exiting sub.</param>
    ''' <param name="permanent">[Boolean](Default:False) Option to keep window visible after command has finished. Ignored if ShowWindow is False.</param>
    <Extension>
    Public Sub RunCMD(command As String, Optional ShowWindow As Boolean = False, Optional WaitForProcessComplete As Boolean = False, Optional permanent As Boolean = False)
        Dim p As Process = New Process()
        Dim pi As ProcessStartInfo = New ProcessStartInfo()
        pi.Arguments = " " + If(ShowWindow AndAlso permanent, "/K", "/C") + " " + command
        pi.FileName = "cmd.exe"
 
        pi.CreateNoWindow = Not ShowWindow
        If ShowWindow Then
            pi.WindowStyle = ProcessWindowStyle.Normal
        Else
            pi.WindowStyle = ProcessWindowStyle.Hidden
        End If
 
        'Debug / test
        If Form1.CheckBox1.Checked Then
            pi.WindowStyle = ProcessWindowStyle.Normal
            'pi.Arguments = " " + If(ShowWindow AndAlso permanent, "/K", "/C") + " " + command + " " + "&" + "pause"
            'pi.Arguments = " " + "/K" + " " + command 
        End If
        '
 
        p.StartInfo = pi
        p.Start()
 
        If WaitForProcessComplete Then Do Until p.HasExited : Loop
        ' Debug 
        MessageBox.Show("parametre : " + pi.Arguments, "cmd : " + command)
        '
    End Sub
End Module
Voilà en espérant avoir été clair sur ma demande et espérant obtenir un peu de piste afin que je puisse continuer sur mon projet

Pour info même si cela n'interfère pas avec ma demande, c'est uniquement pour les retissant qui ce demande bien ce que j'aimerai faire avec l'idée de reproduire une console msDOS dans une interface VB, voici en faite mon code python que je souhaite administrer

info le code Python ci-dessous est fonctionnel donc c'est cadeau ^^ ( nécessite seulement de spécifier son APIKEY entre les '' à la ligne -> 30. ' -- ICI SPECIFIER LE APIKEY -- ' )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
 
# coding: utf8
#!/python2.7
################################################################################################################
# La Pub :
# Facebook-> 
# Youtube -> 
# Le site -> 
 
# Les sources :
# original source "Adam Meyers ~ CrowdStrike" additional source "Chris Clark ~ GD Fidelis CyberSecurity"
 
				# \*******************************************************************/
				# \*   Modification - Personnalisation 2017 : Zitoune-@nticip-WIN32                          */
				# \*        VirusTotalAPI By Zitoune-@nticip-WIN32 Version 2.0	 	                    */
				# \* 					   Licence MIT- "Expat"		   			            */
				# \*******************************************************************/
 
#	Liens utiles :
#	info comment obtenir son APIKEY -> https://www.virustotal.com/fr/documentation/public-api/
#	info concernant la licence -> https://fr.wikipedia.org/wiki/Licence_MIT#
################################################################################################################
from __future__ import unicode_literals
import requests
import json, urllib, urllib2, argparse, hashlib, re, sys
from pprint import pprint
 
class VirusTotalAPI():
    def __init__(self):
        self.api = ' -- ICI SPECIFIER LE APIKEY -- '
        self.base = 'https://www.virustotal.com/vtapi/v2/'
 
#SCAN
 
    def getReport(self,md5):
        param = {'resource':md5,'apikey':self.api}
        url = self.base + "file/report"
        data = urllib.urlencode(param)
        result = urllib2.urlopen(url,data)
        jdata =  json.loads(result.read())
        return jdata
 
#UPLOAD
 
    def upload(self,files):
        url = self.base + "file/scan"
        params = {'apikey':self.api}
        files = {'file': (files, open(files, 'rb'))}
        response = requests.post(url, files=files, params=params)
        f = open("ScanID.log", "w")
        f.write(str(response.json()))
        f.close
        print ""
        print "\n\tLe fichier Log a ete generer : -- ScanID.log --"
        print ""
        print "\n\tLe fichier est actuellement en trein d'etre analyser sur VirusTotal ..."
        print "\n\tpatienter +- 30 secondes avant d'utiliser l'option -s /v /L"
        print ""
        print response.json()
 
#HASH MD5
 
def checkMD5(checkval):
  if re.match(r"([a-fA-F\d]{32})", checkval) == None:
    md5 = md5sum(checkval)
    return md5.upper()
  else: 
    return checkval.upper()
 
def md5sum(filename):
  fh = open(filename, 'rb')
  m = hashlib.md5()
  while True:
      data = fh.read(8192)
      if not data:
          break
      m.update(data)
  return m.hexdigest()
 
#AFFICHAGE CONTRENDU
 
def parse(it, md5, verbose, jsondump):
  if it['response_code'] == 0:
    print ""
    print "\n\tLe Hash :" + md5 + " -- n'est pas repertorier sur VirusTotal --"
    print""
    return 0
  print "\n\tResultats du MD5: ",it['md5'],"\n\n\Detection par: ",it['positives'],'/',it['total'],'\n'
  if 'BitDefender' in it['scans']:
    print '\tBitDefender Detection:',it['scans']['BitDefender']['result'],'\n'
  if 'Kaspersky' in it['scans']:
    print '\tKaspersky Detection:',it['scans']['Kaspersky']['result'], '\n'
  if 'ESET-NOD32' in it['scans']:
    print '\tESET Detection:',it['scans']['ESET-NOD32']['result'],'\n'
 
  print '\tScanner le:',it['scan_date']
 
  if jsondump == True:
    jsondumpfile = open("ScanID" + md5 + ".log", "w")
    pprint(it, jsondumpfile)
    jsondumpfile.close()
    print "\n\tLe fichier Log a ete generer -- " + "ScanID" + md5 + ".log"
    print "utiliser l'option -d si vous souhaitez envoyer le fichier sur VirusTotal"
 
  if verbose == True:
    print '\n\tDetails des rapports de VirusTotal :\n'
    for x in it['scans']:
     print '\t', x,'\t' if len(x) < 7 else '','\t' if len(x) < 14 else '','\t',it['scans'][x]['detected'], '\t',it['scans'][x]['result']
 
#MENU
 
def main():
  opt=argparse.ArgumentParser(description="Scanner de HASH et de fichier sur VirusTotal By Zitoune-@nticip-WIN32")
  opt.add_argument("HashorPath", help="Enter un hash MD5/SHA1/256 ou le nom de votre fichier")
  opt.add_argument("-s", "--search", action="store_true", help="Rechercher sur VirusTotal")
  opt.add_argument("-v", "--verbose", action="store_true", dest="verbose", help="Activer les details des rapports de VirusTotal")
  opt.add_argument("-L", "--jsondump", action="store_true",help="Generer un fichier log (ScanIDXXX.log)")
  opt.add_argument("-d", "--upload", action="store_true", help="Scanner un fichier sur VirusTotal")
  if len(sys.argv)<=2:
    opt.print_help()
    sys.exit(1)
  options= opt.parse_args()
  ScanID=VirusTotalAPI()
  md5 = checkMD5(options.HashorPath)
  files = (options.HashorPath)
  if options.search or options.jsondump or options.verbose:
    parse(ScanID.getReport(md5), md5 ,options.verbose, options.jsondump)
  if options.upload:
    ScanID.upload(files)
 
if __name__ == '__main__':
    main()
Merci D'avoir pris le temps de me lire et de se pencher sur le sujet