2014-07-25 10 views
6

kẻ Được rồi, vì vậy đây là những gì tôi đang cố gắng để đạt được:Bố trí các biểu tượng máy tính để bàn với C#

Tôi muốn tất cả các biểu tượng trên desktop lộn xộn để sắp xếp tự phía trên cùng bên trái của máy tính để bàn vào một nút bấm.

Đây là mã tôi đang sử dụng:

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

Tôi tin rằng có những nguyên unassigned gắn liền với và LVA_ALIGNLEFT, bất cứ ai có thể vui lòng hướng dẫn cho tôi những gì họ đang có. Tôi không quen với việc sử dụng dlls, vì vậy tha thứ cho tôi nếu tôi hỏi một câu hỏi ngu ngốc.

Cảm ơn!

Help me guys, Tôi đang sử dụng đoạn mã sau và nó vẫn không làm việc:

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(); 
+0

bởi mục i biểu tượng trung bình ... – user3860157

+0

Bạn có thể kiểm tra http://source.winehq.org/source/include/commctrl.h để biết giá trị của các ký hiệu LVM_ * và LVA_ * (tôi hy vọng bạn có các kỹ năng đọc C cơ bản, kể từ lần thứ e liên kết dẫn bạn đến một tập tin tiêu đề. Bạn cũng có thể tìm thấy tệp commctrl.h trong SDK nền tảng được cài đặt cùng với VS ...) – elgonzo

+2

Sử dụng giao diện được lập tài liệu: [SetCurrentFolderFlags] (http://msdn.microsoft.com/en-us/library/ windows/desktop/bb775546 (v = vs.85) .aspx). –

Trả lời

1

Tôi nhìn quanh và mẫu này dường như làm việc.

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

Nó đến từ các liên kết sau đây: http://www.codeproject.com/Messages/1168661/Auto-Arrange-desktop-icons.aspx

Lưu ý rằng từ tập tin tiêu đề

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

Do đó để gắn kết trái bạn muốn sử dụng int 1.

Các vấn đề liên quan