Тема: Сортировка списка в CreateListView (WindowSystemObject)
Вот есть пример скрипта, который выводим список процессов Windows. Оконный интерфейс реализован через компонент WindowSystemObject. Всего тир колонки. Вопрос, как осуществить сортировку данных по заданной колонке. В справке WSO все очень запутано:
//**************************************************************************
// Список процессов Windows
// process_list.js
//**************************************************************************
// Формируем ссылки на объект
var WSO = new ActiveXObject("Scripting.WindowSystemObject");
var WshShell = new ActiveXObject("WScript.Shell");
var objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\cimv2");
var list_view_obj, shared_data_array = [];
var Button_Update
// ************************* Параметры формы ************************************************
var f = WSO.CreateForm(0, 0, 0, 0, WSO.Translate("WS_CONTROLBOX | WS_MINIMIZEBOX"));
with(f){
Text = "Список процессов Windows";
ClientWidth = 700;
ClientHeight = 600;
CenterControl();
}
//********************************************************************************
// Управляющик кнопки
//********************************************************************************
// Обновить списк служб
Button_Update = f.CreateButton(530,10,100,25,"Обновить список");
Button_Update.OnClick = ServiceUpdate;
// функция для формирования массива с данными
function fill_data_array(data_array){
var objItem, colItems
data_array.length = 0; // !!!!!
// формируем коллекцию служб
colItems = new Enumerator(objWMIService.ExecQuery("Select * from Win32_Process"));
// произвдим перебор коллекции
for (; !colItems.atEnd(); colItems.moveNext()){
objItem = colItems.item();
// добавляем в массив объект
data_array.push({
Caption: objItem.Caption,
ParentProcessId: objItem.ParentProcessId,
ProcessId: objItem.ProcessId
});
}
};
//***************************************************************
// массив с данными
var def_columns = [
{ name: "Описание", width: 100, type: 1,
set_data: function(item, data) { item.Text = data.Caption; }},
{ name: "PID родителя", width: 100, type: 1,
set_data: function(item, data) { item.SubItems(0) = data.ParentProcessId; } },
{ name: "PID", width: 80, type: 1,
set_data: function(item, data) { item.SubItems(1) = data.ProcessId; } }
];
// Формируем панель со списком
function CreateListView(){
//Создаем объект ListView
list_view_obj = f.CreateListView( 0, 0, 500, 600,WSO.Translate("LVS_REPORT | LVS_OWNERDATA | LVS_SHOWSELALWAYS"));
//Свойства объекта ListView
list_view_obj.GridLines = true;
list_view_obj.RowSelect = true;
list_view_obj.ReadOnly = false;
list_view_obj.ItemIndex = 1;
/*--------------------------------------------------------------*/
// Определяем имя и тип колонок
/*--------------------------------------------------------------*/
for(var ix = 0; ix < def_columns.length; ++ix){
var def_col = def_columns[ix];
var column = list_view_obj.Columns.Add(def_col.name, def_col.width);
column.DataType = def_col.type;
}
/*--------------------------------------------------------------*/
// задаем обработчик событий
/*--------------------------------------------------------------*/
list_view_obj.OnData = function (sender, item){
//начало
sender.BeginUpdate();
//задаем текущий элемент
// массив shared_data_array является обработчиком через него идет обработка событий
var data = shared_data_array[item.Index];
//назначаем свойства для текущего элемента
for(var ix = 0; ix < def_columns.length; ++ix){
def_columns[ix].set_data(item, data);
}
//конец
sender.EndUpdate();
};
/* callbacks *************************************************** */
// вызываем функцию получения списка данных
fill_data_array(shared_data_array);
//Определяем количество элементов
list_view_obj.Count = shared_data_array.length;
};
// Функция обновления списка
function ServiceUpdate(){
//очищаем поле с данными
list_view_obj.Clear();
fill_data_array(shared_data_array);
list_view_obj.Count = shared_data_array.length; // !!!!!
};
//вызываем функцию для формирования списка
CreateListView();
f.Show();
WSO.Run();

