使用C#排列桌面图标

6

大家好,这是我想要实现的目标:

我希望在点击按钮时,所有不规则排列的桌面图标都能自动排列到桌面的左上角。

这是我正在使用的代码:

[DllImport("user32.dll")]

private static extern IntPtr GetDesktopWindow();

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

private void button1_Click(object sender, EventArgs e)
{
    IntPtr hwnd = GetDesktopWindow(); //hwnd for desktop
    SendMessage(hwnd, LVM_ARRANGE, LVA_ALIGNLEFT, 0);   
}  

我相信与 LVM_ARRANGELVA_ALIGNLEFT 相关联的整数是未分配的,有没有人可以指导我它们是什么。我不熟悉使用dll,所以如果我问了一个愚蠢的问题,请原谅我。
谢谢!
帮帮我,伙计们,我正在使用以下代码,但它仍然无法工作:
  private void button1_Click(object sender, EventArgs e)
    {


        IntPtr hanle = GetHandle();
        IntPtr done;
        done = SendMessage(hanle, LVM_ARRANGE, LVA_ALIGNLEFT, IntPtr.Zero);

    }

    public IntPtr GetHandle()
    {
        hShellWnd = GetShellWindow();
        hDefView = FindWindowEx(hShellWnd, IntPtr.Zero, "SHELLDLL_DefView", null);
        folderView = FindWindowEx(hDefView, IntPtr.Zero,"SysListView32", null);
        return folderView;
    }


    public const int LVM_FIRST =  0x1000;
    public const uint LVM_ARRANGE = LVM_FIRST + 22; 
    //public const IntPtr LVA_SNAPTOGRID = 5;

     IntPtr LVA_ALIGNLEFT = new IntPtr(0x0001);

     IntPtr hShellWnd;
     IntPtr hDefView;
     IntPtr folderView;


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

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

    [DllImport("user32.dll", SetLastError = true)]
    public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string className, string windowTitle);

    [DllImport("user32.dll")]
    static extern IntPtr GetShellWindow();

我所说的“项”是指图标... - user3860157
你可以查看http://source.winehq.org/source/include/commctrl.h获取LVM_*和LVA_*符号的值(希望你具备基本的C语言阅读技能,因为该链接会引导你到一个头文件。你还应该能够在与VS一起安装的平台SDK中找到commctrl.h文件...) - user2819245
2
请使用文档化的接口:SetCurrentFolderFlags - Raymond Chen
-1 Raymond已经告诉过你如何做了。 - David Heffernan
请您详细说明一下... - user3860157
1个回答

1
我四处查看,这个示例似乎有效。
private void button1_Click(object sender, System.EventArgs e)
{
SendMessage(GetDesktopWindow(), LVM_ARRANGE, LVA_SNAPTOGRID , 0);
}


public const int LVM_ARRANGE = 4118;
public const int LVA_SNAPTOGRID = 5;


[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 ); 

我来自以下链接:http://www.codeproject.com/Messages/1168661/Auto-Arrange-desktop-icons.aspx

请注意,这是从头文件中得到的信息。

#define LVA_DEFAULT             0x0000
#define LVA_ALIGNLEFT           0x0001
#define LVA_ALIGNTOP            0x0002
#define LVA_SNAPTOGRID          0x0005

因此,要左对齐,您需要使用int 1。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接