5

これが問題です...私は、ショートカットを含む、ユーザーのデスクトップ上のすべてを一覧表示できる小さなアプリを作成しています。

だから私はこれをやっていました:

string filepath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            DirectoryInfo d = new DirectoryInfo(filepath);

            foreach (var file in d.GetFiles())
            {
                Console.WriteLine(file.Name);
            }

それは私に次のことを与えます:

 Spotify.lnk  
 Desktop.ini

しかし、私のデスクトップでは、これらを見ることができます:

Spotify.lnk
Desktop.ini
Microsoft Office 2010
VLC Media Player

そこで、Win32_ShortcutFile から WMI 情報を取得しようとしましたが、うまくいきませんでした。(Windows Live のようにデスクトップにないものを一覧表示します。)

なので、今のところ無知です…。

これが意味をなすことを願っています!

正しい方向へのポインタは素晴らしいでしょう!

乾杯。

編集:言及するのを忘れていました - ターゲット ノードは Windows Server 2008 SP1 マシンです。

編集:デスクトップ上のフォルダーを既にチェックしていることにも言及するのを忘れていました。

4

5 に答える 5

7

public ユーザーのデスクトップを確認する必要があります。

.Net 4.0 以降では、Environment.SpecialFolder.CommonDesktopDirectory特別なフォルダーを使用してそのディレクトリにアクセスできます。

あなたのマシンでは、C:\Users\Public\Desktop変更していない場合はおそらくそうです。そこを見ると、C:\Users\YourUserName\Desktopフォルダーにないファイルが表示されるはずです。

.net 3.5 以下を使用しているCommonDesktopDirectory場合、特別なフォルダー列挙型には存在しません。その場合は、Win32 API 呼び出しを使用してフォルダー パスを取得する必要があります。

[DllImport("shfolder.dll", CharSet = CharSet.Auto)]
private static extern int SHGetFolderPath(IntPtr hwndOwner, int nFolder, IntPtr hToken, int dwFlags, StringBuilder lpszPath);
private const int MAX_PATH = 260;
private const int CSIDL_COMMON_DESKTOPDIRECTORY = 0x0019;
public static string GetAllUsersDesktopFolderPath()
{
    StringBuilder sbPath = new StringBuilder(MAX_PATH);
    SHGetFolderPath(IntPtr.Zero, CSIDL_COMMON_DESKTOPDIRECTORY, IntPtr.Zero, 0, sbPath);
    return sbPath.ToString();
}
于 2013-01-28T22:06:44.127 に答える
2

また、次のディレクトリをスキャンする必要があります。

string filepath = Environment.GetFolderPath(Environment.SpecialFolder.CommonDesktopDirectory);
于 2013-01-28T22:06:44.217 に答える
0

他の回答で説明されているように、アイテムの多くはすべてのユーザーのデスクトップから取得されますが、検索が完了するわけではありません。

Windows がデスクトップ項目に対して行うのと同じリストを使用する場合は、結果のオブジェクトSHGetDesktopFolderを呼び出して呼び出す必要があります。EnumObjects.NET ベース クラス ライブラリがこの機能を公開しているとは思いませんが、誰かが p/invoke の面倒な作業をすべて行うラッパーを既に作成していることは確かです。pinvoke.net で既に提供されているシン ラッパー (C# に変換されたインターフェイス宣言) があります。

于 2013-01-28T22:15:27.557 に答える
0

一部のファイルは、実際には共有デスクトップ フォルダーにあるため、(コードではなく) 見たときに表示される場合があります。Windows 7 では、これはC:\Users\Public\Public Desktop. XPでは だと思いますC:\Documents and Settings\All Users\Desktop、今は確認できません。

于 2013-01-28T22:07:24.907 に答える
0

すべての destop アイテムを取得する場合は、チェックDesktopDirectoryして、CommonDesktopDirectory

    var list = new DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)).GetFiles()
       .Concat(new DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.CommonDesktopDirectory)).GetFiles())
       .Distinct();

    foreach (var file in list)
    {
        Console.WriteLine(file.Name);
    }
于 2013-01-28T22:11:00.227 に答える