четверг, 26 августа 2010 г.

Балуемся с СостояниеКлавиатуры()

Интересный метод СостояниеКлавиатуры, объекта Сервис, FormEx - привел меня к вопросу:
Существует ли стандарт/порядок расположения диодов(индикаторов) клавиш CapsLock, NumLock и ScrollLock на клавиатурах и стационарных и переносных ПК?

В общем на домашнем ноутбуке 2 индикатора (в порядке "мигания" NumLock, CapsLock), а на стационарной клавиатуре все три (в порядке "мигания" NumLock, CapsLock, ScrollLock).
Заставим их "мигать" нам из 1С, текст процедуры:

    Если ЗагрузитьВнешнююКомпоненту("FormEx.dll") = 0 Тогда

       
Сообщить("Не удалось загрузить внешнюю компоненту FormEx.dll");

        Возврат;

    КонецЕсли;

   
ОбСервис = СоздатьОбъект("Сервис");

   
//Попробуем помигать NumLock-ом, CapsLock-ом и ScrollLock-ом

   
ОбСервис.СостояниеКлавиатуры("NumLock",0);

   
ОбСервис.СостояниеКлавиатуры("CapsLock",0);

   
ОбСервис.СостояниеКлавиатуры("ScrollLock",0);

    Для
икс = 1 По 12 Цикл

        Для
игрик = 1 По 10000 Цикл

           
Состояние(игрик);

        КонецЦикла;

       
сосНам = ОбСервис.СостояниеКлавиатуры("NumLock",);

       
сосКапс = ОбСервис.СостояниеКлавиатуры("CapsLock",);

        Если (
сосНам = 0) И (сосКапс = 0) Тогда

           
ОбСервис.СостояниеКлавиатуры("NumLock",1);

           
ОбСервис.СостояниеКлавиатуры("CapsLock",0);

           
ОбСервис.СостояниеКлавиатуры("ScrollLock",0);

        ИначеЕсли (
сосНам = 1) И (сосКапс = 0) Тогда

           
ОбСервис.СостояниеКлавиатуры("NumLock",0);

           
ОбСервис.СостояниеКлавиатуры("CapsLock",1);

           
ОбСервис.СостояниеКлавиатуры("ScrollLock",0);

        Иначе

           
ОбСервис.СостояниеКлавиатуры("NumLock",0);

           
ОбСервис.СостояниеКлавиатуры("CapsLock",0);

           
ОбСервис.СостояниеКлавиатуры("ScrollLock",1);

        КонецЕсли;

    КонецЦикла;


В итоге, диоды в порядке очереди, должны подмигивать Нам в порядке очереди: CapsLock, NumLock и ScrollLock.

2 комментария:

  1. Неплохо, но цикл я бы оптимизировал. Например, так:

    Для икс = 1 По 12 Цикл
    Для игрик = 1 По 10000 Цикл
    Состояние(игрик);
    КонецЦикла;
    ОбСервис.СостояниеКлавиатуры("NumLock",?(икс%3=0,1,0));
    ОбСервис.СостояниеКлавиатуры("CapsLock",?((икс+1)%3=0,1,0));
    ОбСервис.СостояниеКлавиатуры("ScrollLock",?((икс+2)%3=0,1,0));
    КонецЦикла;

    ОтветитьУдалить
  2. Хотя, в зависимости от того, что там тебе в состояниях возвращается...
    Может быть их и нужно читать...

    ОтветитьУдалить