
Хьюстон, у нас проблема!
После установки домашнего сервера я перенёс на него все документы, музыку и фотографии. Работать стало намного удобнее, ведь теперь все файлы находятся в одном месте, вследствие чего пропадает необходимость постоянно проводить синхронизацию между компьютерами. Однако доступ к расшаренным папкам из стандартных диалогов Windows (открыть/сохранить файл) оказался не очень удобным, поэтому я решил добавить сетевые папки с документами, картинками и музыкой в соответствующие библиотеки Windows 7. Но всё оказалось не так просто. Windows отказывается добавлять папки, содержимое которых не может быть проиндексировано. Покурив справку, я выяснил, что вариантов может быть несколько. Первый — добавить компьютер, на котором находится расшаренная папка, в Home Group. Этот вариант был с негодованием отвергнут, тем более, что Windows Server всё равно не знает ни про какие попсовые группы. Второй вариант — сделать содержимое общей папки доступным оффлайн с помощью Offline files. Тоже не подходит, т. к. оффлайн-файлы у меня отключены. Да и вообще, маразм это — держать локально копию всех файлов только ради того, чтобы они показывались в библиотеках.

The future is now!
Пролог
Не так давно я нашёл в интернете очень полезную программку под названием “7Stacks”. Она позволяет создавать так называемые «стеки» — небольшие менюшки, в которые можно складывать ярлыки разных программ и документов. Эти менюши можно закреплять на новой панели задач Windows 7, что в итоге даёт эффект «автозапуска на стероидах». Конечно, эта идея далеко не нова, и пользователи мкинтошей лишь снисходительно улыбнутся. Но для нас, суровых виндузятников, такая фича может оказаться очень полезной.
Прошёл уже почти год с того момента, как я установил на свой основной компьютер новую операционную систему от Microsoft. За это время случалось всякое: от удивлённых возгласов «Ого, а она ещё и так может!» до настойчивых позывов отформатировать жёсткий диск и вернуть старую добрую Windows XP. В этой статье я не буду рассматривать различные «за» и «против», так как, во-первых, в этом нет смысла, а во-вторых, таких статей в интернете и без меня уже тридцать три мешка. Ну хорошо, в интернете полно любых статей про Windows 7, однако, я предпочту об этом не думать и, всё-таки, продолжу писать
.
Итак, сегодня я попробую описать своё видение оптимально настроенной системы. Сразу хочу сказать, что всё написанное ниже — моё личное мнение. Оно вполне может не совпадать с вашим, и уж тем более, с мнением IT-специалистов, разработчиков Windows и главбуха тёти Клавы, основной рабочей программой которой является пасьянс «Косынка». Я буду рассматривать настройку системы сразу после установки, поскольку охватить все возможные комбинации установленного ПО просто невозможно.
Недавно заметил одну весьма неприятную особенность Windows 7: если программа тербует повышенных прав для запуска, её нельзя автоматически запускать при старте Windows. Причём, неважно каким образом установлено «требование» повышенных прав: через манифест, или в свойствах файла на закладке «Совместимасть». Учитывая тот факт, что для нормального функционирования моего проекта «Oculus» его управляющая программа должна быть запущена с правами администратора, такое положение дел меня совершенно не устраивало. Сегодня я реализовал небольшой «обходной манёвр», быть может, не очень элегантный, но работающий.
Суть метода заключается в том, что сначала программа запускается с обычными, «урезанными» правами. При запуске она проверяет наличие определённого аргумента, и, в случае его отсутствия, запускает сама себя с повышенными правами и с тем самым аргументом. В коде это выглядит примерно так:
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPTSTR lpstrCmdLine, int nCmdShow)
{
SHELLEXECUTEINFO TempInfo = {0};
...
if (!Service.has_arg(_T("/admin")))
{
TempInfo.cbSize = sizeof(SHELLEXECUTEINFO);
TempInfo.fMask = 0;
TempInfo.hwnd = NULL;
TempInfo.lpVerb = _T("runas");
TempInfo.lpFile = Service.AppPath();
TempInfo.lpParameters = _T("/admin");
TempInfo.lpDirectory = Service.AppFolder();
TempInfo.nShow = SW_NORMAL;
ShellExecuteEx(&TempInfo);
return 0;
}
...
}
Здесь используется функция ShellExecuteEx с недокументированным параметром «runas», который и позволяет запустить программу с повышенными правами. Service — это мой «мини-фреймворк», содержащий несколько простых полезных функций.
В результате, Windows думает, что запускает программу с урезанными правами, в то время как она коварно перезапускается с правами администратора
.
Написал небольшой шустрый просмотрщик картинок, призванный заменить кривого монстра, поставляемого с Windows 7 (да и вистой, наверное, тоже).
Подробнее — здесь.
Занятное сообщение мне выдала Windows 7, после того как я провёл очистку диска. Сразу вспомнился старый добрый Fallout
.

Problem resolved.
Несколько дней назад я поставил программку IrfanView взамен стандартной смотрелке картинок Windows. Всё мне в этой софтине нравится, кроме ужасных значков, которыми она наделяет все ассоциированные с ней файлы. Каково же было моё удивление, когда я не нашёл в Windows 7 способа изменить значок документа! Ассоциировать тип файла с другой программой – пожалуйста, а вот значок поменять – хрен вам. Как не печально, но в погоне за упрощением интерфейса Мелкософт иногда убирает очень полезные вещи.
Сегодня мне окончательно надоело смотреть на убогие значки, и я написал небольшую программку, которая может переназначить значок для любого типа файла (если с ним уже ассоциированна какая-то программа). Работает программка просто: сначала выводится список всех расширений, зарегистрированных в ветке реестра HKEY_CLASSES_ROOT. При выборе расширения выводится список ProgID программ, ассоциированных с этим типом файлов. В текстовом окошке выводится дефолтный значок, принадлежащий программе по умолчанию. Выбирая разные ProgID из списка, можно выбрать значок, который отныне будет связан с этой самой умолчальной программой. ProgID можно не выбирать, а вписать путь к значку руками. После всех манипуляций останется только нажать Apply.
Upd: Как оказалось, ассоциации хранятся не только в HKEY_CLASSES_ROOT, но и в HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\[extension]\UserChoice. При этом, последнее значение имеет приоритет. Теперь программа это учитывает и работает правильно во всех случаях
.
Исходники (язык – С++, проект в Visual Studio 2008, используется WTL)
IconChanger
Началось публичное бета-тестирование Windows 7. Скачать образ и получить ключ можно на этой страничке: http://www.microsoft.com/windows/windows-7/beta-download.aspx. Активированная выданным ключом, система проработает до 1 августа. Кстати, образ английской 32-битной Windows 7 идентичен тому, который ранее утёк в сеть. Так что, тем, у кого система уже стоит, можно только взять ключ и пройти активацию.
Акция будет действовать всего две недели
.
Итак, продолжаю начатый обзор.
3. Интерфейс
Интерфейс Windows 7 претерпел множество изменений по сравнению с Windows XP. Прежде всего, стоит упомянуть тему оформления Aero. Основная фича – полупрозрачные заголовки окон и переработанные визуальные эффекты при операциях типа «свернуть/развернуть». Чем-то напоминает Compiz из линукса, хотя возможностей для настройки нет никаких: эффекты либо есть, либо их нет. Для отрисовки всего это счастья используются ресурсы не центрального процессора, а видеокарты, так что, по идее, новый интерфейс не должен оказывать влияния на производительность.
