Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Утилита отображения служб WinXP (Rumata)
Author Message
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Fri Jun 29, 2007 1:00 pm (написано за 8 минут 26 секунд)
   Post subject: Утилита отображения служб WinXP
Reply with quote

Выкладываю утилиту отображения служб (сервисов) WinXP.

особенности:
реализовано как HTML application
при запуске выводит заданный список служб и их состояний (по умолчанию весь список)
реализованы клавиши управления
ALT+S - вкл/выкл форму ввода имени службы
ESC, ALT+F4 - закрыть приложение

реализована возможность поиска служб по точному/неточному совпадению имени (задается в форме)

реализован интерфейс командной строки:
опции командной строки
Quote:
servicename=SERVICENAME
    отфильтровать только службы, содержащие в имени SERVICENAME
exactname
    если указано, вывести службы, имена которых точно совпадают SERVICENAME (фактически выводится одна служба или ни одной)
то что нереализовано (нет времени, желания, знаний - нужное подчеркнуть)
документация
управление службами (вкл, выкл, перекл способа запуска (вручную, автоматически)


servicelist.zip
 Description:
ServiceList
unzip archive and run sl.hta

Download
 Filename:  servicelist.zip
 Filesize:  2.54 KB
 Downloaded:  332 Time(s)

Back to top
View user's profile Send private message
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Sat Jun 30, 2007 7:16 am (спустя 18 часов 15 минут; написано за 7 минут 37 секунд)
   Post subject:
Reply with quote

Rumata wrote:
то что нереализовано...
Не знаю, может ли понадобиться сортировка столбцов, но я добавил такую возможность (а куда "деваться" - ведь за прошедшую неделю аж три темы о сортировке появились, модно, наверно - и я туда же ;) ). Если разобраться - то сортировка не помешает, есть ведь она в диспетчере, например...
Сортируются все стоблцы за исключением столбца "Description" - его сортировать-то ведь нет смысла. Жаль конечно, что не у "всех" есть ProcessId - не очень "гармонично" сортируется столбик PID (сначала пусто, пусто, пусто..., а потом цифирки, или наоборот)...
Back to top
View user's profile Send private message Send e-mail
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Mon Jul 02, 2007 10:10 am (спустя 2 дня 2 часа 54 минуты; написано за 3 минуты 49 секунд)
   Post subject:
Reply with quote

AKS wrote:
может ли понадобиться сортировка столбцов
может

я умышленно поместил в Разное, потому что то что сделано - сделано сиюминутно, без претензий на "готовость" решения.
однако все спроектиовано (на мой взгляд) с расчетом на расширяемость

то есть можно добавить сортировку, управление службами, и, наконец-то, задокументировать все это
ProcessId - пусто для выключенной службы, если служба запущена, естественно появляется и идентификатор процесса
Back to top
View user's profile Send private message
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Mon Jul 02, 2007 5:16 pm (спустя 7 часов 5 минут; написано за 8 минут 40 секунд)
   Post subject:
Reply with quote

Rumata
О! Наконец-то! А я в субботу ждал-ждал ответа, так и не дождался - написал в дополнение к сортировке еще и все это ваше "нереализованное вкл, выкл, перекл". ;)
Для этих "вкл, выкл, перекл" сделал формы (как для поиска сервиса), которые появляются при клике на втором и третьем рядах. Только вот не сделал "отката" к настройкам по-умолчанию - интересно надо или нет?
Еще стили поменял - сделал так, чтобы верхний ряд с "заголовками" столбцов был всегда (при прокрутке, есст.) зафиксирован top:0. Форма поиска также зафиксированна при помощи top:expression().
Вот только "начудил" я здорово - переписал многое по-своему. Но это не беда - всегда можно переписать так, чтобы можно было "сунуть" в ваш код.
Если хоть что-то из вышеописанного может пригодиться - буду выкладывать.
Back to top
View user's profile Send private message Send e-mail
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Mon Jul 02, 2007 6:06 pm (спустя 50 минут; написано за 4 минуты 19 секунд)
   Post subject:
Reply with quote

AKS
често говоря я не знаю, как фиксировать определенные ряды таблицы
а форма поиска и так фиксирована (position: absolute)

проявлю свою "имховость"
выполнение "вкл/выкл/перекл" лучше сделать через контекстное меню

если есть желание - сортировку попробуйте сделать через примитивный клик на заголовках:
кликнул на заголовок Name сортирует по имени и т.д. все остальное - без сортировки, но при этом учитывать текущую сортировку по имени
Back to top
View user's profile Send private message
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Mon Jul 02, 2007 6:45 pm (спустя 39 минут; написано за 12 минут 40 секунд)
   Post subject:
Reply with quote

Rumata wrote:
форма поиска и так фиксирована...
Да, точно (сейчас заглянул в оригинал и убедился в этом)!
Дело в том, что я и html "перекроил" не слабо - поэтому и забыл что и как было...
Ну да ладно, ближе к делу, как говорится. Первый ряд у меня имеет такие правила в стиле:
Code (css): скопировать код в буфер обмена
tr#header {
    position: relative;
    background-color: white;
    top: expression(parseInt(document.body.scrollTop, 10) - 4 + 'px');
}
Relative - это для того, чтобы нижние ряды не "залезли" под фиксированный ряд, а располагались там, где надо. Кстати, очень даже ничего - прям как в win-папках.
Rumata wrote:
сортировку попробуйте сделать через примитивный клик на заголовках
Так и сделано! Обработчик "висит" на вышеупомянутом фиксированном ряду и "ловит" индекс кликнутой ячейки. Вы наверно удивитесь, но обработчик этот не что иное, как ваш self.processForm, только выглядит он теперь вот так:
Code (JavaScript): скопировать код в буфер обмена
/**
 * aIndex - индекс "кликнутой" ячейки
 * aUpdate - булево для полной "перерисовки" таблицы после того,
 *     как были выбраны определенные сервисы, а затем захотелось
 *     снова посмотреть на все сразу ;)
 */

    self.processForm = function (aIndex, aUpdate) {
        var serviceName = getElementById('serviceName'),
            exactName = getElementById('exactName');
        if (!serviceName.value.length &&
                typeof (aIndex) == 'undefined') {
            return false;
        }
        if (aUpdate) {
            serviceName.value = '';
            exactName.checked = false;
        }
        self.display(serviceName.value, exactName.checked,
                     aIndex || 0, aUpdate);
        event.returnValue = false;
    }
Rumata wrote:
все остальное - без сортировки, но при этом учитывать текущую сортировку по имени...
Трудноуловимая мысль ( ;) ), но, тем не менее, вот что пока есть у меня:
Code (JavaScript): скопировать код в буфер обмена
function compareMaker(aSortProp, aSortDirection, aSortType) {
    var x = '(b < a)',
        y = '(a < b)',
        meth = '.toLowerCase()',
        tmp;
    if (aSortType) {
        x = 'b';
        y = 'a';
        meth = '';
    }
    if (aSortDirection) {
       tmp = x;
       x = y;
       y = tmp;
    }
    return new Function('x', 'y', 'var a = x["' + aSortProp + '"]' +
                            meth + ', b = y["' + aSortProp + '"]' +
                            meth + '; return ' + x + ' - ' + y);
}
Эта функция создает каждый раз новую функцию-аргумент для метода sort. Сделал так, чтобы сортировка варьировалась в зависимости от св-ва сервиса. Метод sort вызывается так:
Code (JavaScript): скопировать код в буфер обмена
/**
 * item[1] - один из 'DisplayName', 'StartMode', 'State', 'ProcessId'
 * item[2] = !item[2] - так меняется "направление" сортировки (булево)
 * aIndex == 3 - а это булево говорит о том, что выбран четрертый ряд,
 *     и сортировать нужно не строки, а числа.
 */

result.sort(compareMaker(item[1], item[2] = !item[2], aIndex == 3));
Rumata wrote:
выполнение "вкл/выкл/перекл" лучше сделать через контекстное меню
Контекстное меню? Это как?
Back to top
View user's profile Send private message Send e-mail
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Mon Jul 02, 2007 7:27 pm (спустя 42 минуты; написано за 13 секунд)
   Post subject:
Reply with quote

AKS wrote:
Контекстное меню? Это как?
через правый клик мышки
Back to top
View user's profile Send private message
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Mon Jul 02, 2007 7:38 pm (спустя 11 минут; написано за 3 минуты 55 секунд)
   Post subject:
Reply with quote

Rumata
Т.е. вместо контекстного меню? Тогда это почти тоже самое, что у меня.
Вообще, я себе представил (и реализовал) так. Видишь на ячейке курсор:hand, title какой-нибудь - кликаешь. Тут и появлятеся форма, причем, например в случае со вторым столбиком, в форме сразу отмечается checkbox с текущим startup type.
Естественно, такое можно легко переделать на правый клик...
Back to top
View user's profile Send private message Send e-mail
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Thu Jul 05, 2007 1:35 pm (спустя 2 дня 17 часов 57 минут; написано за 4 минуты 2 секунды)
   Post subject:
Reply with quote

Rumata wrote:
через правый клик мышки
думаю это лишнее
можно вообще на клик мыши
и реализовать два типа команд
Start|Stop|Pause|Resume|Restart
Automatic|Manual|Enable|Disable

AKS
если есть желание этим заниматься.
мне лично необходимо периодически смотреть какие службы я установил и в какой они состоянии
(есть проблема совместимости - "созвучные" имена, открытые одинаковые порты и т.д.)
стандартный виндовый апплет функционален, но не удобен - служб много, а меня интересуют только определенные
Back to top
View user's profile Send private message
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Thu Jul 05, 2007 4:32 pm (спустя 2 часа 57 минут; написано за 2 минуты 31 секунду)
   Post subject:
Reply with quote

Rumata wrote:
если есть желание этим заниматься...
Да, есть (по крайней мере было в прошлую субботу, поскольку все это показалось интересным). К сожалению, не получаю ответов на вопросы, типа:
AKS wrote:
Только вот не сделал "отката" к настройкам по-умолчанию - интересно надо или нет?
А по-поводу:
Rumata wrote:
и реализовать два типа команд...
я ведь написал, что уже сделал. Ниже архив - посмотрите. Кое-что осталось почти, как было, кое-что переделал, кое-что добавил...


sl.rar
 Description:

Download
 Filename:  sl.rar
 Filesize:  4.89 KB
 Downloaded:  190 Time(s)

Back to top
View user's profile Send private message Send e-mail
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Fri Jul 06, 2007 10:27 am (спустя 17 часов 54 минуты; написано за 8 минут 27 секунд)
   Post subject:
Reply with quote

AKS
супер!
это больше, чем я ожидал :)
AKS wrote:
и реализовать два типа команд...
я ведь написал, что уже сделал
я в то время не видел вашей работы
AKS wrote:
Только вот не сделал "отката" к настройкам по-умолчанию
думаю, это лишнее.

положительные впечатления
1. сортировка работает замечательно
2. есть выбор действий - правда я не тестировал
3. продуман дизайн
4. что-то еще (не помню, но понравилось)

отрицательное
1. действия надо делать в виде меню, а не формы. иначе у вас получается можно вкл и приостановить одновременно. возбмите какую либо из облегченных версий динамических меню у WingedFox
2. меню должно быть одно, например такое
Quote:
Start
Stop
Pause
Resume
Restart
-------
Automatic
Manual
Disable
причем пункты меню должны быть динамически выделяемы - то есть, если служба запущена, то вторично "запустить" я ее не смогу из меню
не изобретайте: верхняя половина меню - это стандартные команды из апплета C:\WINDOWS\system32\services.msc, а нижняя - это выпадающий список Startup Type диалога Properties
3. куда то потерялась возможность запуска из командной строки. ваша реализация не работает в таком режиме - sl.hta serviceName=ля-ля-ля. я посмотрел код, мне кажется вы что-то намудрили в функции createServicesList

в целом все прекрасно. плюсов больше чем минусов.
Back to top
View user's profile Send private message
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Fri Jul 06, 2007 10:29 am (спустя 2 минуты; написано за 4 минуты 39 секунд)
   Post subject:
Reply with quote

да. а где копирайты?
там вашего кода больше чем моего. поэтому я могу претендовать только на идею (:

... и еще
1. высоту заголовка сделайте больше - иногда Description уползает под кнопки
2. думаю выход по ESC - ущербная идея. или отслеживать нажатие клавиши в разные моменты. было бы неплохо сделать кликабельными строки, а не ячейки. вот тогда отменить меню можно было например по ESC и отлавливать момент нажатия клавиши - при открытом меню или нет. если меню открыто, то закрыть меню, иначе - приложение
Back to top
View user's profile Send private message
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Fri Jul 06, 2007 12:27 pm (спустя 1 час 57 минут; написано за 2 минуты 32 секунды)
   Post subject:
Reply with quote

Rumata wrote:
действия надо делать в виде...
меню должно быть...
высоту заголовка сделайте...
А давайте делать вместе! ;)
Если серьезно, то завтра как-раз суббота - вот и попробую что-нибудь "исполнить".
Rumata wrote:
да. а где копирайты?
Думаю ваших будет достаточно ;)
Back to top
View user's profile Send private message Send e-mail
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Fri Jul 06, 2007 12:46 pm (спустя 19 минут; написано за 1 минуту 8 секунд)
   Post subject:
Reply with quote

AKS wrote:
А давайте делать вместе!
давайте, только я нескоро включусь в эту работу, хотя желаемых требований хотелось бы иметь сеййчас и сразу
AKS wrote:
Думаю ваших будет достаточно ;)
думаю ваших не хватает :)
Back to top
View user's profile Send private message
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Fri Jul 06, 2007 4:22 pm (спустя 3 часа 35 минут; написано за 4 минуты 53 секунды)
   Post subject:
Reply with quote

Rumata wrote:
давайте, только я нескоро включусь в эту работу...
А что так? Неужели не найдется времени хотя бы на то, чтобы дать четкие инструкции? Вот, кстати, нужны кое-какие пояснения:
Rumata wrote:
получается можно вкл и приостановить одновременно.
Чтобы этого избежать я специально сделал, чтоб можно было выбрать лишь один чекбокс. Сам пробую "вкл и приостановить одновременно" - не получается. :(
Rumata wrote:
если служба запущена, то вторично "запустить" я ее не смогу из меню
А почему нельзя вызывать метод StartService дважды?
Rumata wrote:
куда то потерялась возможность запуска из командной строки.
Да, снес лишнего - исправлю!
Rumata wrote:
думаю выход по ESC - ущербная идея.
Я пока вообще про кнопочки не думал. Сначала хотелось бы сделать рабочий вариант, а уж потом "прикрутить" горячие клавиши...
Back to top
View user's profile Send private message Send e-mail
Владимир Хоменко
Участник форума



Joined: 11 Jun 2004
Posts: 427
Карма: 42
   поощрить/наказать

Location: Николаев, Украина

PostPosted: Fri Jul 06, 2007 7:39 pm (спустя 3 часа 17 минут; написано за 8 минут 27 секунд)
   Post subject:
Reply with quote

AKS

1) строка 285
Code (JavaScript): скопировать код в буфер обмена
function traceInputCheking() {
    var target = window.event.srcElement;
    if (target.type.toLowerCase() != 'checkbox') {
    ...
}
Если мы кликаем не по чекбоксу, а по рядом находящемся LABEL, то выскакивает ошибка, так как target.type undefined

Лечится так(хотя Вы и сами знаете):
Code (JavaScript): скопировать код в буфер обмена
if (!target.type || target.type.toLowerCase() != 'checkbox') {
2)Как-то у меня все это дело с мульти-чекбоксами подглючивает. В форме изменения состояния отмечаю чекбокс, прячу форму, потом делаю F5, опять вывожу эту форму, а там остается отмеченным чекбокс, который до обновления я отмечал. Потом нажимаю другое состояние и остаются отмеченными оба. Почему так происходит, не разбирался - времени нет, но может ну их, эти чекбоксы, повесить обычные radio?
Back to top
View user's profile Send private message Send e-mail
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Fri Jul 06, 2007 8:08 pm (спустя 28 минут; написано за 5 минут 11 секунд)
   Post subject:
Reply with quote

Владимир Хоменко wrote:
все это дело с мульти-чекбоксами подглючивает.
Во-во, точно! Представляете - прочел ваше сообщение, и тут же начал попытки воспроизвести ситуацию. Один раз удалось увидеть эту "фишку", а потом - ну никак! Интересно, интересно...
Владимир Хоменко wrote:
может ну их, эти чекбоксы, повесить обычные radio?
Надо попробовать (нет, чтоб сразу так сделать, а? ;) ), вот только автор темы высказывал пожелание сделать вообще без формы, а ввиде выпадающего меню. :(
Владимир Хоменко wrote:
if (!target.type
Ага, спасибо! Так и написал в первом условии.

P.S.
С чекбоксами такое случается, если форму не сабмитить, а просто скрывать. Это надо было при "открытии" формы "пробегаться" по всем боксам и делать им checked=false...
Back to top
View user's profile Send private message Send e-mail
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Mon Jul 09, 2007 9:22 am (спустя 2 дня 13 часов 14 минут; написано за 40 секунд)
   Post subject:
Reply with quote

AKS wrote:
А что так? Неужели не найдется времени хотя бы на то, чтобы дать четкие инструкции?
в настоящее время профиль работы у меня другой. все мои занятия не более чем хобби :)
Back to top
View user's profile Send private message
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Mon Jul 09, 2007 4:44 pm (спустя 7 часов 21 минуту; написано за 1 минуту 32 секунды)
   Post subject:
Reply with quote

В качестве хорошей идеи:
1. сделать отдельную колонку с выпадающим списком auto, manual, disabled
2. колонку с кнопками start и stop/restart в зависимости от состояния

ибо нефиг наворачивать сложный UI там, где это даром не нужно =)
Back to top
View user's profile Send private message
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Mon Jul 09, 2007 8:01 pm (спустя 3 часа 17 минут; написано за 1 минуту 39 секунд)
   Post subject:
Reply with quote

WingedFox wrote:
В качестве хорошей идеи...
Нечто подобное отправил в личку автору темы на "утверждение" или же на "браковку".
WingedFox wrote:
нефиг наворачивать сложный UI...
А что такое "сложный"?
Back to top
View user's profile Send private message Send e-mail
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Mon Jul 09, 2007 11:56 pm (спустя 3 часа 54 минуты; написано за 1 минуту 27 секунд)
   Post subject:
Reply with quote

AKS wrote:
А что такое "сложный"?
Это такой, где простые действия реализуются неочевидными путями.
Как, например, переключение состояния службы из выпадающего меню. Чтобы кликнуть по строчке таблицы -- как минимум нужно иметь опыт работы с аналогичным UI, или читать документацию.
Back to top
View user's profile Send private message
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Tue Jul 10, 2007 7:20 am (спустя 7 часов 24 минуты; написано за 1 минуту 58 секунд)
   Post subject:
Reply with quote

WingedFox
Тут нужен опыт работы не с UI, а опыт управления службами. Если его нет, то никакие выпадающие меню не помогут.
Кстати, в стандартном "исполнении" (services.msc) как-раз необходимо выбирать службу, кликая по строке...
Back to top
View user's profile Send private message Send e-mail
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Tue Jul 10, 2007 8:26 am (спустя 1 час 5 минут; написано за 2 минуты 53 секунды)
   Post subject:
Reply with quote

AKS
Задача разработчика предоставить простой UI. Вот и всё.

Прогуляйтесь на usability.ru/ и вообще ознакомьтесь с этой темой.

PS: решения "от Microsoft" не являются эталоном удобства.
Back to top
View user's profile Send private message
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Tue Jul 10, 2007 9:28 am (спустя 1 час 1 минуту; написано за 2 минуты 47 секунд)
   Post subject:
Reply with quote

WingedFox wrote:
В качестве хорошей идеи:
идея хорошая, но некоторые службы можно
1. приостановить
2. остановить
3. рестартовать

это максимум что можно сделать для запущенной службы. другие службы имеют меньший набор команд управления
пока еще непонятно, что делать с зависимыми службами (когда одна запускает другую, или когда от состояния одной зависит состояние другой)
Back to top
View user's profile Send private message
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Tue Jul 10, 2007 10:19 am (спустя 51 минуту; написано за 47 секунд)
   Post subject:
Reply with quote

Rumata
Ну, в конце концов, можно эти кнопки вынести и на тулбар =)
Главное не прятать их от юзера.
Back to top
View user's profile Send private message
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Tue Jul 10, 2007 12:49 pm (спустя 2 часа 29 минут; написано за 36 секунд)
   Post subject:
Reply with quote

WingedFox wrote:
вынести и на тулбар
дублирование команд кнопками тулбара и командами меню - хорошая идея
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML