Comme > sous DOS

mathieu57100 Messages postés 103 Date d'inscription jeudi 24 juin 2004 Statut Membre Dernière intervention 9 février 2006 - 15 sept. 2004 à 12:26
mrdep1978 Messages postés 402 Date d'inscription jeudi 25 novembre 2004 Statut Membre Dernière intervention 7 juin 2009 - 7 janv. 2005 à 18:21
Bonjour,

je voulais savoir si il était possible d'envoyer le résultat d'une commande DOS avec shell dans une variable.

Sous DOS, si je fais par exemple ping xxx.xxx.xxx.xxx >c:\ping.log, j'aurais le résultat du ping dans mon fochier log.

En fait ce que je voudrai faire c'est un peu ca, mais le résultat dans une variable vb6.

merci d'avance pour vos réponses.

11 réponses

cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 2
15 sept. 2004 à 12:49
si tu y arrive avec la commande shell et le ping xxx.xxx.xxx.xxx >c:\ping.log

tu n'as qu'à lire le fichier ping.log avec vb (en vb )

:-p [mailto:cyberscorp2004@msn.com MSN] :big) [mailto:frop01@yahoo.fr YAHOO] >:)

Membre du club CodeS-SourceS
0
mathieu57100 Messages postés 103 Date d'inscription jeudi 24 juin 2004 Statut Membre Dernière intervention 9 février 2006
15 sept. 2004 à 12:58
c'est pour apprendre que je demande ca...
alors si quelqu'un sait...
0
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
15 sept. 2004 à 13:04
Option Explicit

Private Const NORMAL_PRIORITY_CLASS As Long = &H20&
Private Const STARTF_USESHOWWINDOW  As Long = &H1
Private Const STARTF_USESTDHANDLES  As Long = &H100&

Private Type SECURITY_ATTRIBUTES
    nLength                 As Long
    lpSecurityDescriptor    As Long
    bInheritHandle          As Long
End Type

Private Type STARTUPINFO
    cb                  As Long
    lpReserved          As Long
    lpDesktop           As Long
    lpTitle             As Long
    dwX                 As Long
    dwY                 As Long
    dwXSize             As Long
    dwYSize             As Long
    dwXCountChars       As Long
    dwYCountChars       As Long
    dwFillAttribute     As Long
    dwFlags             As Long
    wShowWindow         As Integer
    cbReserved2         As Integer
    lpReserved2         As Long
    hStdInput           As Long
    hStdOutput          As Long
    hStdError           As Long
End Type
      
Private Type PROCESS_INFORMATION
    hProcess            As Long
    hThread             As Long
    dwProcessId         As Long
    dwThreadID          As Long
End Type

Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, 

ByVal lpBuffer As String, ByVal nNumberOfBytesToRead As Long, 

lpNumberOfBytesRead As Long, ByVal lpOverlapped As Any) As Long
Private Declare Function CreatePipe Lib "kernel32" (phReadPipe As Long, 

phWritePipe As Long, lpPipeAttributes As Any, ByVal nSize As Long) As 

Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As 

Long) As Long
Private Declare Function CreateProcessA Lib "kernel32" (ByVal 

lpApplicationName As String, ByVal lpCommandLine As String, 

lpProcessAttributes As Any, lpThreadAttributes As Any, ByVal 

bInheritHandles As Long, ByVal dwCreationFlags As Long, ByVal 

lpEnvironment As Long, ByVal lpCurrentDirectory As Long, lpStartupInfo 

As Any, lpProcessInformation As Any) As Long

Function ShellEx(ByVal PathName As String, Optional ByVal CommandLine 
As String vbNullString, Optional ByVal WindowStyle As VbAppWinStyle 

vbMinimizedFocus) As String
    Dim proc            As PROCESS_INFORMATION
    Dim sa              As SECURITY_ATTRIBUTES
    Dim start           As STARTUPINFO
    Dim sBuffer         As String * 256
    Dim hReadPipe       As Long
    Dim hWritePipe      As Long
    Dim ret             As Long
    Dim lngBytesRead    As Long
    sa.nLength = Len(sa)
    sa.bInheritHandle = True
    If (CreatePipe(hReadPipe, hWritePipe, sa, 0) = 0) Then
        MsgBox "CreatePipe failed. Error: " & Err.LastDllError
        Exit Function
    End If
    start.cb = Len(start)
    start.hStdError = hWritePipe
    start.hStdOutput = hWritePipe
    start.wShowWindow = WindowStyle
    start.dwFlags = STARTF_USESTDHANDLES Or STARTF_USESHOWWINDOW
    If (CreateProcessA(PathName, CommandLine, sa, sa, True, 

NORMAL_PRIORITY_CLASS, 0, 0, start, proc) = 0) Then
        MsgBox "CreateProcess failed. Error: " & Err.LastDllError
        Exit Function
    End If
    CloseHandle hWritePipe
    Do
        ret = ReadFile(hReadPipe, sBuffer, 256, lngBytesRead, 0&)
        ShellEx = ShellEx & Left$(sBuffer, lngBytesRead)
    Loop While ret
    CloseHandle proc.hProcess
    CloseHandle proc.hThread
    CloseHandle hReadPipe
End Function

Private Sub Command1_Click()
    MsgBox ShellEx("c:\windows\system32\netstat.exe")
End Sub


@+

E.B.
0
MoiOlivier Messages postés 172 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 4 août 2005
15 sept. 2004 à 13:11
Ben voyons...

>mathieu57100
On se demanderait bien pourquoi tu n'y as pas pensé plus tôt !
Distrait va !

Hihi...

Merci EB.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mathieu57100 Messages postés 103 Date d'inscription jeudi 24 juin 2004 Statut Membre Dernière intervention 9 février 2006
15 sept. 2004 à 13:16
merci pour la réponse EBArtSoft....
j'ai dit que je voulais apprendre, mais j'ai oublié de dire que j'étais débutant... c'est ma faute.

y a pa s une solution plus simple?
sous DOS, un truc equivalent tient sur une ligne...
0
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
15 sept. 2004 à 13:22
Avec cent balles et un mars ;) ? lol

@+

E.B.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 sept. 2004 à 13:25
Ou tu ecris via un Pipe, ou tu ecris dans un fichier que tu lis par la suite.

Au fait, tu fais encore beaucoup de choses, sous Dos ?

Amusez-vous ! ;)
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS
0
mathieu57100 Messages postés 103 Date d'inscription jeudi 24 juin 2004 Statut Membre Dernière intervention 9 février 2006
15 sept. 2004 à 13:33
je sais pas ce que sais q'un pipe sous vb6
0
mathieu57100 Messages postés 103 Date d'inscription jeudi 24 juin 2004 Statut Membre Dernière intervention 9 février 2006
15 sept. 2004 à 14:13
ok pour le pipe, j'ai vu ce que c'est...
je part en quete d'un ptit tuto...
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 sept. 2004 à 14:35
EB t'en a donné un exemple tout prêt ;-)

(nota, ce n'est pas spécifique à VB6.... au contraire, dirais-je même.... c'est Made In Windows)

Amusez-vous ! ;)
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS
0
mrdep1978 Messages postés 402 Date d'inscription jeudi 25 novembre 2004 Statut Membre Dernière intervention 7 juin 2009 7
7 janv. 2005 à 18:21
Ce code fonctionne nickel mais dans mon cas, le retour n'est pas celui que j'attends (forcément :( )
Je fais un :

Dim ls_ret as String
ls_ret = ShellEx("toto.cmd")

Dans mon toto.cmd (je simplifie), j'ai

ECHO TOTO
IF %ERRORLEVEL% GTR 1 EXIT 1
EXIT 0

Le script se déroule correctement mais j'obtiens ls_ret=""

Or je voudrais avoir à l'arrivée ls_ret=1 ou ls_ret=0

Pensez-vous qu'il y ait un paramètre qc dans les createprocess, createpipe (voire en DOS)... ou les retours de commandes DOS sont trop simplistes pour pouvoir gérer ça ?
0
Rejoignez-nous