【问题标题】:How do I arrange or sort the desktop icons in c#?如何在 C# 中排列或排序桌面图标?
【发布时间】:2018-07-01 14:38:22
【问题描述】:

您知道当您右键单击桌面时,有一个“排序依据”选项可让您按“名称”、“大小”、“项目类型”或“修改日期”对图标进行排序?好吧,我想找到一种方法,只需按一下按钮即可对桌面图标进行排序。

我在 stackoverflow 上看到了一个类似的问题,但它很旧,代码对我不起作用。问题的链接是:Arranging desktop icons with C#。我正在尝试在 Windows 10 中实现这一目标。

那里有一条评论说 LVM_* 和 LVA_* 值存储在 SDK 附带的 commctrl.h 文件中。由于某种原因,我找不到该文件。

这是我正在使用的:

  //sort desktop
     public const int LVM_ARRANGE = 4118;
     public const int LVM_ALIGNLEFT = 1;


     [DllImport("user32.dll", CharSet = CharSet.Auto)]
     public static extern IntPtr GetDesktopWindow(); 


    [DllImport("user32.dll")]
     public static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);

     //end of sort desktop 

private void organizeBtn_Click(object sender, EventArgs e)
   {
       var DesktopHandle = GetDesktopWindow();
       MessageBox.Show(GetDesktopWindow().ToString());

       SendMessage(GetDesktopWindow(), LVM_ARRANGE, LVM_ALIGNLEFT, 0);

   }

我一直在寻找有关此主题的信息或某种方向,尤其是有关 Windows 10 的信息,但我找不到太多。请帮忙?

【问题讨论】:

    标签: c# sorting icons desktop sendmessage


    【解决方案1】:

    在 Windows 10 中,桌面(不是 tile 世界!)仍然是 SysListView32,但 GetDesktopWindow API 调用将返回其祖父的句柄,即 Progman 窗口 - 让人想起 Windows 3.0 的古老“程序管理器” .然后是 SHELLDLL_DefView 类的 shim,在它下面你会发现你正在寻找的列表视图。

    使用the information from this answer 从外壳窗口向下移动到文件夹视图,您最终可以发送 LVM_ARRANGE 消息。

    这是一种脆弱的方法,因为它依赖于操作系统的未记录属性,这些属性可能会随着更新或新版本随时更改。当用户使用幻灯片作为桌面背景时,它也可能会中断,因为 Windows 会重新排列桌面窗口堆栈。破解这个here

    另一种记录在案且不太可能在未来版本中中断的方法是通过 shell 自动化的IFolderView,两个相关的发现herehere

    【讨论】:

    • 哇。你很快!感谢您花时间回答我的问题,我很感激。我阅读了您在回复中链接到的帖子。我从中得到的是,如果我创建与实际桌面交互的代码,那么正如你所说的那样,由于未来的更新,它必然会中断。微软不打算让开发人员以这种方式与实际桌面交互,而且它不可靠。我想让桌面上分散的图标在左边整齐地对齐。我想到的另一个解决方案是将所有图标移动到不同的文件夹然后返回。哈哈。你的想法?
    • 如果它只是为了好玩或只是为了你自己的学习和娱乐,那就去吧。我不会将它包含在我试图获得认证和发布的商业应用程序中。我认为将文件移出桌面文件夹并再次移回的想法很巧妙。但是考虑一下 desktop.ini 在其中的作用。同样,如果您在自己的 PC 上执行此操作没问题,如果商业程序可以在我的 PC 上执行此操作,我会踢出它。
    • 是的..它是一个小型桌面程序/工具,我打算卖一点钱。该死。 :(这是我遇到问题的最后一个功能。我会阅读您链接到的其他帖子。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 2016-10-11
    • 2023-03-21
    • 2013-01-02
    相关资源
    最近更新 更多