I decided to try sorting the list before tackling positions. From my Win32 and MFC days, I knew exactly how to do this. Or so I thought.
As soon as I tried to pass a delegate as the LPARAM of SendMessage, I started crashing the Explorer.exe process. Does anyone out there know what is wrong with this code?
public delegate int CompareFunc(int lParam1,
int lParam2,
int lParamSort);
[DllImport("user32.dll", EntryPoint="SendMessage")]
public static extern int SendMessage(IntPtr hWnd, uint Msg, uint wParam,
[MarshalAs(UnmanagedType.FunctionPtr)] CompareFunc compareFunc);
[DllImport("user32.dll",EntryPoint="FindWindow")]
private static extern int FindWindow(string _ClassName, string _WindowName);
[DllImport ("user32.dll")]
public static extern IntPtr GetWindow( IntPtr handle, int cmd );
private void button1_Click(object sender, System.EventArgs e)
{
const int LVM_FIRST = 0x1000;
const int LVM_SORTITEMS = (LVM_FIRST + 48);
const int GW_CHILD = 5;
int tmp = FindWindow( "ProgMan", null );
IntPtr handle = new IntPtr(tmp);
handle = GetWindow( handle, GW_CHILD );
handle = GetWindow( handle, GW_CHILD );
CompareFunc f = new CompareFunc(Compare);
SendMessage( handle, LVM_SORTITEMS, 0, f );
}
public static int Compare( int lp1, int lp2, int lpSort )
{
return 0;
}