5

让我详细说明。“项目”是指您在桌面(Windows)中看到的所有项目,其中包括“我的电脑”、“回收站”、所有快捷方式等。如果我选​​择桌面上的所有项目,我会在属性中获得计数显示。这是我想要的计数,以编程方式。

我面临的问题:

我们看到的桌面有我帐户中All Users的项目,还有桌面项目以及其他快捷方式,如“我的电脑”、“回收站”。总共3件事。所以我不能只从桌面目录的物理路径中获取项目数。所以这失败了:

int count =
    Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder
                                                            .DesktopDirectory)
                      ).Length;

我知道SpecialFolder.Desktop代表我们看到的逻辑桌面。但这又失败了,因为GetFolderPath()再次获得了用户桌面的物理路径:

int count = 
    Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder
                                                            .Desktop)
                      ).Length;

在用户桌面上获取总数的正确方法是什么?

4

3 回答 3

4

Windows shell 对此提供了全面而全面的支持。

  1. 致电SHGetDesktopFolder()获取IShellFolder桌面版。
  2. 打电话IShellFolder::EnumObjects()获取内容。

代码项目文章从 C# 的角度提供了一些使用示例。

于 2011-09-15T07:21:52.300 回答
-2

这只是不可能以您想要的方式。

您可能忘记了任何桌面上的元素,这些元素与文件无关(文件或链接),而是基于注册表,您会非常想念它们。

于 2011-09-15T07:01:29.893 回答
-3

我正在为自己回答我最终在此处发布的提示和链接的帮助下找到的答案。

    private const uint GET_ITEM_COUNT = 0x1000 + 4;



    [DllImport("user32.DLL")]

    private static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);

    [DllImport("user32.DLL")]

    private static extern IntPtr FindWindow(string lpszClass, string lpszWindow);

    [DllImport("user32.DLL")]

    private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, 
                                                            string lpszClass, string lpszWindow);



    public static int GetDesktopCount()
    {
        //Get the handle of the desktop listview

        IntPtr vHandle = FindWindow("Progman", "Program Manager");

        vHandle = FindWindowEx(vHandle, IntPtr.Zero, "SHELLDLL_DefView", null);

        vHandle = FindWindowEx(vHandle, IntPtr.Zero, "SysListView32", "FolderView");


        //Get total count of the icons on the desktop

        int vItemCount = SendMessage(vHandle, GET_ITEM_COUNT, 0, 0);

        return vItemCount;
    }

与此同时,我开始学习一件有趣(相当烦人!)的事情。您在屏幕上看到的桌面与桌面的文件夹视图不同。即使您取消选中“我的电脑”和“我的文档”位于桌面(您在显示器上看到的桌面),这些图标仍会出现在桌面的文件夹视图中。我尝试了此链接中给出的解决方案,但它给出了文件夹视图中存在的项目数。我在上面发布的解决方案将产生我想要的完美结果。解决方案是由叶志新从这里得到的。感谢@C.Evenhuis 的提示。

于 2011-09-15T13:00:09.067 回答