2014-07-25 11 views
6

Alright facetów, więc o to, co usiłuję osiągnąć:Organizowanie ikony pulpitu z C#

Chcę wszystkie nieuporządkowane ikony pulpitu do układają się w kierunku lewym górnym rogu pulpitu na kliknięcia przycisku.

Oto kod używam:

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

Wierzę, że istnieją liczby całkowite nieprzypisane związane z i LVA_ALIGNLEFT, może ktoś proszę kierować mi, jakie są. Nie jestem zaznajomiony z używaniem bibliotek dll, więc wybacz mi, jeśli zadaję głupie pytanie.

Dzięki!

pomóc mi chłopaki, używam następujący kod, a jego nadal nie działa:

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

według pozycji i średnia ikona ... – user3860157

+0

Możesz sprawdzić http://source.winehq.org/source/include/commctrl.h dla wartości symboli LVM_ * i LVA_ * (mam nadzieję, że masz podstawowe umiejętności czytania C, ponieważ e link prowadzi cię do pliku nagłówkowego. Powinieneś również móc znaleźć plik commctrl.h w zestawie SDK platformy zainstalowanym razem z VS ...) – elgonzo

+2

Użytkownik udokumentowany interfejs: [SetCurrentFolderFlags] (http://msdn.microsoft.com/en-us/library/ windows/desktop/bb775546 (v = vs.85) .aspx). –

Odpowiedz

1

Rozejrzałem się i próbka ta wydawała się działać.

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

Pochodzi z poniższego linku: http://www.codeproject.com/Messages/1168661/Auto-Arrange-desktop-icons.aspx

pamiętać, że od pliku nagłówka

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

Dlatego, aby wyrównać lewą chcesz użyć int 1.