Navigation





Здесь представлены готовые скрипты, которые идут с установкой программы.
Скрипты написаны на языке Defy. В самой программе есть помощник по языку.
В программе можно настроить запуск скриптов с определенным интервалом.
Можно добавлять свои скрипты.
Для удобства в пакет установки можно добавить и ваши скрипты, пишите на почту.


Синхронизация времени

// Устанавливает время на компьютере, если оно не совпадает с временем на сайте
Сайт      = Этот.Определить(0, Объекты.Вебстраница, Свойства.Адрес, "http://moolex.ru/time.php");
Результат = Сайт.Обновить();
Если (Результат<=0) Тогда
    Сообщить(Этот.Наименование, "Нет соединения");
    Возврат 0;
Конец;
Поз = Строки.Найти(Сайт.Текст, "DT=");
Если (Поз=0) Тогда
    Сообщить(Этот.Наименование, "Строка с точным временем не найдена");
    Возврат 0;
Конец;
Стр = Строки.Подстрока(Сайт.Текст, 4, 19);
Если (Строки.Длина(Стр)<>19) Тогда
    Сообщить(Этот.Наименование, "Строка с точным временем меньше 19 символов");
    Возврат 0;
Конец;
ТекМомент = Моменты.Момент(Стр);
Если (ТекМомент=0) Тогда
    Сообщить(Этот.Наименование, "Ошибка при преобразовании времени из строки");
    Возврат 0;
Конец;
ТекМомент = ТекМомент + 1;
Если (Числа.Модуль(ТекМомент-Моменты.Текущий)>1) Тогда
    Сообщить("Меняем время на компьютере "+Моменты.Текущий+" -> "+ТекМомент);
    Моменты.Текущий = ТекМомент;
Конец;


Блок в условие

// Заключает выделенный блок в условие(Кт+И)
Если (Окна.Класс="V8TopLevelFrame") Тогда
    СтарыйБуфер = Буфер.Текст;
    Нажать(Клавиши.Кт|Клавиши.С);
    СтрокаБуфера = Буфер.Текст;
    НовыйТекст   = Слова.Массив();
    // в начало получаемого текста добавим отступы
    Текст = Слова.Массив(СтрокаБуфера);
    Если (Текст.Количество()=0) Тогда Возврат 0; Конец;
    п = 0;
    Пока (п<Текст.Количество()) Цикл
        Если (Слова.Пустое(Текст.Получить(п))=0) Тогда Прервать; Конец;
        НовыйТекст.Добавить(Текст.Получить(п));
        п = п + 1;
    Конец;
    Текст = Слова.Массив(СтрокаБуфера, 1); // теперь анализируем полученный текст без пустых слов
    Если (Текст.Количество()=0) Тогда Возврат 0; Конец;
    НовыйТекст.Добавить("Если");
    НовыйТекст.Добавить("(");
    НовыйТекст.Добавить("  ");
    НовыйТекст.Добавить(")");
    НовыйТекст.Добавить("Тогда");
    НовыйТекст.Добавить(Слова.Перенос);
    п = 0;
    к = Текст.Количество();
    Пока (п<к) Цикл
        НовыйТекст.Добавить(Текст.Получить(п));
        п = п + 1;
    Конец;
    НовыйТекст.Добавить("КонецЕсли");
    НовыйТекст.Добавить(";");
    НовыйТекст.Добавить(Слова.Перенос);
    Буфер.Текст = Слова.Строка(НовыйТекст, 1);
    Нажать(Клавиши.Кт|Клавиши.М);
    Буфер.Текст = СтарыйБуфер;
Конец;


Вопрос в условие

// Преобразует конструкцию вопрос в условие и наоборот(Кт+Ш)
Если (Окна.Класс="V8TopLevelFrame") Тогда
    Нажать(Клавиши.Кт|Клавиши.С);
    СтрокаБуфера = Буфер.Текст;
    НовыйТекст   = Слова.Массив();
    // в начало получаемого текста добавим отступы
    Текст = Слова.Массив(СтрокаБуфера);
    Если (Текст.Количество()=0) Тогда Возврат 0; Конец;
    п = 0;
    Пока (п<Текст.Количество()) Цикл
        Если (Слова.Пустое(Текст.Получить(п))=0) Тогда Прервать; Конец;
        НовыйТекст.Добавить(Текст.Получить(п));
        п = п + 1;
    Конец;
    Текст = Слова.Массив(СтрокаБуфера, 1); // теперь анализируем полученный текст без пустых слов
    Если (Текст.Количество()=0)   Тогда Возврат 0; Конец;
    Если (Текст.Найти("Если")>=0) Тогда
        п0 = Текст.Найти("Если");
        п1 = Текст.Найти("Тогда");    Если  (п1=-1) Тогда Возврат; Конец;
        п2 = Текст.Найти("=",         п1+1, 1);     Если  (п2=-1)  Тогда Возврат; Конец;
        п3 = Текст.Найти("Иначе",     п2+1, 1);     Если  (п3=-1)  Тогда Возврат; Конец;
        п4 = Текст.Найти("=",         п3+1, 1);     Если  (п4=-1)  Тогда Возврат; Конец;
        п5 = Текст.Найти("КонецЕсли", п4+1, 1);     Если  (п5=-1)  Тогда Возврат; Конец;
        НовыйТекст.Добавить(Текст, п1+1, п2);
        НовыйТекст.Добавить("?(");
        НовыйТекст.Добавить(Текст, п0+1, п1-1);
        НовыйТекст.Добавить(",");
        НовыйТекст.Добавить(Текст, п2+1, п3-3);
        НовыйТекст.Добавить(",");
        НовыйТекст.Добавить(Текст, п4+1, п5-3);
        НовыйТекст.Добавить(");");
        НовыйТекст.Убрать(Слова.Перенос);
    Иначе
        п0 = Текст.Найти("?");
        п1 = Текст.Найти("("); Если  (п1=-1) Тогда Возврат; Конец;
        п2 = Текст.Найти(",",  п1+1, 1);     Если  (п2=-1)  Тогда Возврат; Конец;
        п3 = Текст.Найти(",",  п2+1, 1);     Если  (п3=-1)  Тогда Возврат; Конец;
        п4 = Текст.Найти(")",  п3+1, 1);     Если  (п4=-1)  Тогда Возврат; Конец;
        НовыйТекст.Добавить("Если");
        НовыйТекст.Добавить(Текст, п1, п2-1);
        НовыйТекст.Добавить(")");
        НовыйТекст.Добавить("Тогда");
        НовыйТекст.Добавить(Слова.Перенос);
        п = 0;
        Пока (п<п0) Цикл
            НовыйТекст.Добавить(Текст.Получить(п));
            п = п + 1;
        Конец;
        НовыйТекст.Добавить(Текст, п2+1, п3-1);
        НовыйТекст.Добавить(";");
        НовыйТекст.Добавить(Слова.Перенос);
        НовыйТекст.Добавить("Иначе");
        НовыйТекст.Добавить(Слова.Перенос);
        п = 0;
        Пока (п<п0) Цикл
            НовыйТекст.Добавить(Текст.Получить(п));
            п = п + 1;
        Конец;
        НовыйТекст.Добавить(Текст, п3+1, п4-1);
        НовыйТекст.Добавить(";");
        НовыйТекст.Добавить(Слова.Перенос);
        НовыйТекст.Добавить("КонецЕсли");
        НовыйТекст.Добавить(";");
        НовыйТекст.Добавить(Слова.Перенос);
    Конец;
    Буфер.Текст = Слова.Строка(НовыйТекст, 1);
    Нажать(Клавиши.Кт|Клавиши.М);
Конец;


Сворачивание активности пользователя

// если объектов в списке активности пользователя много(более 10000), это скажется на скорости работы программы.
// данный скрипт перемещает объекты списка в отдельный список и сворачивает по классу окна
// примерное время выполнения скрипта 3 минуты
Сообщения.Очистить();
Статистика = Этот.Владелец.Определить(0,          Объекты.Группа,   Свойства.Наименование, "Статистика");
Активность = Этот.Владелец.Определить(Статистика, Объекты.Сведения, Свойства.Наименование, "Активность пользователя");
Данные     = Активность.Определить(0,             Объекты.Список,   Свойства.Наименование, "Данные");
Сообщить("Количество объектов в списке активности", Данные.Количество());
Если (Данные.Количество()<5000) Тогда Возврат; Конец;
Архив  = Этот.Владелец.Определить(Активность, Объекты.Сведения, Свойства.Наименование, "Архив активности");
Список = Архив.Определить(0,                  Объекты.Список,   Свойства.Наименование, "Данные");

перехват = Главный.'Перехват клавиш и мыши';
Если (перехват=1) Тогда Главный.'Перехват клавиш и мыши' = 0; Конец;
Подождать(3);

// для проверки сохраним общий интервал
ОбщийИнтервал = Данные.Итог("Интервал")+ Список.Итог("Интервал");

Архив.'Наименование поля с моментом'   = "Дата";
Архив.'Наименование поля с итогом'     = "Интервал";
Архив.'Наименование поля с аналитикой' = "Класс окна";
Архив.'Сортировать по итогу'           = 1;

Список.Колонки.Определить(Свойства.Дата);
Список.Колонки.Определить(Свойства.'Класс окна');
Список.Колонки.Определить(Свойства.Интервал);

н          = 0;
Перенесено = 0;
кондата    = Моменты.НачалоМесяца(Моменты.Текущий, 3); // переносить будем данные старее трех месяцев

Сообщить("Переносим данные до даты", кондата);
Сообщить("   некоторые классы окон объединяем...");
Для Объект Из Данные Цикл
    м = Моменты.НачалоДня(Объект.'Момент времени начала');
    Если (м<кондата) Тогда
        ОбъектНовый          = Список.Добавить(Объекты.Объект);
        ОбъектНовый.Дата     = м;
        ОбъектНовый.Интервал = Объект.Интервал;
        класс                = Объект.'Класс окна';
        Если (Строки.Найти(класс, "Afx")==1)                    Тогда класс = "Afx";                Конец;
        Если (Строки.Найти(класс, "V8NewLocalFrameBaseWnd")==1) Тогда класс = "V8TopLevelFrame";    Конец;
        Если (Строки.Найти(класс, "V8NewLocalFrame")==1)        Тогда класс = "V8TopLevelFrame";    Конец;
        Если (Строки.Найти(класс, "V8PopupBar")==1)             Тогда класс = "V8TopLevelFrame";    Конец;
        Если (Строки.Найти(класс, "MozillaUIWindowClass")==1)   Тогда класс = "MozillaWindowClass"; Конец;
        ОбъектНовый.'Класс окна' = класс;
        Объект.Неиспользуемый    = 1;
        Перенесено               = Перенесено + 1;
    Конец;
    н = н + 1;
Конец;
Если (Перенесено>0) Тогда
    Данные.Удалить("Неиспользуемый", 1); // удаляем из объекта Активность пользователя старые данные
    Свернуто = Список.Свернуть("Дата,Класс окна", "Интервал");
    Сообщить("Перенесено", Перенесено);
    Сообщить("Свернуто",   Свернуто);
    Если (ОбщийИнтервал<>(Данные.Итог("Интервал")+Список.Итог("Интервал"))) Тогда
        Сообщить("Общий интервал не равен!");
    Конец;
Конец;
Главный.'Перехват клавиш и мыши' = перехват;
Сообщить("Скрипт выполнен, осталось объектов", Данные.Количество());


Сократить буфер

// Скрипт удаляет из списка буферов обмена объекты, которые ни разу не выбирались и старше двух месяцев
// также удаляем все строки состоящие из одного слова и старше недели
// также удаляем выражения и числа старше недели
// Скрипт выполняется, если объектов больше 6000
СписокБуферов = Главный.Определить(0, Объекты.Дерево, Свойства.Наименование, "Буфер");
Если (СписокБуферов.Количество()<6000) Тогда Возврат; Конец;
дата1 = Моменты.НачалоМесяца(Моменты.Текущий, 2);
дата2 = Моменты.НачалоДня(Моменты.Текущий,    7);
Сообщить("Запуск, Сократим список буферов обмена, было объектов", СписокБуферов.Количество());
ТипСтрока    = СписокБуферов.Колонки.Целое(Свойства.Тип, "Строка");
ТипВыражение = СписокБуферов.Колонки.Целое(Свойства.Тип, "Выражение");
ТипЧисло     = СписокБуферов.Колонки.Целое(Свойства.Тип, "Число");
Для Объект Из СписокБуферов Цикл
    Если (Объект.'Количество выборов'<1) Тогда
        Если (Объект.Создан<дата1) Тогда
            Объект.Неиспользуемый = 1;
        Иначе
            Если (Объект.Создан<дата2) Тогда
                Если (Объект.Тип=ТипСтрока) Тогда
                    Если (Объект.Целое(Свойства.Текст)>0) Тогда // в строке только одно слово
                        Объект.Неиспользуемый = 1;
                    Конец;
                Конец;
                Если (Объект.Тип=ТипВыражение) Тогда
                    Объект.Неиспользуемый = 1;
                Конец;
                Если (Объект.Тип=ТипЧисло) Тогда
                    Объект.Неиспользуемый = 1;
                Конец;
            Конец;
        Конец;
    Конец;
Конец;
СписокБуферов.Удалить("Неиспользуемый", 1);
Сообщить("Завершено, в списке буферов обмена осталось объектов", СписокБуферов.Количество());


Сократить буфер - слова

// Все буфера состоящие из одного слова поместим в один объект
СписокБуферов = Главный.Определить(0, Объекты.Дерево, Свойства.Наименование, "Буфер");
Сообщить("Запуск, Сократим список буферов обмена - работаем со словами, было объектов", СписокБуферов.Количество());
ТипСтрока                        = СписокБуферов.Колонки.Целое(Свойства.Тип, "Строка");
ОбъектНовый                      = СписокБуферов.Определить(0,               Объекты.Текст, Свойства.Наименование, "Список слов");
ОбъектНовый.'Количество выборов' = 10;
ОбъектНовый.Тип                  = СписокБуферов.Колонки.Целое(Свойства.Тип, "Текст");
Текст                            = ОбъектНовый.Текст;
Для Объект Из СписокБуферов Цикл
    Если (Объект.'Количество выборов'<2) Тогда
        Если (Объект.Целое(Свойства.Текст)>0) Тогда // в строке только одно слово
            Текст.Добавить(Объект.Текст);
            Объект.Неиспользуемый = 1;
        Конец;
    Конец;
Конец;
ОбъектНовый.Текст = Текст;
СписокБуферов.Удалить("Неиспользуемый", 1);
Сообщить("Завершено, в списке буферов обмена осталось объектов", СписокБуферов.Количество());


Очистка временных директорий

// Удаляет временные файлы и папки с компьютера
Напомнить("Подождите...", Этот.Наименование);
Подождать(1);
Текст = "";
А     = Компьютеры.Директории("%TEMP%");
К     = Файлы.Очистить(А);
Текст.Добавить("Удалено "+К+" файлов и папок из "+А);
А = Компьютеры.Директории("%WINDIR%");
А = А + "\Temp";
К = Файлы.Очистить(А);
Текст.Добавить("Удалено "+К+" файлов и папок из "+А);
Сообщить(Текст);
Напомнить(Текст, Этот.Наименование, 15);


Перезапуск Ammyy

// При отключении интернета программа Ammyy выдает окно с ошибкой и не подключается заново сама
// Закроем окно с ошибкой и подключим программу заново
Если (Окна.Есть("Ammyy", "#")) Тогда
    Окна.Активизировать("Ammyy", "#");
    Нажать(Клавиши.Ввод);
    Подождать(2);
    Нажать(Клавиши.Ввод);
Конец;
Если (Окна.Есть("Proxy Setting", "#")) Тогда
    Окна.Активизировать("Proxy Setting", "#");
    Нажать(Клавиши.Ввод);
Конец;


Поиск выделенного текста

// поиск выделенного текста в интернет(Кт+LWin)
Стр       = Окна.Текст;
Настройка = Главный.Найти(Свойства.Наименование, "Настройка");
Если (Настройка=0) Тогда Возврат; Конец;
Поисковики = Настройка.Найти(Свойства.Наименование, "Настройка поисковиков");
Если (Поисковики=0) Тогда Возврат; Конец;
Индекс = Спросить(Стр, "Поиск строки", 1, , , Поисковики);
Если (Индекс=-1) Тогда Возврат; Конец;
Выбранный = Поисковики.Получить(Индекс);
Стр       = Выбранный.'Префикс для адресной строки'+ Стр;
Запустить(Стр);


Перевернуть выделенный текст

ТекстСтарый = Окна.Текст;
ТекстНовый  = Строки.Конвертировать(ТекстСтарый);
Если (ТекстСтарый<>ТекстНовый) Тогда
    Окна.Текст = Текст;
Конец;


Исправить выделенный текст

// Исправление орфографических ошибок в выделенном тексте с помощью сервиса yandex.speller.
// По умолчанию в программе Faster данный скрипт подключен к шорткату'Регистр Регистр'('Caps Caps').
// После запуска Faster в любом редакторе выделите текст или слово с ошибками и нажмите два раза кнопку'Регистр'('Caps lock').
// Для работы скрипта необходим интернет.
Текст = Окна.Текст;
Если (Текст="") Тогда Возврат; Конец;
Страница        = Этот.Определить(0,                                                         Объекты.Вебстраница, Свойства.Наименование, "Временная");
Страница.Адрес  = "http://speller.yandex.net/services/spellservice/checkText?ie=1251&text="+ Текст;
Результат       = Страница.Обновить();
уровень         = 0;
смещение        = 1;
исправлений     = 0;
СтрокаАтрибутов = "";
Если (Результат>0) Тогда
    Структура = Страница.Определить(0, Объекты.Дерево, Свойства.Наименование, "Структура");
    Для Объект Из Структура Цикл
        Если ((уровень=0)И(Объект.Тег="error")) Тогда
            СтрокаАтрибутов = Объект.Атрибуты;
            уровень         = 1;
        Конец;
        Если ((уровень=1)И(Объект.Тег="word")) Тогда
            уровень = 2;
        Конец;
        Если ((уровень=2)И(Объект.Тег="s")) Тогда
            Позиция    = Числа.Число(СтрокаАтрибутов.Атрибуты.Получить("pos"));
            Длина      = Числа.Число(СтрокаАтрибутов.Атрибуты.Получить("len"));
            Правильное = Объект.Значение;
            // Сообщить(Правильное, Позиция, Длина);
            Текст.Изменить(Позиция+смещение, Длина, Правильное);
            смещение    = смещение    + Правильное.Длина() - Длина;
            уровень     = 0;
            исправлений = исправлений + 1;
        Конец;
    Конец;
Конец;
Если (исправлений>0) Тогда
    Окна.Текст = Текст;
Конец;


Исправить набранный текст

// Исправление орфографических ошибок в только что введенном тексте с новой строки с помощью сервиса yandex.speller.
// По умолчанию в программе Faster данный скрипт подключен к шорткату'Конец Конец'('End End').
// После запуска Faster в любом редакторе наберите предложение с ошибками и нажмите два раза кнопку'Конец'('End').
// Для работы скрипта необходим интернет.
Текст = Окна.'Набранный текст';
Если (Текст="") Тогда Возврат; Конец;
Было            = Текст;
Страница        = Этот.Определить(0,                                                         Объекты.Вебстраница, Свойства.Наименование, "Временная");
Страница.Адрес  = "http://speller.yandex.net/services/spellservice/checkText?ie=1251&text="+ Текст;
Результат       = Страница.Обновить();
уровень         = 0;
смещение        = 1;
исправлений     = 0;
СтрокаАтрибутов = "";
Если (Результат>0) Тогда
    Структура = Страница.Определить(0, Объекты.Дерево, Свойства.Наименование, "Структура");
    Для Объект Из Структура Цикл
        Если ((уровень=0)И(Объект.Тег="error")) Тогда
            СтрокаАтрибутов = Объект.Атрибуты;
            уровень         = 1;
        Конец;
        Если ((уровень=1)И(Объект.Тег="word")) Тогда
            уровень = 2;
        Конец;
        Если ((уровень=2)И(Объект.Тег="s")) Тогда
            Позиция    = Числа.Число(СтрокаАтрибутов.Атрибуты.Получить("pos"));
            Длина      = Числа.Число(СтрокаАтрибутов.Атрибуты.Получить("len"));
            Правильное = Объект.Значение;
            // Сообщить(Правильное, Позиция, Длина);
            Текст.Изменить(Позиция+смещение, Длина, Правильное);
            смещение    = смещение    + Правильное.Длина() - Длина;
            уровень     = 0;
            исправлений = исправлений + 1;
        Конец;
    Конец;
Конец;
Если (исправлений>0) Тогда
    // Сообщить(Было, Текст);
    Нажать(Клавиши.Стереть, Строки.Длина(Было)); // стираем старый текст
    Ввести(Текст);          // вводим правильный текст
Конец;


Исправить набранное слово

// Исправление орфографических ошибок в только что введенном слове с помощью сервиса yandex.speller.
// По умолчанию в программе Faster данный скрипт подключен к шорткату'Пробел Пробел'('Spacec Space').
// После запуска Faster в любом редакторе наберите слово с ошибками, и нажмите два раза кнопку'Пробел'('Space').
// Для работы скрипта необходим интернет.
Текст = Строки.Строка(Окна.'Набранный текст');
Если (Текст="") Тогда Возврат; Конец;
// определим последнее слово
Позиция = Строки.Найти(Текст, " ", 1, 1);
Если (Позиция>0) Тогда
    Текст = Строки.Подстрока(Текст, Позиция+1, Текст.Длина()-Позиция-1);
Конец;
Было            = Текст;
Страница        = Этот.Определить(0,                                                         Объекты.Вебстраница, Свойства.Наименование, "Временная");
Страница.Адрес  = "http://speller.yandex.net/services/spellservice/checkText?ie=1251&text="+ Текст;
Результат       = Страница.Обновить();
уровень         = 0;
смещение        = 1;
исправлений     = 0;
СтрокаАтрибутов = "";
Если (Результат>0) Тогда
    Структура = Страница.Определить(0, Объекты.Дерево, Свойства.Наименование, "Структура");
    Для Объект Из Структура Цикл
        Если ((уровень=0)И(Объект.Тег="error")) Тогда
            СтрокаАтрибутов = Объект.Атрибуты;
            уровень         = 1;
        Конец;
        Если ((уровень=1)И(Объект.Тег="word")) Тогда
            уровень = 2;
        Конец;
        Если ((уровень=2)И(Объект.Тег="s")) Тогда
            Позиция    = Числа.Число(СтрокаАтрибутов.Атрибуты.Получить("pos"));
            Длина      = Числа.Число(СтрокаАтрибутов.Атрибуты.Получить("len"));
            Правильное = Объект.Значение;
            // Сообщить(Правильное, Позиция, Длина);
            Текст.Изменить(Позиция+смещение, Длина, Правильное);
            смещение    = смещение    + Правильное.Длина() - Длина;
            уровень     = 0;
            исправлений = исправлений + 1;
        Конец;
    Конец;
Конец;
Если (исправлений>0) Тогда
    // Сообщить(Было, Текст);
    Нажать(Клавиши.Стереть, Строки.Длина(Было)+2); // стираем старый текст
    Ввести(Текст+" ");      // вводим правильный текст
Конец;


Сохранить положение гаджетов

// Сохраняет положение гаджетов в отдельный файл настроек в зависимости от количества подключенных мониторов
Путь = Компьютеры.Директории("%APPDATA%");
Путь = Строки.Заменить(Путь, "Roaming", "Local\Microsoft\Windows Sidebar");
А    = "";
Для н = 1 По Мониторы.Количество() Цикл
    А = А + "-"+ Строки.Строка(н)+ "-"+ Мониторы.Лево(н-1)+ "-"+ Мониторы.Ширина(н-1);
Конец;
ПутьКФайлу = Путь + "\settings"+ А + ".ini";
Файлы.Копировать(Путь+"\settings.ini", ПутьКФайлу);
// Запустить(Путь);
Сообщить("Настройки сохранены в файл", ПутьКФайлу);


Восстановить положение гаджетов

// Восстанавливает положение гаджетов из заданного файла настроек в зависимости от количества подключенных мониторов
Путь = Компьютеры.Директории("%APPDATA%");
Путь = Строки.Заменить(Путь, "Roaming", "\Local\Microsoft\Windows Sidebar");
// Сообщить(Путь);
А = "";
Для н = 1 По Мониторы.Количество() Цикл
    А = А + "-"+ Строки.Строка(н)+ "-"+ Мониторы.Лево(н-1)+ "-"+ Мониторы.Ширина(н-1);
Конец;
ИмяФайла = Путь + "\settings"+ А + ".ini";
Если (Файлы.Есть(ИмяФайла)) Тогда
    Запустить(Компьютеры.Директории("%WINDIR%")+"\System32\taskkill.exe", "/f /im sidebar.exe");
    Подождать(1);
    Файлы.Копировать(ИмяФайла, Путь+"\settings.ini");
    Подождать(1);
    Запустить("C:\Program Files\Windows Sidebar\sidebar.exe");
Иначе
    Сообщить("Файл с настройками не найден", ИмяФайла);
Конец;


Создание кода 1С из буфера обмена

// Создает код 1С на основе содержимого буфера обмена
МБуфер = Слова.Массив(Буфер.Текст); // массив слов из буфера обмена
МТекст = Слова.Массив();            // новый массив слов

// 1.Если в буфере обмена в буфере находятся строки с имена колонок из отладчика,
// то формируем код 1С вида ТЗ.Колонки.Добавить(Имя);
Если (МБуфер.Количество()>14) Тогда
    Если (МБуфер.Найти("Индекс")=0) Тогда
        Если (МБуфер.Найти("Имя")=8) Тогда
            Если (МБуфер.Найти("Ширина")=14) Тогда
                Если (МБуфер.Получить(МБуфер.Количество()-1)<>Слова.Перенос) Тогда
                    МБуфер.Добавить(Слова.Перенос); // иногда в конце нет переноса
                Конец;
                п = 15 + 8;
                к = п;
                Пока (к<МБуфер.Количество()) Цикл
                    Если (МБуфер.Получить(к)=Слова.Перенос) Тогда
                        // Сообщить(Текст.Получить(п));
                        МТекст.Добавить("ТЗ.Колонки.Добавить(");
                        МТекст.Добавить(МБуфер.Получить(п-1));
                        МТекст.Добавить(МБуфер.Получить(п));
                        МТекст.Добавить(МБуфер.Получить(п+1));
                        МТекст.Добавить(");");
                        МТекст.Добавить(Слова.Перенос);
                        п = к + 8;
                    Конец;
                    к = к + 1;
                Конец;
            Конец;
        Конец;
    Конец;
Конец;

Если (МТекст.Количество()>0) Тогда
    Текст = Слова.Строка(МТекст, 1);
    // Для Строка Из Текст Цикл
    // Сообщить(Строка);
    // Конец;
    Буфер.Текст = Текст;
    Сообщить("Код 1С сформирован и сохранен в буфере обмена");
Конец;


Увеличение номера документов в конфигураторе 1С 8

// Автоматически увеличиваем номера у первых 10 документов на четыре символа в открытой конфигурации 1С
// Для работы необходимо открыть одну конфигурацию и спозиционироваться на первом документе
// и обязательно подкрепить/открепить окно с самой конфигурацией(иначе не срабатывает клавиша Отмена в скрипте)
// и запустить данный скрипт(поставить курсор в любом месте скрипта и нажать F9)
// во время работы скрипта лучше не нагружать компьютер другими процессами
КлассОкна = "V8TopLevelFrame";
Если (Окна.Есть(, КлассОкна)=0) Тогда
    Сообщить("Нет открытой 1С");
    Возврат;
Конец;
Клавиши.Задержка = 100; // задержка при имитации нажатий в миллисекундах, для наглядности можно увеличить
Окна.Активизировать(, КлассОкна);
Для к = 1 По 10 Цикл // здесь задаем количество обрабатываемых документов
    Нажать(Клавиши.Ат|Клавиши.Ввод); // вызываем свойства документа
    Нажать(Клавиши.Вниз,             8); // переходим на поле с длиной номера
    Нажать(Клавиши.Кт|Клавиши.С);    // копируем в буфер обмена
    Подождать(1);                    // ждем одну секунду, чтобы прошли все события связанные с буфером обмена
    Сообщить(к,                      Буфер.Текст);
    А = Числа.Число(Буфер.Текст);
    Если (А=0) Тогда // что-то не так, выходим
        Сообщить("В буфере обмена не число!");
        Возврат;
    Конец;
    А = А + 4; // здесь задаем на сколько знаков надо увеличить номер
    Ввести(Строки.Строка(А)); // вводим новое значение
    Нажать(Клавиши.Вправо);
    Нажать(Клавиши.Ввод);
    Подождать(1);
    Нажать(Клавиши.Отмена); // возвращаемся к списку документов, к основному окну конфигурации
    Нажать(Клавиши.Вниз);
Конец;
Сообщить("Готово");


Свернуть текст в буфере обмена

// Скрипт показывает как в буфере обмена удалить одинаковые строки.
// В буфере обмена должен быть текст
Текст = Буфер.Текст; // получаем текст из буфера
Текст.Свернуть(); // сворачиваем текст, т.е.удаляем из текста одинаковые строки
Буфер.Текст = Текст; // возвращаем в буфер полученный текст


Установить ClearType

// При входе на удаленную машину часто слетает установка ClearType
// в ручную его постоянно устанавливать надоедает, автоматизируем процесс
Подождать(1);
Запустить("C:\Windows\System32\cttune.exe"); // Запустим ClearType
Подождать(3);
Нажать(Клавиши.Пробел);
Нажать(Клавиши.Таб);
Нажать(Клавиши.Ввод, 6);


Закрыть все открытые папки

// закроем все открытые папки
Список = Окна.Определить("", "CabinetWClass");
Для Объект Из Список Цикл
    Окна.Закрыть(Объект.'Идентификатор процесса');
Конец;


Анализ внешних модулей 1С

// Автоматическая проверка текущей обработки в конфигураторе 1С 8 при нажатии F7
// Для работы необходимо запустить отдельный процесс Defy и заменить ниже по тексту полный путь к этому процессу
Стр = Окна.Заголовок();
// Сообщить(Стр);
есть       = 0;
расширение = "epf";
Если (Строки.Найти(Стр, расширение)>0) Тогда
    есть = 1;
Иначе
    расширение = "erf";
    Если (Строки.Найти(Стр, расширение)>0) Тогда
        есть = 1;
    Конец;
Конец;
Если (есть=0) Тогда
    // если не определили путь к файлу в конфигураторе,
    // очистим сообщения и проверим модуль
    Нажать(Клавиши.Кт|Клавиши.Ат|Клавиши.Я);
    Нажать(Клавиши.Кт|Клавиши.F7);
    Возврат;
Конец;
кон = Строки.Найти(Стр, расширение);
нач = кон               - 1;
Пока (нач>1) Цикл
    Если (Строки.Подстрока(Стр, нач, 1)=":") Тогда
        нач = нач - 1;
        Прервать;
    Конец;
    нач = нач - 1;
Конец;
ПутьКФайлу = Строки.Подстрока(Стр, нач, кон-нач)+ расширение;
// Сообщить(ПутьКФайлу);
Нажать(Клавиши.Кт|Клавиши.Ы);
Нажать(Клавиши.Кт|Клавиши.F7);
Подождать(1);
Буфер.Текст = ПутьКФайлу; // скопируем путь к файлу в буфер
// запустим анализ в другой программе
Модули.Запустить("C:\Programs\Defy\Defy.exe", "Анализ внешних модулей 1С", "Проверить", ПутьКФайлу);


Сформировать сообщить

// Копируем в буфер обмена имя переменной в кофигураторе в модуле
// переходим на новую строку и нажимаем Кт+ Ь(Ct+ M)
Переменная = Буфер.Текст;
ТекстНовый = "Сообщить("""+ Переменная + "=""+СокрЛП("+ Переменная + "));";
Вставить(ТекстНовый);


Быстрый поиск в активном окне

// быстрый поиск в RAD XE и 1С при нажатии F6
// подключение смотри в настройках-шорткаты Faster
// можно добавить и другие приложения
Если (Окна.Класс="TIDEInsightForm") Тогда
    Нажать(Клавиши.Отмена);
    Нажать(Клавиши.Кт|Клавиши.Шт|Клавиши.А);
    Нажать(Клавиши.Ввод);
Конец;
Если (Окна.Класс="V8TopLevelFrame") Тогда
    Нажать(Клавиши.Кт|Клавиши.Шт|Клавиши.А);
    Нажать(Клавиши.Ввод);
Конец;


Средняя мышь

// быстрый поиск выделенной переменной в RAD XE и 1С
// Сообщить(Окна.Класс);
Если (Окна.Класс="TAppBuilder") Тогда
    Нажать(Клавиши.Средняя);
    Нажать(Клавиши.Кт|Клавиши.А);
    Нажать(Клавиши.Таб);
    Нажать(Клавиши.Ввод);
Конец;
Если (Окна.Класс="V8TopLevelFrame") Тогда
    Нажать(Клавиши.Кт|Клавиши.А);
    Нажать(Клавиши.Ввод);
Конец;


Скрипт в отдельном окне

Запустить("Resources\Defy-m.exe", "script Data\script.txt -ws=300,200,700,600");


Калькулятор в отдельном окне

Запустить("Resources\Defy-m.exe", "calc Data\calc.txt -ws=300,300,650,400");


Текстовая заметка в отдельном окне

Запустить("Resources\Defy-m.exe", "text Data\note.txt -ws=300,300,650,500");


Анализ директории

Запустить("Resources\Defy-m.exe", "dir -ws=350,200,1200,800");


Автовыключение компьютера

// Автоматическое выключение компьютера через 23 часа после запуска программы
// Для выполнения скрипта установите интервал автовыполнения скрипта 5 минут и активируйте скрипт
дельта = Числа.Число(Моменты.Текущий-Главный.'Момент запуска');
Если (дельта>23* 60* 60) Тогда
    Компьютеры.Выключить(0); // выключить компьютер
Конец;


Автовыключение компьютера вечером

// Автоматическое выключение компьютера вечером
// Для выполнения скрипта установите интервал автовыполнения скрипта 5 минут и активируйте скрипт
Если (Моменты.Час(Моменты.Текущий)=23) Тогда
    Компьютеры.Выключить(0); // выключить компьютер
Конец;


Скрипт для клавиши F7

// Многофункциональный шорткат
// Если нажата в 1С конфигураторе в макете-добавить 1 к числу в ячейке в макете
// Если нажата в 1С конфигураторе-отладка выражения в конфигураторе в режиме отладки(выделяем переменную и нажимаем F7)
// Если нажата в 1С Предприятии в УФ-переоткрыть ранее открытую обработку
// Сообщить(Окна.Класс);
Если (Окна.Класс="V8TopLevelFrame") Тогда
    Если (Строки.Найти(Окна.Заголовок, "Макет")>0) Тогда // редактируется макет
        Нажать(Клавиши.Ввод);
        Нажать(Клавиши.Кт|Клавиши.C);
        Подождать(1);
        ч = Числа.Число(Буфер.Текст)+ 1;
        Ввести(ч);
        Нажать(Клавиши.Ввод);
        Возврат;
    Конец;
    // Отладка переменной в конфигураторе
    Нажать(Клавиши.Шт|Клавиши.F9);
    Нажать(Клавиши.Таб);
    Нажать(Клавиши.Вправо);
    Нажать(Клавиши.F2); // для тех кому лень нажимать F2
    Возврат;
Конец;
Если (Окна.Класс="V8TopLevelFrameSDI") Тогда
    // Переоткрыть внешнюю обработку в УФ Предприятие
    Нажать(Клавиши.Кт|Клавиши.F4);
    Нажать(Клавиши.Кт|Клавиши.Шт|Клавиши.B);
    Нажать(Клавиши.F10);
    Нажать(Клавиши.Вниз);
    Нажать(Клавиши.Вправо);
    Нажать(Клавиши.1);
Конец;


Дубликат строки в текстовых редакторах

// в Notepad++есть хороший шорткат для дублирования текущей строки
// добавляем такой же в редакторе кода 1С
Если (Окна.Класс="V8TopLevelFrame") Тогда
    Нажать(Клавиши.Отмена);
    Нажать(Клавиши.Начало);
    Нажать(Клавиши.Начало);
    Нажать(Клавиши.Кт|Клавиши.С);
    Нажать(Клавиши.Кт|Клавиши.М);
Конец;


Забрать текст из Войснот

// Для работы необходимо установить Chrome и расширение Войснот по адресу voicenote.in
// размеры окна Войснот должны быть не менее 1000 на 500 пикселей
ИдОкна = Окна.Идентификатор("Войснот", "Chrome_WidgetWin_1");
Если (Окна.Есть(ИдОкна)) Тогда
    ВД1 = Этот.Определить(0, Объекты.Текст,       Свойства.Наименование, "Заголовок активного окна");
    ВД2 = Этот.Определить(0, Объекты.Текст,       Свойства.Наименование, "Текст активного окна");
    X   = Окна.Лево(ИдОкна)+ Окна.Ширина(ИдОкна)- 30;
    Y   = Окна.Верх(ИдОкна)+ Окна.Высота(ИдОкна)- 425;
    Если (Строки.Найти(Окна.Заголовок, "Войснот")=1) Тогда
        // если текущее окно сам Войснот, выделяем весь текст и вставляем в редактор(окно которое было активно)
        Если (ВД1.Текст<>"") Тогда
            Буфер.Запомнить();
            Нажать(Клавиши.Кт|Клавиши.A);
            Нажать(Клавиши.Кт|Клавиши.X);
            Подождать(1);
            // отключим запись голосом
            Мышь.Запомнить();
            Нажать(Клавиши.Левая, 1, X, Y);
            Мышь.Восстановить();
            // вставим текст в ранее активный редактор
            Окна.Активизировать(ВД1.Текст, ВД2.Текст);
            Нажать(Клавиши.Кт|Клавиши.V);
            Буфер.Восстановить();
        Конец;
    Иначе // в любом редакторе
        ВД1.Текст = Окна.Заголовок;
        ВД2.Текст = Окна.Класс;
        // сделаем активным Войснот
        Окна.Показать(ИдОкна);
        Окна.Активизировать(ИдОкна);
        // включим запись голосом
        Подождать(1);
        Мышь.Запомнить();
        Нажать(Клавиши.Левая, 1, X, Y);
        Мышь.Восстановить();
        // можно что-то сказать
    Конец;
Иначе
    Напомнить("Войснот не запущен");
Конец;


Подмена заголовка 1С

// корректируем заголовок во всех запущенных 1С
// в начало заголовка добавляем имя базы данных
// если Компьютеры.Запрос возвращает ошибку, то вероятно на компьютере не запущена служба WMI
// данный скрипт лучше запускать в отдельном потоке, для этого добавьте код в скрипт'Старт'
// НС=Подмена заголовка 1С;
// Если(Окна.Есть(НС,TFormMainDefy)=0)Тогда Скрипты.Запустить(, НС, 5);Конец;

Окна1С = Окна.Определить(, "V8TopLevelFrame");
Для Окно1С Из Окна1С Цикл
    ЗаголовокБыл = Окно1С.'Заголовок окна';
    ПервыйСимвол = Строки.Подстрока(ЗаголовокБыл, 1, 1);
    Если (Строки.Есть(ПервыйСимвол, ".,:,·")) Тогда Продолжить; Конец;
    ИдОкна = Окно1С.'Идентификатор окна';
    Список = Компьютеры.Запрос("SELECT CommandLine FROM WIN32_Process WHERE ProcessId="+Окна.Процесс(ИдОкна));
    Если (Список<=0) Тогда
        Сообщить("Ошибка при вызове Компьютеры.Запрос", Ошибки.Строка(Список));
        Этот.Отмечен = 0; // отключаем автовыполнение скрипт
        Возврат;
    Конец;
    Для Объект Из Список Цикл
        Стр = Объект.Текст;
        Если (Строки.Подстрока(Стр, 1, 11)="CommandLine") Тогда
            // Сообщить(Стр);
            ИмяБД            = "";
            ПрефиксИмени     = "";
            ПараметрыКоманды = Строки.Разделить(Стр, " ", , """");
            Для Параметр Из ПараметрыКоманды Цикл
                Если (Строки.Подстрока(Параметр, 1, 2)="/F") Тогда // файловая база
                    ИмяБД = Параметр; ПрефиксИмени = ".";
                    Прервать;
                Конец;
                Если (Строки.Подстрока(Параметр, 1, 2)="/S") Тогда // серверная база
                    ИмяБД = Параметр; ПрефиксИмени = ":";
                    Прервать;
                Конец;
                Если (Строки.Подстрока(Параметр, 1, 7)="/IBName") Тогда // имя базы в списке баз стартера 1С
                    ИмяБД = Строки.Заменить(Параметр, "IBName", ""); ПрефиксИмени = "·";
                    Прервать;
                Конец;
            Конец;
            Если (ИмяБД<>"") Тогда
                Поз = Строки.Найти(ИмяБД, Символы.ОС, 1, 1);
                Если (Поз=0) Тогда Поз = Строки.Найти(ИмяБД, "/", 1, 1); Конец;
                ИмяБД          = Строки.Подстрока(ИмяБД, Поз+1, Строки.Длина(Параметр)-Поз);
                ИмяБД          = Строки.Заменить(ИмяБД,  """",  "");
                ЗаголовокНовый = ПрефиксИмени            +      ИмяБД + " - "+ ЗаголовокБыл;
                // Сообщить(ЗаголовокНовый);
                Окна.Заголовок(ИдОкна, ЗаголовокНовый);
            Иначе
                Сообщить("ИмяБД не определено", Стр);
            Конец;
        Конец;
    Конец;
Конец;