Chemin dynamique

zmaia Messages postés 5 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 25 février 2004 - 25 févr. 2004 à 14:19
cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 - 25 févr. 2004 à 18:02
Bonjour je désires ouvrir un logiciel (mmc.exe) avec un fichier associé ce qui fonctionne en écrivant cela: Call Shell("mmc.exe c:\winnt\system32\dhcpmgmt.msc", vbNormalFocus)
Bon mon problème c'est que ce fichier n'est pas tout le temps sur c:\ j'aimerai donc remplacer le chemin par une variable windows: windir=c:\winnt ou windir=d:\winnt suivant l'install
si on fait démarrer éxécuter (sous vindozs) et qu'on tape
mmc.exe %winnt%/system32/dhcpmgmt.msc ça marchouille mais ça aurait été trop facile de faire un copier coller dans Vb qui vous renvoie un beau message d'ereur
Bref une suggestion?

Merci

Le contrat de Qualif qui veut l'être à la place du Calife

7 réponses

cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
25 févr. 2004 à 14:48
Bonjour

Utilise une fonction API pour trouver le dossier Système :

' Général - Déclarations :
Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long

' Puis dans ton Sub :
Dim DossierSysteme As String, Retour As Long
DossierSysteme = Space(255)
Retour = GetSystemDirectory(DossierSysteme, 255)
DossierSysteme = Left$(DossierSysteme, Retour)

Call Shell("mmc.exe DossierSysteme & "\dhcpmgmt.msc", vbNormalFocus)
0
pcpunch Messages postés 1243 Date d'inscription mardi 7 mai 2002 Statut Membre Dernière intervention 18 février 2019 5
25 févr. 2004 à 14:54
Bon tu est mal partie , J'explique :

pour lancer un fichier utilise l'api shellexecute qui permet de lancer un fichier en utilisant son prog par defaut!!

Donc dans ton cas tu lance directement le *.msc ou même le mmc.exe avec ou sans arguement derriére!!!

Ensuite pour savoir si l'operation c'est bien passé ou pas. Utilise une variable pour recupérer la valeur de retour du ShellExecute. Si inferieur a 33 alors : Erreur Sinon c'est ouvert!!

Voila un exemple avec le fichier perfmon.msc, car je n'ai pas le fichier que tu met dans ton exemple dhcpmgmt.msc (Xp EF):

'Déclaration de l'api
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Const SW_SHOWNORMAL = 1

Private Sub Form_Load()
Dim Ret As Byte 'Variable pour verification de l'aboutissement du shell
'Lancement du fichier .msc
Ret = ShellExecute(Me.hwnd, "Open", "perfmon.msc", vbNullString, "C:", SW_SHOWNORMAL)
'en cas d'erreur ShellExecute renvoie un chiffre inferieur a 33
If Ret < 33 Then MsgBox "Impossible d'ouvrir ce fichier..."
End Sub


Voila si besoin plus de détails, Vas y !!!
0
pcpunch Messages postés 1243 Date d'inscription mardi 7 mai 2002 Statut Membre Dernière intervention 18 février 2019 5
25 févr. 2004 à 14:57
Rene38-->autant utiliser l'api ShellExecute, faut pas se compliqué la vie!!! et la en plus il aura la valeur de retour afin de gérer les erreurs!!!
0
cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
25 févr. 2004 à 15:32
pcpunch :
tout à fait d'accord pour ShellExecute
à condition que l'association
extension .msc <=> mmc.exe ait été faite ;
ça ne me semblait pas le cas :
lancement par démarrer - exécuter ...
au lieu de double clic sur le fichier .msc
(je suis sous 98SE ;je suppose que l'association
est par défaut sous XP)
0

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

Posez votre question
pcpunch Messages postés 1243 Date d'inscription mardi 7 mai 2002 Statut Membre Dernière intervention 18 février 2019 5
25 févr. 2004 à 15:33
oui xp
0
zmaia Messages postés 5 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 25 février 2004
25 févr. 2004 à 16:24
Merci de vos réponses aussi rapides!!!

J'ai testé les deux fonctions (curiosité oblige)

Celle de rené fonctionne en effet ya juste une petite erreur de syntaxe à cause des guillemets la fonction shell l'interprète comme la fermeture du paramètre et pas comme un chaine de caractère!
ça donne ça corrigée:

' Général - Déclarations :
Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long

' Puis dans ton Sub :

Dim DossierSysteme As String, Retour As Long,sh as string
DossierSysteme = Space(255)
Retour = GetSystemDirectory(DossierSysteme, 255)
DossierSysteme = Left$(DossierSysteme, Retour)
SH=DossierSysteme & "\dhcpmgmt.msc"
Call Shell("mmc.exe "& SH, vbNormalFocus)

Celle de Punch pc
Fonctionne tout aussi bien elle gère en plus les erreurs mais est plus complexe
je comprend pas dans cette fonction:
Ret = ShellExecute(Me.hwnd, "Open", "perfmon.msc", vbNullString, "C:", SW_SHOWNORMAL)
à quoi correspond hwnd?
si on déplace le fichier pour le mettre dans f:\ par exemple et qu'on change le C:\ par F:\ le prog le trouve plus c normal

Merci pour tout

Ps: je ne juge surtout pas j'essaye juste de comprendre ça peut servir à quelqu'un si ça ma servi à moi...
0
cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
25 févr. 2004 à 18:02
Mea culpa, faute de frappe : il manquait " &

Petite remarque pour pcpunch :
ShellExecute retourne un Long (2 octets)
et non un Byte (= octet)

Me.hWnd est le "handle" de la page appelante qu'il faut passer à la fonction API

Pour éviter tout ennui, tu mets :

Private Sub Form_Load()
Dim Ret As Long, Chemin As String, Fichier As String
Chemin = "c:\winnt\system32"
Fichier = Chemin & "dhcpmgmt.msc
Ret = ShellExecute(Me.hwnd, "Open", Fichier, vbNullString, Chemin,SW_SHOWNORMAL)
If Ret < 33 Then MsgBox "Impossible d'ouvrir ce fichier..."
End Sub
0
Rejoignez-nous