<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; Сортировка списка в CreateListView (WindowSystemObject)]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=8556&amp;type=atom" />
	<updated>2013-08-16T07:08:34Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=8556</id>
		<entry>
			<title type="html"><![CDATA[Re: Сортировка списка в CreateListView (WindowSystemObject)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=74623#p74623" />
			<content type="html"><![CDATA[<p>Видимо</p>]]></content>
			<author>
				<name><![CDATA[Mat Skywalker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26275</uri>
			</author>
			<updated>2013-08-16T07:08:34Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=74623#p74623</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Сортировка списка в CreateListView (WindowSystemObject)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=74559#p74559" />
			<content type="html"><![CDATA[<p>Видимо, что-то неправильно переписали.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2013-08-15T05:01:26Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=74559#p74559</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Сортировка списка в CreateListView (WindowSystemObject)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=74558#p74558" />
			<content type="html"><![CDATA[<p>Не выходит. Переписал на VBS, сортировки нету, хоть убей. А как это у вас происходит? Нажатие на колонку не отрабатывается, насколько я вижу...</p>]]></content>
			<author>
				<name><![CDATA[Mat Skywalker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26275</uri>
			</author>
			<updated>2013-08-15T04:33:48Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=74558#p74558</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Сортировка списка в CreateListView (WindowSystemObject)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=74508#p74508" />
			<content type="html"><![CDATA[<p>Сортировку производит сам контрол ListView. Раньше этому, видимо, мешал стиль LVS_OWNERDATA, при котором приложение, использующее ListView, должно само реализовать сортировку.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2013-08-14T10:09:59Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=74508#p74508</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Сортировка списка в CreateListView (WindowSystemObject)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=74507#p74507" />
			<content type="html"><![CDATA[<p>А как собственно у вас происходит сортировка?<br />Пример рабочий, но не понятно... <br />И еще, как подобная конструкция будет выглядеть на VBS?</p>]]></content>
			<author>
				<name><![CDATA[Mat Skywalker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26275</uri>
			</author>
			<updated>2013-08-14T09:40:06Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=74507#p74507</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Сортировка списка в CreateListView (WindowSystemObject)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=74390#p74390" />
			<content type="html"><![CDATA[<p>С проблемой разобрался!</p><div class="codebox"><pre><code>
// Формируем ссылки на объект
var WSO = new ActiveXObject(&quot;Scripting.WindowSystemObject&quot;);
var FSO = new ActiveXObject(&quot;Scripting.FileSystemObject&quot;);
var WshShell = new ActiveXObject(&quot;WScript.Shell&quot;);
var objWMIService = GetObject(&quot;winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\cimv2&quot;);

var list_view_obj, data_array = [];

// ************************* Параметры формы ************************************************
var f = WSO.CreateForm(0, 0, 0, 0, WSO.Translate(&quot;WS_CONTROLBOX | WS_MINIMIZEBOX&quot;));
with(f){
    Text = &quot;Менеджер служб Windows&quot;;
    ClientWidth = 700;
    ClientHeight = 600;
    CenterControl();
}

// функция для формирования массива с данными
function fill_data_array(){
var objItem, colItems
   data_array.length = 0; // !!!!!
    
    // формируем коллекцию служб
    colItems = new Enumerator(objWMIService.ExecQuery(&quot;Select * from Win32_Process&quot;));
    
    
    // произвдим перебор коллекции
    for (; !colItems.atEnd(); colItems.moveNext()){
        objItem = colItems.item();
        
        // добавляем в массив объект
        data_array.push({
            Caption: objItem.Caption,
            ParentProcessId: objItem.ParentProcessId,
            ProcessId: objItem.ProcessId
        });
    }
};
//***************************************************************


// массив с данными
var def_columns = [
    { name: &quot;Описание&quot;,      width: 100, type: 1, 
        set_data: function(item, it) { item.Text = data_array[it].Caption; }},
            
    { name: &quot;PID родителя&quot;,      width:  100, type: 1, 
        set_data: function(item, it) { item.SubItems(0) = data_array[it].ParentProcessId; } },
                                    
    { name: &quot;PID&quot;,      width:  80, type: 1, 
        set_data: function(item, it) { item.SubItems(1) = data_array[it].ProcessId;  } }
];


// Формируем панель со списком
function CreateListView(){
    //Создаем объект ListView
    list_view_obj = f.CreateListView( 0, 0, 500, 600,WSO.Translate(&quot;LVS_REPORT | LVS_SHOWSELALWAYS&quot;));
    //Свойства объекта ListView
    list_view_obj.GridLines = true;
    list_view_obj.RowSelect = true;
    list_view_obj.ReadOnly = false;
    
    /*--------------------------------------------------------------*/
    //         Определяем имя и тип колонок
    /*--------------------------------------------------------------*/
   
    for(var ix = 0; ix &lt; 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;
    }
    
    /*--------------------------------------------------------------*/
    //                задаем обработчик событий
    /*--------------------------------------------------------------*/

    
        fill_data_array();
        list_view_obj.Count = data_array.length; 
        //назначаем свойства для текущего элемента
        for(var ix = 0; ix &lt; def_columns.length; ++ix){
            for (iy=0; iy&lt;list_view_obj.Count; iy++){
                def_columns[ix].set_data(list_view_obj.item(iy), iy);
            }
        }    
};

//вызываем функцию для формирования списка
CreateListView();

f.Show();
WSO.Run();
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[fomenos]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28568</uri>
			</author>
			<updated>2013-08-10T18:50:31Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=74390#p74390</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Сортировка списка в CreateListView (WindowSystemObject)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=74372#p74372" />
			<content type="html"><![CDATA[<p>Какая именно ошибка? Я тоже попробовал метод Sort, но получаю сообщение, что команда не поддерживается объектом.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2013-08-10T12:03:51Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=74372#p74372</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Сортировка списка в CreateListView (WindowSystemObject)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=74369#p74369" />
			<content type="html"><![CDATA[<p>Пробовал использовать событие OnColumnClick и метод Sort, но возникает ошибка<br /></p><div class="codebox"><pre><code>
list_view_obj.OnColumnClick = function (sender, item){
        list_view_obj.Sort()
    //WScript.Echo(item.Index);
        
    };
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[fomenos]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28568</uri>
			</author>
			<updated>2013-08-10T10:45:09Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=74369#p74369</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Сортировка списка в CreateListView (WindowSystemObject)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=74367#p74367" />
			<content type="html"><![CDATA[<p>Вот есть пример скрипта, который выводим список процессов Windows. Оконный интерфейс реализован через компонент WindowSystemObject. Всего тир колонки. Вопрос, как осуществить сортировку данных по заданной колонке. В справке WSO все очень запутано:<br /></p><div class="codebox"><pre><code>
//**************************************************************************
// Список процессов Windows
// process_list.js
//**************************************************************************

// Формируем ссылки на объект
var WSO = new ActiveXObject(&quot;Scripting.WindowSystemObject&quot;);
var WshShell = new ActiveXObject(&quot;WScript.Shell&quot;);
var objWMIService = GetObject(&quot;winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\cimv2&quot;);

var list_view_obj, shared_data_array = [];
var Button_Update

// ************************* Параметры формы ************************************************
var f = WSO.CreateForm(0, 0, 0, 0, WSO.Translate(&quot;WS_CONTROLBOX | WS_MINIMIZEBOX&quot;));
with(f){
    Text = &quot;Список процессов Windows&quot;;
    ClientWidth = 700;
    ClientHeight = 600;
    CenterControl();
}

//********************************************************************************
//                  Управляющик кнопки
//********************************************************************************

// Обновить списк служб
Button_Update = f.CreateButton(530,10,100,25,&quot;Обновить список&quot;);
Button_Update.OnClick = ServiceUpdate;


// функция для формирования массива с данными
function fill_data_array(data_array){
var objItem, colItems
   data_array.length = 0; // !!!!!
    
    // формируем коллекцию служб
    colItems = new Enumerator(objWMIService.ExecQuery(&quot;Select * from Win32_Process&quot;));
    
    
    // произвдим перебор коллекции
    for (; !colItems.atEnd(); colItems.moveNext()){
        objItem = colItems.item();
        
        // добавляем в массив объект
        data_array.push({
            Caption: objItem.Caption,
            ParentProcessId: objItem.ParentProcessId,
            ProcessId: objItem.ProcessId
        });
    }
};
//***************************************************************


// массив с данными
var def_columns = [
    { name: &quot;Описание&quot;,      width: 100, type: 1, 
        set_data: function(item, data) { item.Text = data.Caption;        }},
            
    { name: &quot;PID родителя&quot;,      width:  100, type: 1, 
        set_data: function(item, data) { item.SubItems(0) = data.ParentProcessId;  } },
                                    
    { name: &quot;PID&quot;,      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(&quot;LVS_REPORT | LVS_OWNERDATA | LVS_SHOWSELALWAYS&quot;));
    //Свойства объекта 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 &lt; 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 &lt; 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();
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[fomenos]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28568</uri>
			</author>
			<updated>2013-08-10T10:01:15Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=74367#p74367</id>
		</entry>
</feed>
