Добрый день!
Помогите пожалуйста разобраться почему не работает сортировка _GUICtrlListView_SortItems во внешней программе (например оснастка MMC)
Взял пример из справки, упростил его максимально, всё работает:
А вот так не работает:
При том что если в последнем коде _GUICtrlListView_SortItems заменить на _GUICtrlListView_SimpleSort, то сортировка работает (но очень медленно с большими объёмами данных, поэтому и решил попробовать другую функцию):
П.с. или может гуру подскажут как на OLE Automation сделать сортировку через LVM_SORTITEMS/LVN_COLUMNCLICK :-[
Помогите пожалуйста разобраться почему не работает сортировка _GUICtrlListView_SortItems во внешней программе (например оснастка MMC)
Взял пример из справки, упростил его максимально, всё работает:
Код:
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>
Global $g_idListView
GUICreate("ListView Sort", 300, 200)
$g_idListView = GUICtrlCreateListView("Column1|Col2|Col3", 10, 10, 280, 180, -1)
GUICtrlCreateListViewItem("Строка 4|5|ещё_a", $g_idListView)
GUICtrlCreateListViewItem("Строка 5|4.50 |ещё_c", $g_idListView)
GUICtrlCreateListViewItem("Строка 5|4.0 |ещё_c", $g_idListView)
GUICtrlCreateListViewItem("Строка 3|23|ещё_e", $g_idListView)
GUICtrlCreateListViewItem("Строка 2|0.34560 |ещё_d", $g_idListView)
GUICtrlCreateListViewItem("Строка 1|1.0 |ещё_b", $g_idListView)
GUICtrlCreateListViewItem("Строка 1|0.1 |ещё_b", $g_idListView)
GUICtrlCreateListViewItem("Строка 1|10|ещё_b", $g_idListView)
GUISetState(@SW_SHOW)
_GUICtrlListView_RegisterSortCallBack($g_idListView)
Sleep (2000)
_GUICtrlListView_SortItems($g_idListView, 1)
Sleep (2000)
_GUICtrlListView_UnRegisterSortCallBack($g_idListView)
GUIDelete()
А вот так не работает:
Код:
#include <GuiListView.au3>
Opt("TrayIconDebug", 1)
$objMMC = ObjCreate("MMC20.Application")
$objMMC.Load("lusrmgr.msc")
$objMMC.UserControl = 1
If WinWait("[CLASS:MMCMainFrame]", '', 10) = 0 Then Exit
$objDoc = $objMMC.Document
$objSN = $objDoc.ScopeNamespace
$objRoot = $objDoc.RootNode
$objNode = $objSN.GetChild($objRoot)
$objNode = $objSN.GetChild($objNode)
$objView = $objDoc.ActiveView
$objView.ActiveScopeNode = $objNode
$hWnd = ControlGetHandle ("[CLASS:MMCMainFrame]", "", 12786)
_GUICtrlListView_RegisterSortCallBack($hWnd)
Sleep (2000)
_GUICtrlListView_SortItems($hWnd, 1)
Sleep (2000)
_GUICtrlListView_UnRegisterSortCallBack($hWnd)
При том что если в последнем коде _GUICtrlListView_SortItems заменить на _GUICtrlListView_SimpleSort, то сортировка работает (но очень медленно с большими объёмами данных, поэтому и решил попробовать другую функцию):
Код:
#include <GuiListView.au3>
Opt("TrayIconDebug", 1)
$objMMC = ObjCreate("MMC20.Application")
$objMMC.Load("lusrmgr.msc")
$objMMC.UserControl = 1
If WinWait("[CLASS:MMCMainFrame]", '', 10) = 0 Then Exit
$objDoc = $objMMC.Document
$objSN = $objDoc.ScopeNamespace
$objRoot = $objDoc.RootNode
$objNode = $objSN.GetChild($objRoot)
$objNode = $objSN.GetChild($objNode)
$objView = $objDoc.ActiveView
$objView.ActiveScopeNode = $objNode
$hWnd = ControlGetHandle ("[CLASS:MMCMainFrame]", "", 12786)
Sleep (2000)
_GUICtrlListView_SimpleSort ($hWnd, True, 1)
Sleep (2000)
_GUICtrlListView_SimpleSort ($hWnd, False, 1)
Sleep (2000)
П.с. или может гуру подскажут как на OLE Automation сделать сортировку через LVM_SORTITEMS/LVN_COLUMNCLICK :-[