Programme dans %path%

Codes specifiques à Windows
NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

Programme dans %path%

Message par NY152 »

Bonjour,

J'ai un réseau de PC qui n'est pas forcément configuré à l'identique et sur ces PC il y a différents répertoires dans %path%

Ce que j'aimerais pouvoir faire c'est retourner le chemin complet d'un outil dont le répertoire est forcement dans %path%

En gros, et pour faire simple si j'appelle ma fonction comme ceci :

ResultatChemin$=Chemin("notepad.exe")

ResultatChemin$ retournerait C:\Windows\System32\notepad.exe qui serait trouvé en parcourant tous les répertoires dans %path%

Je n'arrive pas à avoir ce résultat.

Quelqu'un pourrait me donner un petit coup de main ?

D'avance, merci ^^
.:NY152:.
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Programme dans %path%

Message par Ar-S »

Regarde du coté de la doc dans ExamineEnvironmentVariables(), Get/SetEnvironmentVariable() etc.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

Re: Programme dans %path%

Message par NY152 »

C'est ce que j'ai fais ! J'ai finalement résolu mon problème ^^

Je passe le code que j'ai écris, des fois que ça intéresserait.

Je l'ai écris à l'arrache pour avoir un truc qui tourne et qui correspond à ce que je voulais. J'ai pas du tout chercher à optimiser, libre à vous de le faire, il en a besoin ^^

Si y en a qui l'optimise, pensez à repartager la chose ici :)

Code : Tout sélectionner

Procedure.s AddDirSep(Dossier.s)
	If Right(Dossier, 1) = "\"
		ProcedureReturn Dossier
	Else
		ProcedureReturn Dossier + "\"
	EndIf
EndProcedure
Procedure.s Chemin(Executable.s)
  Protected tmp_s.s
  If ExamineEnvironmentVariables()
    While NextEnvironmentVariable()
      Select LCase(EnvironmentVariableName())
        Case "windir"
          If FileSize(AddDirSep(EnvironmentVariableValue()) + Executable) <> -1
            ProcedureReturn AddDirSep(EnvironmentVariableValue()) + Executable
            Goto fin
          EndIf
          If FileSize(AddDirSep(EnvironmentVariableValue()) + "System32\" + Executable) <> -1
            ProcedureReturn AddDirSep(EnvironmentVariableValue()) + "System32\" + Executable
            Goto fin
          EndIf
        Case "path"
          For i = 1 To 100
            If FileSize(AddDirSep(StringField(EnvironmentVariableValue(), i, ";")) + Executable) <> -1
              ProcedureReturn AddDirSep(StringField(EnvironmentVariableValue(), i, ";")) + Executable
              Goto fin
            EndIf
          Next i
      EndSelect
    Wend
  EndIf
  Fin:
EndProcedure
A appeler comme ceci :

Code : Tout sélectionner

StrRep$ = Chemin("notepad.exe")
MessageRequester("test", StrRep$)
.:NY152:.
Avatar de l’utilisateur
Pierre Bellisle
Messages : 25
Inscription : jeu. 21/juin/2018 6:01

Re: Programme dans %path%

Message par Pierre Bellisle »

Une autre façon de faire...
L'API SearchPath recherche dans le répertoire de travail courant et dans les dossiers de l'evironnement "Path"
Voir https://msdn.microsoft.com/en-us/librar ... s.85).aspx

Code : Tout sélectionner

Import "Kernel32.lib"
  SearchPathW(*zPath, *zFileName, *zExt, BufLen, *Buf, *FilePart) 'SearchPathA est aussi disponible pour du texte Ansi
EndImport

Define.String szFileName.s{#MAX_PATH} 
Define.String szExt.s{4} 
Define.String szPath.s{#MAX_PATH} 
Define.String *pszFilePart

szFileName = "Notepad"
szExt      = ".exe"
SearchPathW(0, @szFileName.s, @szExt.s, #MAX_PATH, @szPath.s, @*pszFilePart)
MessageRequester("SearchPath", szFileName + #CRLF$ + szExt + #CRLF$ + PeekS(*pszFilePart) + #CRLF$ + szPath)
;Donne: "Notepad", ".exe", "Notepad.exe", "C:\Windows\system32\Notepad.exe"
Répondre