您知道右键单击桌面时会出现一个“排序依据”选项,允许您按“名称”、“大小”、“项目类型”或“修改日期”对图标进行排序吗?好吧,我想找到一种只需按一下按钮即可对桌面图标进行排序的方法。
我在 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,但是GetDesktopWindow
API 调用将返回其祖辈(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# 的噩梦,即通过IFolderView
shell 自动化的两个相关发现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(使用前将#替换为@)