Est-il possible avec Windows XP (et windows serveur 2003) de déterminier
l'adresses IP, les masques de sous réseau, les adresses des serveur WINS,
DHCP, etc ?
Ensuite est-il possible de renouveler l'adresse IP de l'ordinateur (genre
"ipconfig /renew") et de récuperer les changements ?
Pour finir, est-il possible de voir tous les PC que le PC voit sur le réseau
et de savoir si il a accès à ces PC ?
Remarque : on m'a déja donné une macro qui identifie les PC sur le réseau
mais elle ne marche pas sur windows XP
Milles excuses, j'ai oublié le command.com! La raison en est fort simple, 99,99% du temps, quand on appelle une fonction dos, on a besoin du résultat immédiatement, on doit donc bloquer l'exec du code le temps que le process dos se finisse. C'est ma proc Shellsynchrone dans le module public. Le reste n'est que du standard. Notes que cmd.exe est plus adapté que command.com si tu est sous nt/xp. On reste de cette manière en 32 bits. Attention aux grandes lignes qui risquent d'être coupées en 2.
Mettre dans un module standard
--- couper ici --- Option Explicit
' --- API --- Public Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long) Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long Public Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long Public Const PROCESS_QUERY_INFORMATION = &H400 Public Const STILL_ACTIVE = &H103
Public Function ShellSynchrone(Commande As String) As Long Dim hProg As Long, hProcess As Long, ExitCode As Long hProg = Shell("cmd.exe /C " & Commande, 0) hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, hProg) Do GetExitCodeProcess hProcess, ExitCode DoEvents Sleep 1 Loop While ExitCode = STILL_ACTIVE ShellSynchrone = ExitCode End Function
Public Function NoSpace(S As String) As String ' supprime les espaces a droite et a gauche ' d'une chaine de caracteres While S Like " *" S = Right(S, Len(S) - 1) Wend While S Like "* " S = Left(S, Len(S) - 1) Wend NoSpace=S End Function --- couper ici ---
Le code de la feuille --- couper ici --- Option Explicit
Dim DomainList() As String 'un tableau de longueur variable qui 'va contenir tous les noms de domaines
' identifier TOUS les domaines auquels j'ai accés ' net view /domain
' la sortie est un fichier de n lignes ' le nombre de domaines est de n-8 ' l'énumération commence à la lgn 4 ' ATTENTION : 2 lignes vides en fin de fichier
' À la fin de l'execution de cette procedure ' le tableau DomainList contient tous les ' noms de domaines de ton intranet Private Sub Domaines() Dim fic As Integer 'handle fichier Dim Lgn As String 'une ligne complete Dim C As Long 'un compteur ReDim DomainList(0) fic = FreeFile ShellSynchrone "net view /domain >C:domain.txt" Open "C:domain.txt" For Input As #fic While Not EOF(fic) C = C + 1 Line Input #fic, Lgn If C > 3 Then DomainList(C - 4) = NoSpace(Lgn) ReDim Preserve DomainList(C - 3) End If Wend Close #fic ReDim Preserve DomainList(C - 6) End Sub
Sub teste() Dim i As Integer Domaines For i = 0 To UBound(DomainList) Cells(i + 1, 1).Value = DomainList(i) Next i End Sub
--- couper ici ---
"Alain CROS" wrote in news::
Bonjour
Sub main() Shell Environ("Windir") & "Command.com /c dir C:>c:dir.txt" End Sub
Alain CROS
"Emcy" a écrit dans le message de news: #3J$
si je lance une de ces deux macros, j'ai le message fichier introuvable qui apparaît
Sub main() Shell "dir > c:dir.txt" End Sub
Sub main() Shell "dir" End Sub
Le problème ne vient-il pas de windows XP ?
Aec cette macro, j'ai pas le même message d'erreur : la fenetre dos s'ouvre et dedans c'est écris que la synthaxe est mauvaise
Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long) 'a mettre dans un module vb
Sub TestReseau() Temp = Shell("net name > c:temp2.txt", 1) Sleep 5000 End Sub
Milles excuses, j'ai oublié le command.com!
La raison en est fort simple, 99,99% du temps,
quand on appelle une fonction dos, on a besoin
du résultat immédiatement, on doit donc bloquer
l'exec du code le temps que le process dos
se finisse. C'est ma proc Shellsynchrone dans le
module public. Le reste n'est que du standard.
Notes que cmd.exe est plus adapté que command.com
si tu est sous nt/xp. On reste de cette manière
en 32 bits.
Attention aux grandes lignes qui risquent d'être
coupées en 2.
Mettre dans un module standard
--- couper ici ---
Option Explicit
' --- API ---
Public Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess
As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess
As Long, lpExitCode As Long) As Long
Public Const PROCESS_QUERY_INFORMATION = &H400
Public Const STILL_ACTIVE = &H103
Public Function ShellSynchrone(Commande As String) As Long
Dim hProg As Long, hProcess As Long, ExitCode As Long
hProg = Shell("cmd.exe /C " & Commande, 0)
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, hProg)
Do
GetExitCodeProcess hProcess, ExitCode
DoEvents
Sleep 1
Loop While ExitCode = STILL_ACTIVE
ShellSynchrone = ExitCode
End Function
Public Function NoSpace(S As String) As String
' supprime les espaces a droite et a gauche
' d'une chaine de caracteres
While S Like " *"
S = Right(S, Len(S) - 1)
Wend
While S Like "* "
S = Left(S, Len(S) - 1)
Wend
NoSpace=S
End Function
--- couper ici ---
Le code de la feuille
--- couper ici ---
Option Explicit
Dim DomainList() As String
'un tableau de longueur variable qui
'va contenir tous les noms de domaines
' identifier TOUS les domaines auquels j'ai accés
' net view /domain
' la sortie est un fichier de n lignes
' le nombre de domaines est de n-8
' l'énumération commence à la lgn 4
' ATTENTION : 2 lignes vides en fin de fichier
' À la fin de l'execution de cette procedure
' le tableau DomainList contient tous les
' noms de domaines de ton intranet
Private Sub Domaines()
Dim fic As Integer 'handle fichier
Dim Lgn As String 'une ligne complete
Dim C As Long 'un compteur
ReDim DomainList(0)
fic = FreeFile
ShellSynchrone "net view /domain >C:domain.txt"
Open "C:domain.txt" For Input As #fic
While Not EOF(fic)
C = C + 1
Line Input #fic, Lgn
If C > 3 Then
DomainList(C - 4) = NoSpace(Lgn)
ReDim Preserve DomainList(C - 3)
End If
Wend
Close #fic
ReDim Preserve DomainList(C - 6)
End Sub
Sub teste()
Dim i As Integer
Domaines
For i = 0 To UBound(DomainList)
Cells(i + 1, 1).Value = DomainList(i)
Next i
End Sub
--- couper ici ---
"Alain CROS" <Personne@ICI> wrote in
news:uikV8CYHEHA.3656@tk2msftngp13.phx.gbl:
Bonjour
Sub main()
Shell Environ("Windir") & "Command.com /c dir C:>c:dir.txt"
End Sub
Alain CROS
"Emcy" <ten.etsop@ycme.ycme> a écrit dans le message de news:
#3J$rQTHEHA.2556@TK2MSFTNGP12.phx.gbl...
si je lance une de ces deux macros, j'ai le message fichier
introuvable qui apparaît
Sub main()
Shell "dir > c:dir.txt"
End Sub
Sub main()
Shell "dir"
End Sub
Le problème ne vient-il pas de windows XP ?
Aec cette macro, j'ai pas le même message d'erreur : la fenetre dos
s'ouvre et dedans c'est écris que la synthaxe est mauvaise
Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
'a mettre dans un module vb
Sub TestReseau()
Temp = Shell("net name > c:temp2.txt", 1)
Sleep 5000
End Sub
Milles excuses, j'ai oublié le command.com! La raison en est fort simple, 99,99% du temps, quand on appelle une fonction dos, on a besoin du résultat immédiatement, on doit donc bloquer l'exec du code le temps que le process dos se finisse. C'est ma proc Shellsynchrone dans le module public. Le reste n'est que du standard. Notes que cmd.exe est plus adapté que command.com si tu est sous nt/xp. On reste de cette manière en 32 bits. Attention aux grandes lignes qui risquent d'être coupées en 2.
Mettre dans un module standard
--- couper ici --- Option Explicit
' --- API --- Public Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long) Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long Public Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long Public Const PROCESS_QUERY_INFORMATION = &H400 Public Const STILL_ACTIVE = &H103
Public Function ShellSynchrone(Commande As String) As Long Dim hProg As Long, hProcess As Long, ExitCode As Long hProg = Shell("cmd.exe /C " & Commande, 0) hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, hProg) Do GetExitCodeProcess hProcess, ExitCode DoEvents Sleep 1 Loop While ExitCode = STILL_ACTIVE ShellSynchrone = ExitCode End Function
Public Function NoSpace(S As String) As String ' supprime les espaces a droite et a gauche ' d'une chaine de caracteres While S Like " *" S = Right(S, Len(S) - 1) Wend While S Like "* " S = Left(S, Len(S) - 1) Wend NoSpace=S End Function --- couper ici ---
Le code de la feuille --- couper ici --- Option Explicit
Dim DomainList() As String 'un tableau de longueur variable qui 'va contenir tous les noms de domaines
' identifier TOUS les domaines auquels j'ai accés ' net view /domain
' la sortie est un fichier de n lignes ' le nombre de domaines est de n-8 ' l'énumération commence à la lgn 4 ' ATTENTION : 2 lignes vides en fin de fichier
' À la fin de l'execution de cette procedure ' le tableau DomainList contient tous les ' noms de domaines de ton intranet Private Sub Domaines() Dim fic As Integer 'handle fichier Dim Lgn As String 'une ligne complete Dim C As Long 'un compteur ReDim DomainList(0) fic = FreeFile ShellSynchrone "net view /domain >C:domain.txt" Open "C:domain.txt" For Input As #fic While Not EOF(fic) C = C + 1 Line Input #fic, Lgn If C > 3 Then DomainList(C - 4) = NoSpace(Lgn) ReDim Preserve DomainList(C - 3) End If Wend Close #fic ReDim Preserve DomainList(C - 6) End Sub
Sub teste() Dim i As Integer Domaines For i = 0 To UBound(DomainList) Cells(i + 1, 1).Value = DomainList(i) Next i End Sub
--- couper ici ---
"Alain CROS" wrote in news::
Bonjour
Sub main() Shell Environ("Windir") & "Command.com /c dir C:>c:dir.txt" End Sub
Alain CROS
"Emcy" a écrit dans le message de news: #3J$
si je lance une de ces deux macros, j'ai le message fichier introuvable qui apparaît
Sub main() Shell "dir > c:dir.txt" End Sub
Sub main() Shell "dir" End Sub
Le problème ne vient-il pas de windows XP ?
Aec cette macro, j'ai pas le même message d'erreur : la fenetre dos s'ouvre et dedans c'est écris que la synthaxe est mauvaise
Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long) 'a mettre dans un module vb
Sub TestReseau() Temp = Shell("net name > c:temp2.txt", 1) Sleep 5000 End Sub