Vbscript + vb.net [Résolu]

Signaler
Messages postés
44
Date d'inscription
mardi 18 juillet 2006
Statut
Membre
Dernière intervention
11 août 2009
-
Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
-
Bonjour,
je veux réaliser une application en vb.net.
dans cette application je veux afficher des résultats des fichiers écrits en vbscript.
par exemple , j'ai un fichier en vbscript qui permet de lister tous les processus:
le voilà : getprocess.vbs

strComputer = "."   ' Dot (.) equals local computer in WMI'


Set wbemServices = GetObject("winmgmts:\" & strComputer)
Set wbemObjectSet = wbemServices.InstancesOf("Win32_Process")


For Each wbemObject In wbemObjectSet
    WScript.Echo "Name:          " & wbemObject.Name      & vbCrLf & _
                 "   Handle:     " & wbemObject.Handle    & vbCrLf & _
                 "   Process ID: " & wbemObject.ProcessID
Next

donc je veux en cliquant sur un bouton de lancer l'exécution de ce fichier vbscript et d'afficher le résultat dans l'interface vb.
je ne sais pas quelles sont les commandes.
je suis débutante en vb et vbscript.
merci

27 réponses

Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
11
Une débutante ?


Bonjour, habitez-vous chez vos parents ?


De ce que je le connais, VB.NET est pas franchement indiqué pour faire
une telle opération en exploitant les fonctions de l'OS qui
permettraient de faire ça proprement.


Tu peux essayer de faire ça en balançant la sortie de ton script dans un fichier, puis en lisant le fichier avec VB.NET.


Quelque chose comme ça :



System.Diagnostics.Process.Start("CMD.exe", "/C cscript /nologo Nom.vbs>NomSortie.txt" );
Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
21
Bonsoir,
En résumant voici ce que cela donne.

---------------------------------------------------

Dim p
As

New
Process()p.StartInfo.FileName =

"cscript.exe"
p.StartInfo.Arguments =
"c:\TonScript.vbs"
p.StartInfo.UseShellExecute =
False
p.StartInfo.RedirectStandardOutput =
True
p.StartInfo.WindowStyle = ProcessWindowStyle.Minimized

p.Start()

TaTextBox.Text = p.StandardOutput.ReadToEnd()
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
11
Au fait, on peut lister les processus directement en VB.NET via :
System.Diagnostics.Process.GetProcesses
Messages postés
44
Date d'inscription
mardi 18 juillet 2006
Statut
Membre
Dernière intervention
11 août 2009

bonjour,
 j'habite chez mes parents.
le problème ce n'est pas d'utiliser vb ou vbscript .
c'est un projet de fin d'année que je dois réaliser : interface en vb.net et manipuler les applications réseaux  en vbscript (à savoir ouvrir , fermer, stopper une application...).
merci pour la réponse mais est ce que vous connaissez un site intéressant concernant vbscript ou vb.net?
merci encore pour la réponse.
nb : la photo est belle .
 a bientôt et encore merci. 
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
11
Il y a de nombreux cours et tuto sur developpez.com.


http://dotnet.developpez.com/cours/

http://vb.developpez.com/cours/

http://tahe.developpez.com/web/vbscript/


Sinon, un bouquin en papier, c'est plus chère, mais c'est très sympa aussi pour apprendre à langage.
Messages postés
44
Date d'inscription
mardi 18 juillet 2006
Statut
Membre
Dernière intervention
11 août 2009

salut
lorsque j'ai essayé votre solution a console du CMD apparît pour qques instants.
est ce que il n'y a pas un moyen pour éviter ceci  et ainsi l'utilisation du cmd serait transparente pour celui qui exécute le programme.
merci beaucoup pour les sites .
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
11
Arf.


En fait je ferait un très mauvais parti pour toi. Moi le VB.net je supporte pas. Beuark sale.


Mais je crois avoir trouvé la réponse à ta question.


Je vais t'expliquer mon raisonnement pour que tu parvienne par tio même à résoudre ce genre de problème.


Je t'ai donné une méthode qui démarre un processus. Toi tu veux le
démarré caché. Un bon point de départ pour commencer à cherhcer comment
faire est de lancer chercher dans l'horrible aude de microsoft la
fonction que je t'ai donné.


On trouve son aide ici.


Là, tu constate que cette méthode admet de nombreuses surcharges...
Beaucoup prennent des Strings. Pour demander un démarrage processus
discret, il y a peu de chance qu'il faille ajuster un String. Par
contre, l'une d'elle prend une classe ProcessStartInfo. Il y a des
chances qu'elle contienne des options de démarrage du processus, y
compris la possibilité de le démarrer caché. Cliquons sur le lien de
cette surcharge.
On tombe sur l'aide de la méthode pour cette version surchargée.


On y remarque des exmples qui peuvent nous aider à rédiger notre appel.


L'aide nous décris les paramètre, en l'occurence le seul qu'il y a : une instance de ProcessStartInfo.


Cliquons sur cette le lien vers cette classe.


On tombe ici, sur l'aide de la classe ProcessStartInfo.


On pourrait penser que l'option qui nous intéresse pourrait être sur
cette page, mais celle-ci ne semble pas vouloir détailler les
propriétés et méthodes... Il faut cliquer sur ProcessStartInfo Members
en fin de la page pour enfin avoir les membres.  


On cherche parmis les propriété une qui nous intéresse... On pourrait
penser que CreateNoWindow soit la bonne, mais il y a peu de chance : on
l'utilisera plutôt dans le cas d'une application console (Lancer le
nouveau processus dans cette console ou dans une autre)


En fait, la propriété qui nous intéresse s'appel WindowStyle. C'est
évident pour quelqu'un qui pratique le Win32, mais un peu moins qand on
débute, je te l'accorde...

Cliquons sur cette propriété.


On a quelques exemples, mais cela ne nous dis pas comment cacher une
fenêtre... Il faut pour cela savoir quelles valeurs peu prendre
l'énumération ProcessWindowStyle, car c'est le type de cette propriété.
On tombe donc finalement sur la description de cette énumération.


Et comme de part magie, hidden est un des éléments de cette énumération.


Là, je crois que tuas tout les éléments pour faire le code qui va bien,
à partir du moment ou tu as les bases en VB.NET bien sûr.
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
11
Bah zut Willi, t'avais pas vu que j'étais en train de draguer ?


Je passe pour quoi avec ta solution qui à l'air nickel...


Par contre, je crois qu'elle préfererait :

p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
21
Aie rt15 j'ai tout fait capoté.  J'en suis désolé...je me retire donc
Mais juste une précision il me semble que sur des scripts vb, il y a malgrès tout une fênetre de cscript qui s'ouvre et se masque et peut importe la valeur donnée à WindowStyle.

++ bon courage
Messages postés
44
Date d'inscription
mardi 18 juillet 2006
Statut
Membre
Dernière intervention
11 août 2009

bonsoir rt15 et Willi

vraiment je ne peux dire que merci beaucoup.
j'ai vraiment de la chance de tomber sur des génies.

ah merci Internet comme quoi on trouve tt!!!
Bon , passons aux choses sérieuses : j'ai besoin de l'aide :
je veux écrire un fichier vbscript qui permet d'arreter une application ( c'est facile peut-etre) .
seulement mon problème est que je veux qu 'à chaque fois que je clique sur le nom de l'application ( à partir de l'interface vb.net), ce fichier vbscript se lance et prend comme paramètre le nom de l'application.
(je ne veux pas écrire par exemple 20 fichiers vbscript pour arreter 20 applications (c'est trop pour moi).

A propos rt15, je suis célibataire donc si tu m'aide ......
Bonne nuit et merci.  
Messages postés
44
Date d'inscription
mardi 18 juillet 2006
Statut
Membre
Dernière intervention
11 août 2009

rebonsoir
willi j'ai essayé ta solution mais il me sorte une erreur:
après instruction qui déclare le processus Dim p...
" fin d'instruction attendu"
je ne sais pas vraiment ce que ça veut dire et j'ai même
essayé d'initialiser le processus mais en vain.
alors c'est quoi le problème!!


(rt15 surtout ne prends pas cet air, si tu te moques de moi
je me facherais ..
bon vous avez tous passez par cette phase d'apprentissage)




alors merci pour votre patience et votre aide.
a bientôt
Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
21
Ba comment ca sa fonctionne pas. Ce message vient du fait que tu as surement fait un mauvais copier coller de se que je t'ai fournit. Peux-tu donner le code de ton bouton qui se charge des scripts ?


Pour ta seconde question, à savoir lancer un script qui permet d'arreter une application. Pourquoi un script ? Tu peux le faire avec .net.
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
11
D'accord avec Willi. L'arrêt de processus se fait facilement en VB.NET,
alors pourquoi s'embêter à le faire en VBS. Surtout que c'est pas si
facile en VBS. Moi je ferais un shell de tskill... Pas beau pas beau.
Messages postés
44
Date d'inscription
mardi 18 juillet 2006
Statut
Membre
Dernière intervention
11 août 2009

salut
Willi le pb que ceci est un projet de fin d'année et ceci est imposé par notre encadreur.
il veut qu'il voit entre autre la commande ou le script que exécute Windows.
et comme tu sais ça demande de passer disons vers le bas niveau.


le projet : réaliser une interface en vb.net qui permet de gérer ttes les applications réseaux : ping, ifconfig, iexplorer....(arrêt, démarrage, blocage, rendre visible au démarrage....).


et ceci graçe au script car il veut apprendre les commandes ou les scripts Windows.
alors tu réalise maintenant mon pb.

nb : concernant ton code, j'ai trouvé mon erreur.
mais en l'exécutant la fenetre CMD  apparaît.Alors pas de solution????

merci pour votre temps et votre patience.
Messages postés
44
Date d'inscription
mardi 18 juillet 2006
Statut
Membre
Dernière intervention
11 août 2009

salut
rt15 je te remercie pour la longue explication d'hier ça m'a beaucoup aidé.
vaut mieux apprendre la méthode  plutôt que le résultat.
maintenat , j'ai oublié de veux dire que je veux apprendre le java (bon , je sais vous dites elle est folle) mais j'ai un autre projet.
bon, j'ai posé certaines questions dans le forum de java.
alors si vous avez des connaissances j'attend votre aide.
car au moins vous acceptez toutes mes bêtises.
vraiment, merci beaucoup.
A bientôt. 
Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
21
Pour la fenetre qui apparait lors de l'execution de ton vbs elle disparait aussitot donc sa peut passer....
Concernant ton autre demande sur la fermture d'application par vbs. Tu dois générer ton fichier vbs suivant le nom de ton appli à fermer. Puis après l'executer avec le bout de code que je t'ai donné.

Pour le Java j'ai des notions alors je préfère laisser la place aux experts :)
rt15 détaillera surement ma méthode sur la fermeture d'appli...
Messages postés
44
Date d'inscription
mardi 18 juillet 2006
Statut
Membre
Dernière intervention
11 août 2009

salut
 j'ai déja le code pour  arreter un processus :
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\" & strComputer & "\root\cimv2")
Set colProcessList objWMIService.ExecQuery ("Select * from Win32_Process Where Name 'Nom du processus'")

For Each objProcess in colProcessList
objProcess.Terminate()
Next

mais je veux que le nom du processus soit une variable que prend le fichier vbs en entrée.

d'accord .

a bientôt.

et merci.

 
Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
21
Ba alors y a juste à y insérer le nom de ton processus

'récupère dans une listbox tes processus qui tournent
For
Each
p
As
Process
In
Process.GetProcesses()
    TaListBox.Items.Add(p.ProcessName)

Next

Tu sélectionnes ton processus dans ta liste
Une fois sélectionné ton processus
Dim sTonProcess
As

String
= TaListBox.SelectedItem.ToString()

'On génère le fichier vbs
Dim sBase
As

New
System.Text.StringBuilder
sBase.AppendLine(
"strComputer = "".""")
sBase.AppendLine(
"objWMIService = GetObject(""winmgmts:{impersonationLevel=impersonate}!\"" & strComputer & ""\root\cimv2""")
sBase.AppendLine("colProcessList objWMIService.ExecQuery(""Select * from Win32_Process Where Name '" & sTonProcess &
"'"")"
)
sBase.AppendLine(
"For Each objProcess In colProcessList")
sBase.AppendLine(
"objProcess.Terminate()")
sBase.AppendLine(
"Next")

'Ecriture du fichier vbs
IO.File.WriteAllText(
"c:\test.vbs", sBase.ToString())

Puis te reste plus qu'à utiliser le code que je t'ai fournit pour executer un vbs

++
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
11
Il est bizarre ton examinateur.

ifconfig (Linux) s'appelle ipconfig sous Windows. Mais c'est une
commande DOS, une antiquité si on veut. Tu peux récupérer toutes les
informations qu'elles donnent via WMI. Voilà un source qui peut peut être t'aider concernant le WMI.


Pour pinger en VB (Viw WMI) :explore
Function Ping(sHostName)

   
Dim objWMIService, colPings, objStatus

   
Set objWMIService = GetObject("winmgmts:\" & "." & "\root\cimv2")

   
Set colPings = objWMIService.ExecQuery("Select * From Win32_PingStatus where
Address = '" & sHostName & "'")

   
For Each objStatus in colPings

       
If IsNull(objStatus.StatusCode) Or (objStatus.StatusCode <> 0) Then

           
Ping = 0

       
Else

           
Ping = 1

       
End If

   
Next

End Function
Messages postés
44
Date d'inscription
mardi 18 juillet 2006
Statut
Membre
Dernière intervention
11 août 2009

bonsoir

très intellignet rt15 t'as repéré le pb :
mon prof est un génie en unix et ne sais pas beaucoup de choses
concernant le Windows.
c'est pour cela qu'il a imposé ce projet avec utilisation de scripts et aussi de leurs affichages.

bon, laissons le tranquille maintenant.
j'ai voulu savoir votre avis si on vous pose la question qu'elles sont ttes les applications réseaux sous Windows qu'on doit administrer?
que répondez vous?
je dois faire un script qui affiche la liste de toutes les apllications réseaux existants(tournant ou pas ) en un PC (env windows).

Aussi je veux savoir si vous connaissez ou stocke Windows l'historique ou la trace de l'utilisation de chaque application.
j'en ai besoin pour le mettre comme information dans l'interface(et c'est aussi imposé ).
nb : concernant les codes je vais les essayer bien sûr et si je trouve des pbs(comme d'habitude) je vais vous informer.

merci mes amis .
et a bientôt.