Question

Je suis actuellement en utilisant ce qui suit pour obtenir le chemin dans une zone de liste de tous Open Explorateur Windows :

foreach (SHDocVw.InternetExplorer j in new SHDocVw.ShellWindows()) {
    if (j.Name == "Windows Explorer") {
        ListView1.Items.Add(j.LocationURL);
    }
}

Mais il ne retourne pas l'emplacement des dossiers spéciaux comme l'ordinateur, Corbeille, réseau, etc. Est-il possible d'identifier ces dossiers afin que je puisse mettre le chemin sur mon propre comme shell:MyComputerFolder pour ordinateur?

Était-ce utile?

La solution 2

Si j.LocationName était null Je l'ai comparé avec le nom des dossiers du système actuel: obtenir les noms actuels de dossiers Windows spécial, puis ajouté le chemin manuellement comme shell:MyComputerFolder

Autres conseils

Vous devez utiliser le méthode Environment.GetFolderPath (Environment.SpecialFolder)

Environment.SpecialFolder est un ENUM qui a des valeurs pour tous les dossiers Windows de spécial "(par exemple, Mes Documents, Program Files, bureau)

Mise à jour: Vous pouvez utiliser cette méthode pour dire si un chemin donné est un dossier spécial:

public static bool IsSpecialFolder(string folderPath)
{
    foreach (Environment.SpecialFolder specialFolderType in Enum.GetValues(typeof (Environment.SpecialFolder)))
    {
        var specialFolderLocation = Environment.GetFolderPath(specialFolderType);

        if(specialFolderLocation.Equals(folderPath, StringComparison.InvariantCultureIgnoreCase))
            return true;
    }

    return false;
}

Par exemple, vous pouvez appeler IsSpecialFolder(j.LocationURL) pour chaque j pour savoir lequel des dossiers ouverts sont des dossiers spéciaux.

Peut utiliser Environment.SpecialFolder énumération comme celui-ci

Environment.GetFolderPath(Environment.SpecialFolder.System))

En lien, il y a, par la façon dont un exemple de code de béton.

Je dois obtenir le chemin ... Mais il ne retourne pas l'emplacement des dossiers spéciaux comme l'ordinateur, Corbeille, réseau etc.

Le problème immédiat que vous utilisez en est que le rendement de LocationURL "" si l'emplacement de la fenêtre est pas un répertoire physique. Pour « Poste de travail », « Corbeille » et « Réseau », ce n'est pas surprenant - ce sont des dossiers virtuels; il ne sont pas un chemin ou une URL qui pourrait pointer vers eux, parce qu'ils sont pas des emplacements sur le disque.

Toutefois, si vous accédez à « Documents » (qui fait correspondent à un répertoire sur le disque, même si elle est aussi un dossier spécial), LocationURL retourne encore "". Ici, il pourrait vous donner un chemin, mais il choisit de ne pas. Cela semble un peu mesquin de celui-ci.

Je trouve une documentation qui dit que rendement ShellWindows documentation vous pouvez vous référer au lieu d'avoir juste à regarder les noms de propriétés dans IntelliSense.

La seule autre propriété qui semble utile est LocationName, qui fait quelque chose de retour, même pour des dossiers virtuels ou spéciaux. Cependant, il renvoie une chaîne comme « Documents » ou « bibliothèques », ce qui est quelque chose que vous pourriez vraiment faire usage de programme (ce serait différent dans différents endroits, différentes versions de Windows, etc.)

Si tout ce que vous avez besoin est quelque chose à montrer dans une liste, LocationName est probablement suffisante. Si vous avez besoin en fait le chemin, vous êtes probablement hors de la chance (bien que vous seriez de toute façon, parce que comme il est indiqué, les choses comme l'ordinateur, Corbeille, et le réseau ne sont pas des chemins).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top