質問

現在、以下を使用しています オープンエクスプローラーウィンドウのすべてのリストボックスでパスを取得する:

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

ただし、コンピューター、リサイクルビン、ネットワークなどの特別なフォルダーの場所を返さないでください。これらのフォルダーを識別する方法はあります。 shell:MyComputerFolder コンピューター用?

役に立ちましたか?

解決 2

もしも j.LocationName だった null 現在のシステムフォルダーの名前と比較しました。 Windows特別フォルダーの現在の名前を取得します, 、次に、手動でパスを追加しました shell:MyComputerFolder

他のヒント

使用する必要があります Environment.GetFolderPath(Environment.SpecialFolder)メソッド

Environment.SpecialFolderは、すべてのWindowsの「特別な」フォルダー(私のドキュメント、プログラムファイル、デスクトップなど)の値を持つ列挙です。

アップデート:この方法を使用して、特定のパスが特別なフォルダーであるかどうかを判断できます。

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;
}

たとえば、電話することもできます IsSpecialFolder(j.LocationURL) それぞれのため j オープンフォルダーのどれが特別なフォルダーであるかを確認します。

使える Environment.SpecialFolder このような列挙

Environment.GetFolderPath(Environment.SpecialFolder.System))

リンクには、具体的なコードの例があります。

パスを取得する必要があります...しかし、コンピューター、リサイクルビン、ネットワークなどの特別なフォルダーの場所を返しません。

あなたが遭遇している当面の問題はそれです LocationURL 戻り値 "" ウィンドウの場所が物理ディレクトリではない場合。 「マイコンピューター」、「リサイクルビン」、「ネットワーク」の場合、これは驚くことではありません。これらは仮想フォルダーです。そこの そうではありません ディスク上の場所ではないため、それらを指すことができるパスまたはURL。

ただし、「ドキュメント」に移動すると します 特別なフォルダーでもありますが、ディスク上のディレクトリに対応しています) LocationURL まだ戻ってきます "". 。ここに できる あなたに道を与えますが、それはそうしないことを選択します。これはやや意地悪なようです。

私はそれを言ういくつかのドキュメントを見つけました シェルウィンドウ 戻り値 InternetExplorer オブジェクト. 。ドキュメントが見つかりませんでした ShellBrowserWindow あなたが使用しているクラス InternetExplorer 似ているか同一であるように見えるので、いくつかあります ドキュメンテーション Intellisenseのプロパティ名を見るだけではなく、参照できます。

有用に見える他の唯一のプロパティはです LocationName, 、仮想または特別なフォルダーでも何かを返します。ただし、「ドキュメント」や「ライブラリ」などの文字列を返します。これは、プログラムで実際に使用できるものではありません(さまざまなロケール、さまざまなWindowsバージョンなどで異なります。)

必要なのがリストに表示されるものだけである場合、 LocationName おそらく十分でしょう。実際にパスが必要な場合は、おそらく運が悪いでしょう(とにかく、あなたはとにかくそうであるでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top