Бывают такие программы, которые нужны раз в полгода. И все бы ничего, только их функциональность никак не следует из названия. А еще у разработчиков есть милая привычка подсовывать свою торговую марку в название программы. Поди догадайся, что какой-нибудь MediaClick Fortune 2009 на самом деле ищет одинаковые изображения на дисках (название выдумано).

Для решения проблемы я сделал себе «меню домохозяйки». Это просто папочка, лежащая в легко доступном месте, и содержащая ярлыки всех прикладных программ. То же, что и в папке «Программы» Windows. Отличие в том, что во-первых, там нет никаких вложенных папок, только плоский список, а во-вторых, имена программ дополнены краткими описаниями. Вместо «Fortune 2009» мы пишем «Удалить дубли фоток - Fortune 2009». И так для всех программ, как установленных, так и идущих без инсталлятора и не получивших ссылки из главного меню «Программы». Кстати, в процессе создания этой папочки можно столько всего поудалять!

Приведенный рецепт работает и в Windows XP, но в Vista и Windows 7 добавляется еще бонус: там можно запускать программы через поиск по названию. То есть можно прямо так и набирать «удалить дубли».

И еще кое-что: в окне свойств ярлыка есть поле «Комментарий». Если указать в нем категорию, к которой относится программа, например «Видео», «Фото», «Разработка», после можно будет при просмотре вашей папки в Проводнике сгруппировать ярлыки по этим категориям.

Кстати, вы не обязаны ограничиваться только ярлыками программ. По той же схеме можно наделать себе линков на полезные сайты. Например, «Учиться быстро - homework pro отзывы». Тем более, что и многие приложения нынче в сети.

Формат блога плохо подходит для выкладывания чего-либо, кроме текста. Но я ваяю еще и небольшие скриптики для облегчения рутинных действий. Расчесав репу, решил сделать посвященный этому делу подраздел. На DoItQ Tools переезжают макросы для Microsoft Office и родственных пакетов, обещаются новые, а также появляются отдельные маленькие программки. Ничего особенного, просто что-то, написанное для моего удобства, и выложеное для вашего. Добро пожаловать!

Люди, делайте бекапы! Я поменял офисный компьютер и думал, что учел все, но жизнь опять оказалась хитрее. Уже после того, как была дана отмашка на запихивание в шредер предыдущего винчестера, я запустил случайно Corel Draw. И тут вспомнил, что без любовно написанных макросов с этим, извините, редактором работать нельзя вообще. А макросы все остались в общей библиотеке. О которой я забыл. Так что приходится теперь потихоньку восстанавливать утраченное. Одно хорошо: есть возможность параллельно и описывать эти скрипты для читателей. Это куда проще, чем пытаться растолковать что-то, написанное год назад.

Итак, первая понадобившаяся мне вчера процедура — умножение. На большой схеме есть множество текстовых объектов, содержащих числа. Эти числа надо домножить на некие коэффициенты. Делать все вручную рехнешься, поэтому и был написан макрос. Мне требовалось также округлять числа до десятков, а вот проверять на ошибки в случае захвата объекта, содержащего текст, который нельзя конвертировать в число, совершенно не требовалось. Кому надо, дополняйте под себя. 

' Процедура Multiplicate
' Домножает значения в нескольких выбранных объектах на заданное число.
' Округляет результат до десятков и форматирует с разделителем тысяч.
' Пропускает нетекстовые объекты, но выдает ошибку, если текст
' не является числом.
'
Sub Multiplicate()
Dim sh As Shape
Dim Multi As Double
Dim UserInput As String
Dim OldVal As String
Dim NewVal As Long
' Спрашиваем у пользователя число, и выходим, если он передумал.
UserInput = InputBox("На что домножить:", "Домножение")
If UserInput = "" Then Exit Sub
' Заменяем в том, что ввел пользователь точку на запятую, чтобы
' не парить его переключением раскладок. Если в системе десятичный
' разделитель - точка, поменяйте в строке ниже точку и запятую местами.
UserInput = Replace(UserInput, ".", ",")
Multi = CDbl(UserInput)
' Перебираем все объекты, которые выделил пользователь перед вызовом
' процедуры
For Each sh In ActiveSelection.Shapes
    With sh
        ' Если имеем дело с текстом...
        If .Type = cdrTextShape Then
            ' Берем старое значение (до 100 символов - для числа хватит)
            OldVal = .Text.Range(0, 100)
            ' Чистим от форматирования пробелами
            OldVal = Replace(OldVal, " ", "")
            ' Умножаем и сразу округляем
            NewVal = Round((CDbl(OldVal) * Multi) / 10) * 10
            ' Форматируем и вставляем обратно
            .Text.Range(0, 100) = Format(NewVal, "### ##0")
        End If
    End With
Next

End Sub

Также читайте всю серию постов по VBA.

***

НКВД — это не только то, что вы подумали, но и то, что вам и в страшном сне не могло присниться. Это хостинг. Кстати, если вы поторопитесь, то успеете на раздачу доменов по смешным ценам.

Используете ли вы образы лазерных дисков в виртуальном дисководе вроде бесплатного Alcohol 52%? Именно 52%, потому что 120% стоит денег, а в плане функциональности домашнему пользователю мало что добавляет. У меня потихоньку готовится «возмущенное письмо в редакцию» по поводу необходимости держать на винчестере множество образов в угоду маразматическим защитам дрянного реноме от здравого смысла. Когда-нибудь выложу.

А пока, ребенок, способный сам установить игру (под ограниченной учетной записью, вам это удавалось? мне — нет), плохо понимает аналогию «вставить диск = подмонтировать образ с винчестера». Поэтому получил от папы набор ярлыков такого вида:

"C:\Program Files\Alcohol 52\AxCmd.exe" H: /M:"D:\Disk Images\JEDIOUTCAST.iso"

Первая часть — путь к исполняемому файлу алкоголя, H: — буква виртуального диска, а после /M: указан путь к образу диска, который нужно смонтировать. Поскольку речь идет о запуске уже установленных игр, можно взять иконку для ярлыка ту же, что и в ярлыке запуска игры, в «Программах».

Теперь достаточно запустить этот ярлык для смены «диска» в виртуальном дисководе. Не беспокойтесь, о том «диске», что был «вставлен» до запуска. Он сам предварительно отмонтируется.

***

Начните зарабатывать, посетив сайт www.eliteforex.ru.

Нарыл в загашнике еще одну интересную функцию для Excel. Возникла у меня нужда дать пользователю самому составить простенькую формулу с одной переменной (их, на самом деле строго две, но принцип понятен и на одной). Составить прямо на листе, не после знака «=», а чтобы видно было. Результат вычисления используется в многих других местах.

' strVar - значение переменной  
' strFormula - строка, содержащая саму формулу, место, куда надо
' подставить переменную, обозначено символами VAR

Function sheetFormula(strVar As String, strFormula As Variant) As Variant

' Если формула пустая, не тратим ресурсы
If strFormula = "" Then Exit Function

' Юзер - дурак, уберем крайние пробелы
strFormula = Trim(strFormula)

' Чем возиться с параметрами замены, проще все перевести
' в верхний регистр
strFormula = UCase(strFormula)

' Подставляем переменную простой заменой
strFormula = Replace(strFormula, "VAR", CStr(strVar))

' Мой (ну почему только мой?!) фирменный финт:
' заменяем запятую на точку, позволяя пользователю
' использовать любой из этих знаков
strFormula = Replace(strFormula, ",", ".")

' Вычисляем все с помощью функции Evaluate.
' Конструкция выглядит загадочно, но только так я
' добился от этой функции стабильной работы.
' Что она там себе думает, не знаю.
sheetFormula = Evaluate(CStr(strFormula) + "+0")

End Function

Теперь можно попросить пользователя в одной ячейке вбить значение переменной, в другой — формулу, а результат использовать по всей книге.

Между прочим, кого-то из вас поджидает вакансия в Проф-Медиа Business Solutions. Кого?

Также читайте всю серию постов по VBA.

Признаться, не люблю Corel Draw. Но вынужден иногда в этой программе работать. И здесь, как никогда, требуется обработка напильником. Вот скрипт, написанный на днях, который поворачивает каждый из выделенных объектов на 180 градусов. Заметьте: каждый по отдельности. Все скопом можно легко повернуть, выделив их и введя новый угол в соответствующее поле на панели, но в этом случае они будут вращаться относительно общей оси. Стандартного способа повернуть объекты каждый вокруг своего центра, не сдвигая их, я не нашел. Возможно, плохо искал, тем не менее скрипт.

' Поворот выделенных объектов по отдельности на 180 градусов

Sub Rotate180()
Dim sh As Shape
Dim centerX As Double, centerY As Double

' Перебираем все shape в выделении
For Each sh In ActiveSelection.Shapes
    With sh

        ' Ищем центральную точку, вокруг которой будем вращать
        centerY = (.TopY - .BottomY) / 2 + .BottomY
        centerX = (.RightX - .LeftX) / 2 + .LeftX

        ' Вращаем
        .RotateEx 180, centerX, centerY

    End With
Next

End Sub

Не забывайте про возможность поиграть с группировкой. Если при повороте нужно сохранить положение нескольких фигур относительно друг друга, их можно сгруппировать, и только потом поворачивать. Или вернуться к полю ввода угла, — как вам удобнее.

Также читайте всю серию постов по VBA.

Посмотрим, как делать собственные функции в дополнение к встроенным в Excel.

Предположим, у нас есть таблица с двумя столбиками с парами взаимосвязанных параметров. Понаблюдали мы раз десять за чем там надо наблюдать, записали результаты, увидели, что зависимость линейная, и стало нам лень остальные двести измерений делать. Первый столбик мы заполним от балды, введем какой-нибудь коэффициент, а для второго значения напишем функцию.

Читать запись полностью »

Маленькая программка для подсчета количества символов и слов в тексте.

Использовать крайне просто:

  1. копируете нужный текст
  2. запускаете программу
  3. получаете результат в таком виде:

Читать запись полностью »

Для тех, кто использует систему навигации ГИС РУССА под Windows, будет полезен этот скрипт, делающий навигацию более удобной, а именно: колесико мыши меняет масштаб, Ctrl + F открывает окно поиска. Скрипт написан на AHK, следовательно сам AutoHotKey должен быть установлен.

Читать запись полностью »

Продолжим разбирать простенькие примеры скриптов на VBA для Excel. Первая часть.

Иногда возникает надобность добавить одно число к куче разных ячеек, или домножить их на какой-то коэффициент.

Читать запись полностью »

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

Итак, в приложения Microsoft Office встроен язык Visual Basic for Application (VBA) - близнец обычного Visual Basic (по крайней мере до 6 версии VB включительно). Его можно и нужно использовать для автоматизации рутинных операций. Все нижеизложенное относится к Excel 2003.

Читать запись полностью »

MS Visio - очень мощная и удобная программа. Позиционируется она как векторный редактор в первую очередь для всяческих диаграмм и схем, скирпиченных из блоков, но я осмелюсь утверждать, что область ее применения несколько шире. Для меня это идеальный инструмент подготовки иллюстративного материала в ситуации, когда Corel Draw или Illustrator слишком «художественные», а AutoCAD слишком «инженерный». В Visio же можно нарисовать и точно и красиво (для начальства, да). Максимум кайфа, конечно, если рисунки однотипные, и вы заранее продумали и создали обьекты, из которых они будут собираться.

Впрочем, некоторые мелкие удобства разрабочиками упущены. В связи с этим выкладываю пару своих скриптов: форму, позволяющую копировать выделенные объекты на другую страницу с сохранением положения объектов относительно страницы, и процедуру, создающую дубликат выделенных объектов на том же месте. Скачать.

Простенький bat-скрипт, создающий папку с именем, отображающим сегодняшнюю дату. Для тех, кому требуется раскладывать файлы по дням.

@echo off
for /f "tokens=1-3 delims=." %%i in ("%date%") do (
mkdir "%~1\%%k-%%j-%%i"
)

Сохраните текст в файл, к примеру, todayfolder.bat, и запускайте, передавая ему имя родительской папки как параметр.

Читать запись полностью »

Люблю я всякие решения в один клик. Вот и повозившись с Locate, подумал - а ведь почти что smart folders получается. Раз уж нет у нас возможности тегировать файлы и создавать полностью виртуальное дерево, завязанное не на физическую (мм… логическую) файловую систему, а на наши хомосапиенские потребности, то хотя бы вот такие списки пусть будут. В статье я преднамеренно распинался об управлении из командной строки, так как считаю, что отсутствие фильтрации - это немедленный и окончательный приговор любому файловому менеджеру (кроме Проводника, ибо он живее всех живых по умолчанию, и нас никто не спросил). А при запуске Locate с параметрами получается как раз фильтр, но без менеджера. Впрочем не совсем без, для ежедневной рутины большей частью хватает контекстного меню и перетаскивания. Вероятно дело в том, что в моей практике сотня файлов на проект - в некоторой степени удача, а фразы шефа «скинь мне тот файлик… ну не знаю который, только немедленно!» - норма. А фильтр позволяет сразу задаться вопросом хотя бы о типе и дате файла, и здорово сузить область поиска.

Все это замечательно, но одна вещь в Locate не учтена, а именно: программа не имеет представления, какая сегодня дата. И искать файлы, предположим, за вчера в автоматическом режиме вы не можете, необходимо явно ввести дату. Автор обещал решить этот вопрос на досуге, ну а пока можно заставить еще кого-нибудь формировать нужную дату и посылать в Locate. Подобную фиговинку я написал на AutoHotKey. Вы задаете ей число дней, она вычитает это число из сегодняшней даты, и запускает Locate, подставив результат. Ограничения по дате сверху нет, вроде как ни к чему. Или нет?

Фиговина здесь, при запуске без параметров расскажет, как с ней обращаться.

Опубликовано в Компьютерра-ГИД: Автоматизация рутинных операций


Как кардинально повысить эффективность работы на компьютере? Организовать рабочее место, выработать отвечающий задачам стиль работы, подобрать подходящие программы-инструменты и... автоматизировать рутинные операции. О последнем и поговорим.

Минимальный уровень автоматизации обеспечивает сама операционная система: ее командный интерпретатор, WSH (Microsoft Windows Script Host) и планировщик. Если же минимальный уровень вас не устраивает, и это не беда - существует множество сторонних программ, способных в той или иной степени взять на себя простую, но нудную работу. AutoHotkey - одна из них. Это бесплатное решение для тех, кто может освоить синтаксис управляющего языка и писать на нем небольшие скрипты. Это конечно, менее удобно, чем разъяснять свои желания, щелкая по кнопкам мастеров и выбирая пункты из списков, однако ориентация на полноценный скриптовый язык делает AutoHotkey поистине универсальным инструментом.

Читать запись полностью »

Несколько советов:

There are also a few helpful keyboard shortcuts that aren't always widely known:


  • Pressing arrow up selects a previous command from your command history; similarly, arrow down selects the next command.
  • Pressing F7 pops up your command history list.
  • You can drag n' drop files or folders from an explorer window into a command prompt; this inserts the quoted path as if you had manually pasted it.
  • Tab completion is fully supported; type edit *.ini then hit TAB to iterate through all matches. Use SHIFT+TAB to move to the previous match. This works for partial filenames as you would expect, and in all commands.
  • Tired of the typical "c:\windows\system32\cmd.exe" window title? Change it using the TITLE command.
  • ALT+ENTER takes your command prompt to fullscreen mode and back again.

См. Coding Horror: Stupid Command Prompt Tricks

Откопал недавно две интересные штучки в VBA Excel 2003. Первая - свойство ThisCell объекта Application. используется внутри функции, вызываемой с листа (то есть записанной в ячейке, как обычная формула листа). Указывает на ячейку, из которой и вызывалась функция. Очень удобно, если надо формировать многоэтажные ссылки относительно положения самой формулы на листе. И вторая - метод Evaluate, позволяющий вычислять выражения, заданные строкой. Переменные только не подставляет, но можно просто в строке заменять имя переменной на значение. Что-то он там еще умеет…

Также читайте всю серию постов по VBA.