[AutoIt] Поиск и замена строк в бинарном файле

По работе есть необходимость изменять в бинарном файле последовательность байт. Не спрашивайте зачем, это все равно секрет =)

Т.к. руками это делать ну очень не хочется, то на помощь приходит… AutoIt. Именно он позволил без каких либо напрягов выполнить поставленную задачу. Да и вообще, AutoIt — это замечательное средство не только для тестировщика, но и для всех тех, кому не чужда тема автоматизации процессов.

$exe = "file_name.exe"
 
$file = FileOpen($exe)
$read = FileRead($file)
FileClose($file)
 
$find = BinaryToString("0x00000000000000000000000000000000000")
$replace = BinaryToString("0x00000000000000000000000000000000001")
 
$read = StringReplace($read, $find, $replace)
If @extended > 0 Then
   ;MsgBox(64, 'Патчер', 'Вхождение найдено, файл пропатчен')
Else
   Exit 1
   ;MsgBox(64, 'Патчер', 'Вхождений нет, файл не пропатчен')
EndIF
 
$file = FileOpen($exe, 2)
FileWrite($file, $read)
FileClose($file)

[iTunes] Про режим визуализации

Во многих музыкальных плеерах есть ресторанная поддержка визуализации музыки (будь то Windows Media Player или Winamp), которая под ритм музыки выводит красивые узоры, фигуры и много чего еще в зависимости от настроек.

iTunes также не обделен визуализатором, который включается по Ctrl+T или же путем выбора соответствующего пункта в меню «Вид». Настроить визуализатор можно с помощью клавиш:

M — изменяет алгоритм визуализации
P — изменяет цветовую палитру
I — отображает внизу слева информацию о текущей песне
F — замораживает текущее состояние эффекта
L — блокирует передвижение камеры
N — включает режим фоновой туманности
? — вызывает общую справку по командам

2013-01-25_165912

[Inno Setup] Автоматическое удаление предыдущей версии

Задача: при установки новой версии программы автоматически деинсталлировать старую.

Решение: в секцию [Code] добавить:

function GetUninstallString(): String;
var
  sUnInstPath: String;
  sUnInstallString: String;
begin
  sUnInstPath := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\{#emit SetupSetting("AppId")}_is1');
  sUnInstallString := '';
  if not RegQueryStringValue(HKLM, sUnInstPath, 'UninstallString', sUnInstallString) then
    RegQueryStringValue(HKCU, sUnInstPath, 'UninstallString', sUnInstallString);
  Result := sUnInstallString;
end;
 
function IsUpgrade(): Boolean;
begin
  Result := (GetUninstallString() <> '');
end;
 
function UnInstallOldVersion(): Integer;
var
  sUnInstallString: String;
  iResultCode: Integer;
begin
// Return Values:
// 1 - uninstall string is empty
// 2 - error executing the UnInstallString
// 3 - successfully executed the UnInstallString
 
  // default return value
  Result := 0;
 
  // get the uninstall string of the old app
  sUnInstallString := GetUninstallString();
  if sUnInstallString <> '' then begin
    sUnInstallString := RemoveQuotes(sUnInstallString);
    if Exec(sUnInstallString, '/SILENT /NORESTART /SUPPRESSMSGBOXES','', SW_HIDE, ewWaitUntilTerminated, iResultCode) then
      Result := 3
    else
      Result := 2;
  end else
    Result := 1;
end;
 
procedure CurStepChanged(CurStep: TSetupStep);
begin
  if (CurStep=ssInstall) then
  begin
    if (IsUpgrade()) then
    begin
      UnInstallOldVersion();
    end;
  end;
end;

Источник: ссылка

[Inno Setup] Добавление пункта в меню «Пуск»

Задача: добавить в меню «Пуск» произвольный пункт, к примеру, URL-ярлык на страницу покупки программы.

Решение: в секцию [Icon] добавить:

Name: "{group}\Upgrade to PRO version"; Filename: "{#BuyURL}"

Баг локализации в Instagram

В недавно обновленной версии Instagram (начиная с версии 3.4.0) добавилась поддержка локализации для 25 языков, в том числе и русском. К сожалению, без ляпов не обошлось: некоторые переведенные слова оказались явно длиннее их англоязычных аналогов, в результате чего они стали «накладываться» на другие слова. Могу с большой уверенностью предположить, что ответственные за локализацию приложения даже не удосужились посмотреть, как же стал выглядеть UI на других языках, ибо такую проблему не заметить просто невозможно.

instagram2 instagram

Про iTunes Match

Приобрел годовую подписку на iTunes Match. Цена невелика и составляет 800 руб. Преимущества очевидны: доступность музыки на всех Apple-устройствах; скачивается лишь то, что слушаем (т.е. не придется держать локально десятки ГБ музыки, все хранится в облаке); высокая степень совпадений с уже имеющимися в iTunes музыкальными композициями (соответственно, треки заменяются на более качественную по звучанию музыку). Кто-то говорит, что iTunes Match — это неофициальная легализация пиратской музыки, но я этого мнения не придерживаюсь. Все таки покупая музыку в том же iTunes, вы получаете файл с DRM-защитой от копирования, которая также подтверждает факт ее покупки.

Чтобы избежать хаоса после импорта музыки в iTunes перед отправкой в iCloud (особенно тем, кто никогда еще не использовал iTunes как медиплеер), можно проделать следующее:

1. Создать в iTunes нужный плейлист, перетащить туда соответствующие музыкальные файлы
2. Выделить в плейлисте эти файлы, ПКМ ->; «Загрузить в iCloud». После этих действий начнет работать iTunes Match: музыка будет просканирована, и если она уже имеется в магазине iTunes, то напротив трека появится статус «Совпадение», в противном случае файлы, у которых отсутствуют совпадения, будут загружены в iCloud, а напротив трека появится статус «Выгруженные».
3. Повторять пункты 1-2 до тех пор, пока не перенесете все музыкальные треки

Хорошую инструкцию по работе iTunes Match можно также найти здесь.

P.S.: локализация хромает…

iTunes_match

Про IBResource и локализацию IP.Board

Жаль констатировать, но похоже, что контора IBResource.ru, которая довольно занималась продажей лицензий на продукты Invision Power Services, и что самое главное, их локализацией, больше не будет ими заниматься.

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

И вот не так давно просочилась информация, что IBResource и во все не будет продолжать работу над продуктами IPS, а это означает, что качественной и адаптированной локализации, к примеру, для новых версий IP.Board, в ближайшее время ждать не стоит. А вот тех.поддержка, скорее всего, останется.

Хм, а может я просто сгущаю краски?

[Inno Setup] Изменение дефолтной иконки и баннера в инсталляторе

Задача: изменить в инсталляторе дефолтный баннер (располагается справа) и иконку (присутствует в верхнем правом углу)

Решение:

Для изменения баннера необходимо добавить следующую строку:

WizardImageFile=banner.bmp (требования к изображению: 256-цветов, максимальный размер — 164×314 px)

Для изменения иконки необходимо добавить следующую строку:

WizardSmallImageFile=icon.bmp (требования к изображению: 256-цветов, максимальный размер — 55×58 px)