JohnBailey Posted November 27, 2007 Share Posted November 27, 2007 The script should be self explanatory. I'm wanting to sort a windows explorer (shell.application) file list (listview ctrl) items. The below script does sort the items, but a weird thing happens. Weird thing: the icons don't sort with items and when you click on what you the item says it is, it turns out to be what it originally was. Test it. Any ideas? I've spent a lot of time on MSDN and they don't seem to have a sort function exposed, although I know they are doing it some how (duh!). I did have an idea for sorting by clicking the particular column header, but i don't know how to do that yet. expandcollapse popup#include <GuiConstants.au3> #include <GuiListView.au3> #include <GuiImageList.au3> #Include <GuiHeader.au3> #include <Array.au3> Sleep(4000); Sleep is there to wait for you to get to whatever window you want to test this on ;NOTE: you must have details view enabled in that window. ; I could have made the script do this all for you but it would make the script longer Local $WindowHwnd = HWnd(WinGetHandle('')) Local $FileListView_HWnd=ControlGetHandle($WindowHwnd,'','[Class:SysListView32;Instance:1]') Local $HeaderControlHandle = ControlGetHandle($WindowHwnd ,'','SysHeader321');[class:SysHeader32;instance:1] Local $colCount = _GUICtrlListView_GetColumnCount($FileListView_HWnd) ConsoleWrite(' Col Count: '&$colCount &' for '&$HeaderControlHandle&@CRLF) Local $columnToSort = 0 Local $columnSortType = 0 Local $columnSortDirection = 0 For $_c = 0 To $colCount-1 Local $_colflag = _GUICtrlHeader_GetItemFlags($HeaderControlHandle, $_c) If $_colflag <> 0 Then $columnToSort = $_c $columnFlag = $_colflag If $columnFlag = 8 Then;up arrow (default = up/descending) ConsoleWrite(' Col '& $_c &' - Item Flag: '&$_colflag &@CRLF) ConsoleWrite(' Col Sort Type: '&'descending' &@CRLF) $columnSortDirection = 1;Descending ElseIf $columnFlag = 4 Then;down arrow ConsoleWrite(' Col '& $_c &' - Item Flag: '&$_colflag &@CRLF) ConsoleWrite(' Col Sort Type: '& 'ascending' &@CRLF) $columnSortDirection = 0;Ascending EndIf EndIf Next If $columnSortDirection = 0 Then $columnSortDirection = 1 $columnFlag = 8 ElseIf $columnSortDirection = 1 Then $columnSortDirection = 0 $columnFlag = 4 EndIf _GUICtrlHeader_SetItemFlags($HeaderControlHandle, $columnToSort, $columnFlag) Global $B_DESCENDING[_GUICtrlListView_GetColumnCount ($FileListView_HWnd) ] If $columnSortDirection = 0 Then $B_DESCENDING[$columnToSort] = 'False' ElseIf $columnSortDirection = 1 Then $B_DESCENDING[$columnToSort] = 'True' EndIf _GUICtrlListView_SimpleSort($FileListView_HWnd, $B_DESCENDING, $columnToSort) For $_c = 0 to UBound($B_DESCENDING)-1 ConsoleWrite("-->Col:" & @TAB & $B_DESCENDING[$_c] & @CRLF) Next For $_c = 0 to $colCount-1 If $columnToSort <> $_c Then _GUICtrlHeader_SetItemFormat ($HeaderControlHandle, $_c, BitOR($HDF_LEFT, $HDF_STRING));THANKS GARYFROST EndIf Next A decision is a powerful thing Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now