VBS : Objet Shell : BrowsForFolder

Le
moi
Bonjour,

Les exemples d'utilisation de l'objet "Folder" récupéré par cette
fonction utilisent systématiquement divers détours pour obtenir
l'objet "FolderItem" Associé :

Passage par le Parent puis on reprend l'item dans la collection des
FolderItems du parent

Genre
Chemin = Resultat.ParentFolder.ParseName(Resultat.Title).Path

Le Parent Existe-t-il toujours ? ??


En fait :

Set ShApp = Wscript.CreateObject("shell.application")
Set ObjetFolder = ShApp.BrowseForFolder(H, Titre, F, [R])
Set Choix = ObjetFolder.Self

retourne le "FolderItem" correspondant à la sélection

Ensuite on dispose entre autres de
Choix.Path et Choix.Name , bien connus

mais aussi de deux booléens

Choix.IsRootFolder qui peut s'avérer utile

de
Choix.Drive qui retourne un Objet Drive (comme avec le FSO )

et

Choix.IsFileSystem qui indique si ce "FolderItem" est dans le
"Systeme de fichier"

qui permet donc facilement d'écarter les divers trucs virtuels
du genre "EntireNetwork" ou "Poste de Travail "

Visiblement, j'ai fait plusieurs tests, ces possibilités existent
Pourquoi ne sont-elles documentées nulle part ???
Y aurait-il des risques particuliers ( peste bubonique de l'écran,
Coryza du disque dur, etc ) attachés à l'utilisation de ces outils ???

Merci d'avance pour vos lumières,

HB
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Gilles LAURENT
Le #632665
"moi" news:
| Bonjour,

Bonjour,

| Les exemples d'utilisation de l'objet "Folder" récupéré par cette
| fonction utilisent systématiquement divers détours pour obtenir
| l'objet "FolderItem" Associé :
|
| Chemin = Resultat.ParentFolder.ParseName(Resultat.Title).Path

Cette technique est utilisée sur les systèmes antérieur à Windows 2000 /
Windows 98ME. C'est le seul moyen de récupérer le chemin du dossier
sélectionné sous ces systèmes.

| Set ShApp = Wscript.CreateObject("shell.application")
| Set ObjetFolder = ShApp.BrowseForFolder(H, Titre, F, [R])
| Set Choix = ObjetFolder.Self
|
| retourne le "FolderItem" correspondant à la sélection

En effet, la propriété Self est maintenant disponible ce qui simplifie
les choses

| Ensuite on dispose entre autres de
| Choix.Path et Choix.Name , bien connus
| mais aussi de deux booléens
| Choix.IsRootFolder qui peut s'avérer utile...

??
Choix.IsFolder

| Choix.Drive qui retourne un Objet Drive (comme avec le FSO )

??

| Choix.IsFileSystem qui indique si ce "FolderItem" est dans le
| "Systeme de fichier"
| qui permet donc facilement d'écarter les divers trucs virtuels
| du genre "EntireNetwork" ou "Poste de Travail "

Ci-dessous un transcript WSH Shell qui expose les membres (méthodes et
propriétés) de l'objet FolderItem :

*******************************
WSH Transcript Start
Start time : 2007-01-14 17:28:17
Username : LA77028Administrateur
Machine : LA77028 (Microsoft Windows NT 5.1.2600.1)
*******************************
Transcript started, output file is browseforfolder.txt

WSH D:test> Set oShApp=co("Shell.Application")
WSH D:test> ' sélection du dossier D:test
WSH D:test> ' on récupère un objet FolderItem
WSH D:test> Set oFolder=oShApp.BrowseForFolder(hwnd, "", 0).Self
WSH D:test> echo TypeName (oFolder)
FolderItem2
WSH D:test> ' lecture des membres de l'objet
WSH D:test> gm(oFolder)
Function ExtendedProperty (bstrPropName)
Function InvokeVerb ([vVerb])
Function InvokeVerbEx ([vVerb], [vArgs])
Function Verbs ()
Property Application
Property GetFolder
Property GetLink
Property IsBrowsable
Property IsFileSystem
Property IsFolder
Property IsLink
Property ModifyDate
Property Name
Property Parent
Property Path
Property Size
Property Type
WSH D:test> ' lecture des propriétés de l'objet
WSH D:test> echo oFolder.Path
D:test
WSH D:test> echo oFolder.IsBrowsable
0
WSH D:test> echo oFolder.IsFileSystem
-1
WSH D:test> echo oFolder.IsFolder
-1
WSH D:test> echo oFolder.IsLink
0
WSH D:test> echo oFolder.Modifydate
14/01/2007 16:38:18
WSH D:test> echo oFolder.Parent
Donnees (D:)
WSH D:test> echo oFolder.Name
test
WSH D:test> echo oFolder.Size
0
WSH D:test> echo oFolder.Type
Dossier de fichiers
WSH D:test>

Transcript stopped.

| Visiblement, j'ai fait plusieurs tests, ces possibilités existent...
| Pourquoi ne sont-elles documentées nulle part ???

L'objet FolderItem est documenté ici :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/objects/folderitem/folderitem.asp

--
Gilles LAURENT
http://glsft.free.fr
moi
Le #632664
Bonjour,


Notre ami Gilles LAURENT tapota :


Cette technique est utilisée sur les systèmes antérieur à Windows
2000 / Windows 98ME. C'est le seul moyen de récupérer le chemin du
dossier sélectionné sous ces systèmes.


OK, Comme on trouve cette technique
dans de nombreux scripts proposés pour XP,
je pensais qu'il y avait une autre raison...

Effectivement, dans msdn2 ( voir plus bas)
j'ai finis par trouver que ça marchait à partir
de W2000 et WinMe
( donc pas sur 98SE
qui reste encore assez "fréquent" à certains endroits)

N'empêche que Parent n'existe pas forcément
Il faut alors chercher un contenu et faire "le contraire" :
si Choix.items.count > 0
on tronque Choix.items.item(0).path
pour retrouver le chemin de l'élément choisi ...

Dans les deux cas, c'est assez indirect :o(

Mézalor :
Peut-on rencontrer un objet
sans Parent ni Items()
mais sélectionnable avec BrowsForFolder ?

doit-on prévoir ce cas ...



Choix.IsRootFolder qui peut s'avérer utile...




Oups, je me suis planté,
En fait, c'est en passant par un Objet FSO
que j'ai récupéré cette info...

set FsoFolder = FSO.GetFolder(Choix.Path)
EstRacine = FsoFolder.IsRootFolder




http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/objects/folderitem/folderitem.asp


Bizarre les serveurs de MS ...

Moi j'ai fini par arriver là :

http://msdn2.microsoft.com/en-us/library/ms630483.aspx

mais les contenus semblent identiques :o)
Le seul avantage c'est que l'adresse
n'est pas coupée
par le retour
de ligne
:o)))


Merci, en tout cas, pour ces précisions,

Amicalement,

HB


Publicité
Poster une réponse
Anonyme