Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在c#中排列或排序桌面图标?_C#_Sorting_Icons_Desktop_Sendmessage - Fatal编程技术网

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

如何在c#中排列或排序桌面图标?,c#,sorting,icons,desktop,sendmessage,C#,Sorting,Icons,Desktop,Sendmessage,你知道当你右击桌面时,有一个“排序依据”选项,允许你按“名称”、“大小”、“项目类型”或“修改日期”对图标进行排序吗?嗯,我想找到一种方法,通过按下按钮对桌面图标进行排序 我在stackoverflow上看到一个类似的问题,但它很旧,代码对我不起作用。问题的链接是:。我正试图在Windows10中实现这一点 有评论说LVM_*和LVA_*值存储在SDK附带的commctrl.h文件中。不知什么原因,我找不到那个文件 以下是我正在使用的: //sort desktop public

你知道当你右击桌面时,有一个“排序依据”选项,允许你按“名称”、“大小”、“项目类型”或“修改日期”对图标进行排序吗?嗯,我想找到一种方法,通过按下按钮对桌面图标进行排序

我在stackoverflow上看到一个类似的问题,但它很旧,代码对我不起作用。问题的链接是:。我正试图在Windows10中实现这一点

有评论说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);

   }

我一直在挖掘关于这个主题的信息或某种方向,特别是关于Windows10,但我找不到太多。请帮助?

在Windows 10中,桌面(而不是平铺世界!)仍然是SysListView32,但是
GetDesktopWindow
API调用将返回其祖辈的句柄,一个Progman窗口-让人想起Windows 3.0的古老“程序管理器”。然后是SHELLDLL_DefView类的一个垫片,下面是您要查找的listview

用于从shell窗口向下移动到文件夹视图,最终可以发送LVM_排列消息

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


另一种方法是通过shell automation的
IFolderView
,两个相关的发现和.

Wow,这种方法已被记录在案,不太可能在未来的版本中出现,其缺点是涉及COM和来自C#的噩梦。你跑得真快!谢谢你抽出时间回答我的问题,我很感激。我读了你在回复中链接到的帖子。我从中得到的是,如果我创建与实际桌面交互的代码,那么它肯定会因为将来的更新而崩溃,正如您所说的。微软并不打算让开发者以这种方式与实际的桌面交互,这是不可靠的。我想让桌面上分散的图标整齐地排列在左边。我想到的另一个解决方案是将所有图标移到另一个文件夹,然后再移回来。哈哈。你的想法?如果只是为了好玩或者只是为了你自己的学习和娱乐,那就继续吧。我不会将其包含在我试图获得认证和发布的商业应用程序中。我认为将文件从桌面文件夹中移出,然后再移回来的想法很有创意。但是考虑一下桌面桌面的角色。再说一次,如果你在自己的电脑上做这件事没问题,如果一个商业程序在我的电脑上做这件事,我会把它踢出去。是的。这是一个小的桌面程序/工具,我打算卖一点钱。该死(这是我遇到的最后一个问题。我会阅读你链接到的其他帖子。谢谢你的帮助。