如何在 C# 中排列或排序桌面图标?

2023-12-23

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

我在 stackoverflow 上看到了类似的问题,但它很旧,而且代码对我不起作用。问题的链接是:用C#排列桌面图标 https://stackoverflow.com/questions/24965672/arranging-desktop-icons-with-c-sharp。我正在尝试在 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 的信息或某种方向,但我找不到太多。请帮忙?


在 Windows 10 中,桌面(不是平铺世界!)仍然是 SysListView32,但是GetDesktopWindowAPI 调用将返回其祖辈(Progman 窗口)的句柄 - 让人想起 Windows 3.0 的古老“程序管理器”。然后有一个 SHELLDLL_DefView 类的垫片,在它下面你会发现隐藏着你想要的列表视图。

Use 来自这个答案的信息 https://stackoverflow.com/a/5691808/1132334从 shell 窗口向下移动到文件夹视图,您最终可以发送 LVM_ARRANGE 消息。

这是一种脆弱的方法,因为它依赖于操作系统的未记录属性,这些属性可能会随着更新或新版本随时更改。当用户使用幻灯片作为桌面背景时,它也可能会中断,因为 Windows 会重新排列桌面窗口堆栈。黑客来处理这个问题here https://stackoverflow.com/a/36566823/1132334.

另一种方法已记录在案,在未来版本中不太可能出现问题,其缺点是涉及 COM 和 C# 的噩梦,即通过IFolderViewshell 自动化的两个相关发现here https://blogs.msdn.microsoft.com/oldnewthing/20130318-00/?p=4933 and here https://blogs.msdn.microsoft.com/oldnewthing/20040720-00/?p=38393/.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 C# 中排列或排序桌面图标? 的相关文章

随机推荐

  • Kafka Stream groupBy 行为:聚合的许多中间输出/更新

    我正在尝试使用 Kafka Stream 来聚合人们的某些属性 我有一个像这样的卡夫卡流测试 new ConsumerRecordFactory Array Byte Character input new ByteArraySeriali
  • ASP.NET CORE 2.1 服务器调试时超时

    错误 服务器超时 但未收到来自服务器的消息 服务器 我正在尝试调试一些服务器端代码 当我这样做时 客户端会在不到一分钟的时间内断开连接 我只使用 SignalR 与客户端通信 还没有控制器 是否有任何设置可以禁用超时或至少使其比现在更长 我
  • Java“原型”模式 - new、clone、class.newInstance

    在我的项目中 有一些 原型 工厂通过克隆最终私有实例来创建实例 这些工厂的作者表示 这种模式比调用 新 运算符提供了更好的性能 使用谷歌来获取一些线索 我没有找到任何相关的东西 这是在a中找到的一小段摘录来自未知项目的 javdoc htt
  • 循环遍历名称并删除那些不匹配指定模式的名称

    我有一个 Excel 工作簿 在其中从其他几个工作簿导入工作表 然后将这些数据合并到 概述 工作表中 我对 vba 相当陌生 所以这项任务花了相当长的时间和大量的研究 然而 我有一个无法解决或找到答案的问题 但我认为如果您知道如何解决 那么
  • C#:使用 foreach 或 for 循环从 ArrayList 中删除项目?

    我对编程和 C 编程都是一个菜鸟 我之前学过一些基本的 Java 我正在尝试使用 C Unity3D 我有一个问题 使用 for 循环而不是 foreach 迭代来删除 ArrayList 中的任何项目是否更好 两者似乎都适合我 Forea
  • 如何在 Jenkins 上设置 LD_LIBRARY_PATH

    我在 Jenkins 运行作业时遇到 java lang UnsatisfiedLinkError 问题
  • 将 $http 响应对象保存为 $scope 变量

    我今天早些时候在 stackoverflow 上问了一个相关问题 但由于代码的复杂性 无法发布它 和我自己的新手 我无法真正从给出的答案中实现解决方案 所以我现在的问题是 对于如下代码 http get ArbitraryInput the
  • switch 语句比较大于或小于数字的值

    我想使用switch我正在编写的一些简单代码中的声明 我试图将括号中的变量与值进行比较 lt 13 or gt 13 这可以使用吗Switch var age prompt Enter you age switch age case lt
  • 如何删除Android内部存储文件?

    我已经使用 Android 内部存储来为我的应用程序保存文件 使用openFileOutput 但我想删除该文件 是否可以以及如何删除 File dir getFilesDir File file new File dir my filen
  • 对于大多数网络主机来说,哪个版本的 PHP 被视为“标准”? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 java.awt.BasicStroke 制作虚线动画

    有没有办法使用 java awt 中的 BasicStroke 生成动画虚线 我的愿望是拥有一条运行的虚线 就像 Photoshop 的矩形选框工具对其线条进行动画处理一样 使用虚线 aThread 或秋千Timer 并将它们与repain
  • SDK中缺少导入类时Android项目如何编译?

    好吧 也许这很简单 但我现在就是想不出来 我已经导入了谷歌示例项目读卡器 https github com googlesamples android CardReader git在Android Studio 1 5 1中 它在compi
  • Errno 13 权限被拒绝。已经在虚拟环境中

    我正在尝试在操作系统更新后安装张量流 我收到 Errno 13 权限被拒绝的消息 我检查过的所有论坛帖子都建议使用虚拟环境解决此问题 问题是我已经在虚拟环境中工作了 这是我使用的命令 user Computer cd tensorflow
  • 尽管 Numpy 推荐 a@b,为什么 a.dot(b) 比 a@b 快

    根据这个答案question https stackoverflow com questions 3890621 how does multiplication differ for numpy matrix vs array classe
  • C-格式化MAC地址

    我目前正在解析一些 MAC 地址 我得到的输出不包含前导零 像这样 char host 0 25 25 0 25 25 我想像这样格式化它 char host 00 25 25 00 25 25 解决这个问题最简单的方法是什么 对于那些想知
  • IB_DESIGNABLE、IBInspectable -- 界面构建器不更新

    我有以下一组代码 自定义视图 h import
  • 如何使 Finder “打开方式”适用于我的应用程序(Xcode、OS X)?

    我创建了一个能够播放音频文件的应用程序 这本身工作得很好 从查找器拖放到我的应用程序也是如此 我还希望人们可以使用 打开方式 菜单从 Finder 中使用我的应用程序 甚至允许他们将我的应用程序设置为特定文件类型的默认应用程序 经过大量搜索
  • Handlebars 特定 - 传递 Handlebars 表达式时转义单引号和双引号

    HTML 和把手 onclick shareItem name gt 当其中包含双引号时 无法成功传递安全转义的名称 onclick shareItem name gt 当其中包含单引号时 无法成功传递安全转义的名称 我需要处理这两种可能性
  • Vary:接受编码是否过度?

    阅读完有关gzip 压缩的工作原理 https developers google com speed articles gzip hl en这让我思考 如果源服务器和代理服务器 CDN 都支持 gzip 则添加Vary Accept En
  • 如何在 C# 中排列或排序桌面图标?

    您知道右键单击桌面时会出现一个 排序依据 选项 允许您按 名称 大小 项目类型 或 修改日期 对图标进行排序吗 好吧 我想找到一种只需按一下按钮即可对桌面图标进行排序的方法 我在 stackoverflow 上看到了类似的问题 但它很旧 而