Je suis en train d'écrire un VBScript pour mettre à jour une interface
Access à une de données SQL 2000. Voici pour l'anecdote !
Je voudrais copier sur le disque local la version à jour de cette interface,
à laquelle j'ai donné un « titre d'application », MonTitre, en m'assurant au
préalable qu'elle n'est pas en cours d'utilisation sur le PC.
J'ai constaté, avec Process Explorer de SysInternals, qu'en cas d'
utilisation d'icelle j'avais un
- Process : MSACCESS.EXE
- Window Title : MonTitre
D'où ma question : comment obtenir la liste des « Process » avec les «
Window Title » ?
Je ne peux pas en effet me contenter de regarder si l'utilisateur utilise
Access (il peut l'utiliser pour autre chose).
Bien que m'inspirant du ProcessPath.vbs de JCB et de la page consacrée au
win32_process du msdn, j'e n'ai pas trouvé :(
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jean
Bonjour,
Je ne pense pas qu'il y ait moyen de le faire par WMI ou autre. Il est généralement conseillé d'analyser la sortie de CDMOW.EXE: http://www.commandline.co.uk/cmdow/index.html qui permet entre autre de lister les processus avec leur id et le titre de la fenêtre (quand il existe).
Sinon, j'imaginerais bien une solution comme le script ci-dessous : http://automation.eu.tf/PID_Et_Nom_Fenetre.VBS
Le pid est récupéré en exécutant le programme à l'aide de la méthode Create de Win32_Process. Ensuite dans la fonction PID_Et_Nom_Fenetre on utilise la valeur de retour de la méthode AppActivate de Wscript.Shell une première fois avec le PID en paramètre (le paramètre essais est utilisé dans la boucle pour effectuer un certain nombre de tentative ... avec AppActivate, tout dépend du nombre de processus en cours, de la puissance de la machine, ...). AppActivate retourne True si elle a trouvé l'application. Dans ce cas elle utilise une nouvelle fois AppActivate avec le titre en paramètre. Ici on n'utilise pas le paramètre essais pour que AppActivate s'effectue dans le temps le plus court. La fonction rtourne True si tout est passé :-)
Je n'ai pas testé ni investigué beaucoup sur ce script. Il faut faire des essais en mettant le titre d'une fenêtre ouverte et exécuter le programme pour voir si il ne retourne pas true dans ce cas par exemple. Mais là ... je suis dans mes valises :O)
'---8<---PID_Et_Nom_Fenetre.VBS---Jean-JMST-Belgium--- 'Utilisation ' PID_Et_Nom_Fenetre <pid>,<chemin programme>,<essais> ' où ' <pid> est l'identificateur de processus ' <titre> est le titre de la fenêtre à tester ' <essais> est le nombre de tentive a effectuer
'~~~DEMO~~~ '!!!Modifier la ligne suivante avec un chemin existant!!! programme="D:Program FilesInternet Exploreriexplore.exe" '!!!Modifier la ligne suivante le titre de fenêtre du programme!!! titre="Google" If PID_Et_Nom_Fenetre(Executer_Process_ID(programme),titre,3) Then WScript.Echo "Pid + Fenêtre trouvés" End If '~~~DEMO~~~
Function PID_Et_Nom_Fenetre(pid,titre,essais) With CreateObject("WScript.Shell") For i=1 To essais v=.AppActivate(pid) WScript.Sleep 300 If v Then vúlse v=.AppActivate(titre) If v Then Exit For End If Next PID_Et_Nom_Fenetre=v End With End Function
Function Executer_Process_ID(cmd) exepath=Replace(cmd,"","") Set WMI=GetObject("winmgmts:") Set WIN32_PROCESS=WMI.Get("Win32_Process")
If retour<>0 Then With WScript .Echo "ERREUR" .Quit End With End If
Set processus=WMI.ExecQuery(_ "Select * from Win32_Process "&_ "WHERE ExecutablePath='"&exepath&"'"_ ) For Each p in processus With p If .ProcessId=pid Then Executer_Process_ID=CInt(pid) Exit Function End If End With Next Executer_Process_IDúlse End Function
Function Entre_Guillemets(quoi) Entre_Guillemets=""""&quoi&"""" End Function '---8<---PID_Et_Nom_Fenetre.VBS---Jean-JMST-Belgium---
Amicalement,
Jean - JMST Belgium
"HervéR" a écrit dans le message de news:
Bonjour à tous,
Je suis en train d'écrire un VBScript pour mettre à jour une interface Access à une de données SQL 2000. Voici pour l'anecdote !
Je voudrais copier sur le disque local la version à jour de cette interface, à laquelle j'ai donné un « titre d'application », MonTitre, en m'assurant au préalable qu'elle n'est pas en cours d'utilisation sur le PC. J'ai constaté, avec Process Explorer de SysInternals, qu'en cas d' utilisation d'icelle j'avais un - Process : MSACCESS.EXE - Window Title : MonTitre
D'où ma question : comment obtenir la liste des « Process » avec les « Window Title » ? Je ne peux pas en effet me contenter de regarder si l'utilisateur utilise Access (il peut l'utiliser pour autre chose). Bien que m'inspirant du ProcessPath.vbs de JCB et de la page consacrée au win32_process du msdn, j'e n'ai pas trouvé :(
Merci d'avance...
Bonjour,
Je ne pense pas qu'il y ait moyen de le faire par WMI ou autre.
Il est généralement conseillé d'analyser la sortie de CDMOW.EXE:
http://www.commandline.co.uk/cmdow/index.html
qui permet entre autre de lister les processus avec leur id et le titre de la fenêtre (quand il existe).
Sinon, j'imaginerais bien une solution comme le script ci-dessous :
http://automation.eu.tf/PID_Et_Nom_Fenetre.VBS
Le pid est récupéré en exécutant le programme à l'aide de la méthode Create de Win32_Process.
Ensuite dans la fonction PID_Et_Nom_Fenetre on utilise la valeur de retour de la méthode AppActivate de Wscript.Shell une première
fois avec le PID en paramètre (le paramètre essais est utilisé dans la boucle pour effectuer un certain nombre de tentative ... avec
AppActivate, tout dépend du nombre de processus en cours, de la puissance de la machine, ...).
AppActivate retourne True si elle a trouvé l'application.
Dans ce cas elle utilise une nouvelle fois AppActivate avec le titre en paramètre.
Ici on n'utilise pas le paramètre essais pour que AppActivate s'effectue dans le temps le plus court.
La fonction rtourne True si tout est passé :-)
Je n'ai pas testé ni investigué beaucoup sur ce script.
Il faut faire des essais en mettant le titre d'une fenêtre ouverte et exécuter le programme pour voir si il ne retourne pas true
dans ce cas par exemple.
Mais là ... je suis dans mes valises :O)
'---8<---PID_Et_Nom_Fenetre.VBS---Jean-JMST-Belgium---
'Utilisation
' PID_Et_Nom_Fenetre <pid>,<chemin programme>,<essais>
' où
' <pid> est l'identificateur de processus
' <titre> est le titre de la fenêtre à tester
' <essais> est le nombre de tentive a effectuer
'~~~DEMO~~~
'!!!Modifier la ligne suivante avec un chemin existant!!!
programme="D:Program FilesInternet Exploreriexplore.exe"
'!!!Modifier la ligne suivante le titre de fenêtre du programme!!!
titre="Google"
If PID_Et_Nom_Fenetre(Executer_Process_ID(programme),titre,3) Then
WScript.Echo "Pid + Fenêtre trouvés"
End If
'~~~DEMO~~~
Function PID_Et_Nom_Fenetre(pid,titre,essais)
With CreateObject("WScript.Shell")
For i=1 To essais
v=.AppActivate(pid)
WScript.Sleep 300
If v Then
vúlse
v=.AppActivate(titre)
If v Then Exit For
End If
Next
PID_Et_Nom_Fenetre=v
End With
End Function
Function Executer_Process_ID(cmd)
exepath=Replace(cmd,"","\")
Set WMI=GetObject("winmgmts:")
Set WIN32_PROCESS=WMI.Get("Win32_Process")
If retour<>0 Then
With WScript
.Echo "ERREUR"
.Quit
End With
End If
Set processus=WMI.ExecQuery(_
"Select * from Win32_Process "&_
"WHERE ExecutablePath='"&exepath&"'"_
)
For Each p in processus
With p
If .ProcessId=pid Then
Executer_Process_ID=CInt(pid)
Exit Function
End If
End With
Next
Executer_Process_IDúlse
End Function
Function Entre_Guillemets(quoi)
Entre_Guillemets=""""&quoi&""""
End Function
'---8<---PID_Et_Nom_Fenetre.VBS---Jean-JMST-Belgium---
Amicalement,
Jean - JMST
Belgium
"HervéR" <hreignoux@sidexa.com> a écrit dans le message de news:eUhgVboXEHA.1888@TK2MSFTNGP10.phx.gbl...
Bonjour à tous,
Je suis en train d'écrire un VBScript pour mettre à jour une interface
Access à une de données SQL 2000. Voici pour l'anecdote !
Je voudrais copier sur le disque local la version à jour de cette interface,
à laquelle j'ai donné un « titre d'application », MonTitre, en m'assurant au
préalable qu'elle n'est pas en cours d'utilisation sur le PC.
J'ai constaté, avec Process Explorer de SysInternals, qu'en cas d'
utilisation d'icelle j'avais un
- Process : MSACCESS.EXE
- Window Title : MonTitre
D'où ma question : comment obtenir la liste des « Process » avec les «
Window Title » ?
Je ne peux pas en effet me contenter de regarder si l'utilisateur utilise
Access (il peut l'utiliser pour autre chose).
Bien que m'inspirant du ProcessPath.vbs de JCB et de la page consacrée au
win32_process du msdn, j'e n'ai pas trouvé :(
Je ne pense pas qu'il y ait moyen de le faire par WMI ou autre. Il est généralement conseillé d'analyser la sortie de CDMOW.EXE: http://www.commandline.co.uk/cmdow/index.html qui permet entre autre de lister les processus avec leur id et le titre de la fenêtre (quand il existe).
Sinon, j'imaginerais bien une solution comme le script ci-dessous : http://automation.eu.tf/PID_Et_Nom_Fenetre.VBS
Le pid est récupéré en exécutant le programme à l'aide de la méthode Create de Win32_Process. Ensuite dans la fonction PID_Et_Nom_Fenetre on utilise la valeur de retour de la méthode AppActivate de Wscript.Shell une première fois avec le PID en paramètre (le paramètre essais est utilisé dans la boucle pour effectuer un certain nombre de tentative ... avec AppActivate, tout dépend du nombre de processus en cours, de la puissance de la machine, ...). AppActivate retourne True si elle a trouvé l'application. Dans ce cas elle utilise une nouvelle fois AppActivate avec le titre en paramètre. Ici on n'utilise pas le paramètre essais pour que AppActivate s'effectue dans le temps le plus court. La fonction rtourne True si tout est passé :-)
Je n'ai pas testé ni investigué beaucoup sur ce script. Il faut faire des essais en mettant le titre d'une fenêtre ouverte et exécuter le programme pour voir si il ne retourne pas true dans ce cas par exemple. Mais là ... je suis dans mes valises :O)
'---8<---PID_Et_Nom_Fenetre.VBS---Jean-JMST-Belgium--- 'Utilisation ' PID_Et_Nom_Fenetre <pid>,<chemin programme>,<essais> ' où ' <pid> est l'identificateur de processus ' <titre> est le titre de la fenêtre à tester ' <essais> est le nombre de tentive a effectuer
'~~~DEMO~~~ '!!!Modifier la ligne suivante avec un chemin existant!!! programme="D:Program FilesInternet Exploreriexplore.exe" '!!!Modifier la ligne suivante le titre de fenêtre du programme!!! titre="Google" If PID_Et_Nom_Fenetre(Executer_Process_ID(programme),titre,3) Then WScript.Echo "Pid + Fenêtre trouvés" End If '~~~DEMO~~~
Function PID_Et_Nom_Fenetre(pid,titre,essais) With CreateObject("WScript.Shell") For i=1 To essais v=.AppActivate(pid) WScript.Sleep 300 If v Then vúlse v=.AppActivate(titre) If v Then Exit For End If Next PID_Et_Nom_Fenetre=v End With End Function
Function Executer_Process_ID(cmd) exepath=Replace(cmd,"","") Set WMI=GetObject("winmgmts:") Set WIN32_PROCESS=WMI.Get("Win32_Process")
If retour<>0 Then With WScript .Echo "ERREUR" .Quit End With End If
Set processus=WMI.ExecQuery(_ "Select * from Win32_Process "&_ "WHERE ExecutablePath='"&exepath&"'"_ ) For Each p in processus With p If .ProcessId=pid Then Executer_Process_ID=CInt(pid) Exit Function End If End With Next Executer_Process_IDúlse End Function
Function Entre_Guillemets(quoi) Entre_Guillemets=""""&quoi&"""" End Function '---8<---PID_Et_Nom_Fenetre.VBS---Jean-JMST-Belgium---
Amicalement,
Jean - JMST Belgium
"HervéR" a écrit dans le message de news:
Bonjour à tous,
Je suis en train d'écrire un VBScript pour mettre à jour une interface Access à une de données SQL 2000. Voici pour l'anecdote !
Je voudrais copier sur le disque local la version à jour de cette interface, à laquelle j'ai donné un « titre d'application », MonTitre, en m'assurant au préalable qu'elle n'est pas en cours d'utilisation sur le PC. J'ai constaté, avec Process Explorer de SysInternals, qu'en cas d' utilisation d'icelle j'avais un - Process : MSACCESS.EXE - Window Title : MonTitre
D'où ma question : comment obtenir la liste des « Process » avec les « Window Title » ? Je ne peux pas en effet me contenter de regarder si l'utilisateur utilise Access (il peut l'utiliser pour autre chose). Bien que m'inspirant du ProcessPath.vbs de JCB et de la page consacrée au win32_process du msdn, j'e n'ai pas trouvé :(
Merci d'avance...
HervéR
Merci pour ta réponse, Je vais chercher ! Bon week-end ou Bonnes vacances :-)
"Jean" <http:// a écrit dans le message de news:erCL2$
Bonjour,
Merci pour ta réponse,
Je vais chercher !
Bon week-end
ou
Bonnes vacances
:-)
"Jean" <http://courrier@jmst.be.tf> a écrit dans le message de
news:erCL2$pXEHA.1048@tk2msftngp13.phx.gbl...