ОРЛОВ Антон

"ТАЙНЫ И СЕКРЕТЫ КОМПЬЮТЕРА"

От автора

Уважаемые читатели!

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

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

Эта книга не предназначена для того, чтобы читать ее как учебник — подряд от первой страницы до последней. Напротив — она состоит из множества глав на различные темы, среди которых каждый найдет себе то, что полезно и интересно именно ему. Она может стать вам спутником на долгое время, и всякий раз вы будете находить в ней что-нибудь нужное вам в данный момент. Приобретая ее, вы как бы приобретаете сразу несколько книг под одной обложкой: и про программирование в Word, и про различные аспекты устройства и работы компьютерных систем, и про создание сайтов. Сложные главы, посвященные непростым в изложении и понимании технологиям вроде маршрутизации в сетях и устройству жестких дисков, сочетаются в ней с материалами, доступными практически всем, например, рассказом о сайтостроении или секретными приемам работы в Word. Поэтому, приобретя эту книгу сегодня, вы откроете потом ее еще не раз, когда вам будет нужно срочно узнать что-нибудь, что вы нигде больше не смогли найти.

Создавая книгу, я постарался максимально насытить ее информацией. Однако, разумеется, мир компьютеров значительно больше, чем может вместиться даже в 400 с небольшим страниц. Поэтому эта книга — лишь введение ко всем описанным в ней темам. Лишь краткое изложение основ. Но зато, прочитав ее и поняв все написанное, вы уже не будете чувствовать себя гостем в мире компьютеров, а сможете читать профессиональные компьютерные статьи и книги уже на равных с их авторами. Для вас не будут секретами такие слова, как «классы», «обьекты», «тэги», «скрипты», "таблица разделов", «протокол», «порт». Вы не найдете здесь пошагового описания восстановления данных на жестком диске — но зато потом легко поймете любую статью на эту тему.

Если вы интересуетесь компьютерными технологиями, умеете и любите думать и исследовать неизведанное, и хотите узнать о мире компьютеров больше — тогда эта книга для вас. Но даже если вы уже опытный «компьютерщик» и знаете многое в этой области, — все равно и тогда вы сможете найти в этой книге что-нибудь вам доселе неизвестное.

О ценности информации

С появлением информационных технологий человеческое общество фактически перешло в новую фазу развития. И связано это с тем, что достижения компьютерной техники позволяют неограниченно и крайне дешево размножать такую вещь, как информацию. Ранее, например, лет пятьсот назад, для получения новой копии информации приходилось прилагать немало усилий: переписать книгу (а перед этим еще подготовить листы для книги из пергамента), прочитать и выучить текст, нарисовать копию картины, перед этим подготовив холст и краски. Зачастую усилия на создание новой копии источника информации были сравнимы с усилиями на создание самого этого источника, — например, переписывание книг занимало года. И создавать новые копии могли лишь специально подготовленные люди: ученые монахи-переписчики, художники, поэты. С появлением книгопечатания процесс облегчился: теперь книгу, ставшую основным носителем информации, можно было распечатать в большом количестве, и для этого не требовалось квалифицированного творческого труда. Но все равно затраты на размножение информации оставались немалыми: книгу надо сверстать, напечатать, сшить, распространить…

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

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

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

Но, к сожалению, в последнее время возобладала прямо противоположная тенденция — запрещать копирование информации, «охранять» ее. Да, разумеется, создатели информации должны получать вознаграждение за свой труд, и немалое — работа тяжелая, даже очень. Но почему это должно достигаться путем запретов на копирование? Ведь есть и другие пути — скажем, можно централизованно собирать со всех, использующих информационные ресурсы, небольшой налог и из этих средств выплачивать авторам вознаграждения, сообразуюсь с мнением пользователей о качестве той или иной информации? Поскольку авторов информации гораздо меньше, чем ее потребителей, то налог может быть очень небольшим. К тому же подобная ситуация приведет к стремлению всех, и авторов, и потребителей, максимально увеличить количество пользователей информационных сетей, как можно больше делать копий, — ведь тогда средств будет собираться больше! В выигрыше будут все. Единственно, что надо для этого — изменить существующий взгляд на информацию как на продаваемый товар: "заплатил — пользуйся, не заплатил — не пользуйся", и считать деньги, выплачиваемые автору информации, вознаграждением ему за труд, а не платой за получение этой информации. Изменить сформировавшееся в последние годы мировоззрение "собственника".

Тем более что обьективных предпосылок для такого мировоззрения нет. Стоит помнить, что те, кто сейчас создает информационные ресурсы и получает огромные прибыли за счет их продажи из-за разницы в себестоимости и доходе, фактически стоят "на плечах предков". Миллионы людей работали долгие годы для того, чтобы сейчас у человечества появилась возможность копировать информацию почти без затрат сил и ресурсов, зачастую не получая достаточного вознаграждения своего труда. И они тоже могут рассчитывать на прибыль от распространения информации в настоящее время. Ну, уже, увы, не они — так их потомки, дети и внуки. А в то время, когда ученые разрабатывали первые компьютеры, без которых было бы невозможно создание современных компьютерных систем, этих ученых кто-то должен был кормить, одевать, кто-то строил им дома. Значит, и эти люди имеют право на долю прибыли от продажи информации, созданной и распространяемой с помощью компьютеров! Так что все здесь взаимосвязано, и выяснить, кто конкретно имеет право на доходы от продажи той или иной информации, нельзя.

Поэтому развитие технологии, появление компьютерных систем и глобальных информационных сетей требует создания новой системы межчеловеческих взаимоотношений. Только отказ от принципа «продажи» информации, только связанное с этим изменение мировоззрения людей позволят максимально использовать открывшиеся новые возможности. Только восприятие денег, выплачиваемых за информацию, как вознаграждение ее автору за его тяжелый труд, а не как стоимость этой информации, только отказ от принципов "охраны интеллектуальной собственности" (но не авторского права!)[1] даст возможность человечеству приумножить свое совокупное богатство во много раз практически без затрат труда и ресурсов.

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

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

Это интересно…

Долгое время ведущим разработчиком микропроцессоров фирмы Intel являлся Владимир Пентковский, получивший образование в СССР и работавший в Институте Точной Механики и Вычислительной Техники имени С.А.Лебедева. Пентковский принимал участие в разработке советских компьютеров «Эльбрус-1» и «Эльбрус-2», а затем возглавил разработку процессора для «Эльбруса-3» — Эль-90.

После уничтожения СССР вследствие целенаправленной политики правящей верхушки России финансирование проектов, в которых был занят Пентковский, прекратилось, и он был вынужден эмигрировать в США и устроиться на работу в корпорацию Intel. Вскоре он стал ведущим инженером корпорации и под его руководством в 1993 году в Intel разработали процессор Pentium, по слухам, названный так именно в честь Пентковского. Пентковский воплощал в Intel'овских процессорах те советские ноу-хау, которые знал сам, многое додумывая в процессе разработки, и к 1995 году фирма Intel выпустила более совершенный процессор Pentium Pro, который уже вплотную приблизился по своим возможностям к российскому микропроцессору 1990 года Эль-90, хоть и не догнал его полностью.

В настоящее время Пентковский разрабатывает следующие поколения процессоров Intel. Так что процессор, на котором, возможно, работает ваш компьютер, сделан именно нашим соотечественником и мог бы быть российского производства, если бы не события после 1991 года.

Источник: www.ixbt.com, Алексей Пылкин "Эльбрус Бабаяна и Pentium Пентковского"

Часть I. ОСНОВЫ ПРОГРАММИРОВАНИЯ ДЛЯ OFFICE

Первая часть книги посвящена весьма интересной теме — созданию программ, работающих в среде текстового редактора Microsoft Word. Нет нужды говорить о его популярности в нашей стране, однако, к сожалению, немногие пользователи знают и применяют в своей деятельности возможности встроенного в Microsoft Office языка программирования Visual Basic for Applications, сокращенно именуемом VBA. А ведь с его помощью можно научить программы из пакета Microsoft Office выполнять практически все, что только может потребоваться пользователю. Более того, VBA — вполне полнофункциональный язык программирования, с помощью которого можно создавать законченные и работоспособные программы, как облегчающие работу с компонентами Microsoft Office, так и предназначенные для проведения расчетов, обработки данных.

Но самое главное — на VBA могут создавать программы даже те, кто ранее никогда не занимался программированием, причем для этого не потребуются ни толстые книги, ни дорогие курсы обучения. Необходимо лишь уметь думать: наблюдать, исследовать, ставить эксперименты, делать выводы, — проявлять способности к научному подходу.

Для написания программ на VBA вам не потребуются многостраничные руководства. Лучше всего даже, чтобы они появились у Вас тогда, когда Вы освоите по меньшей мере треть или даже половину возможностей этого языка, и тогда они будут прочитаны Вами как захватывающий детектив, а не как занудные учебники. Более того, тогда оставшиеся две трети информации о возможностях VBA будут усвоены вами гораздо быстрее и легче. Кроме того, создавая программы на этом языке, Вы получите прекрасную возможность смоделировать в данном процесе способы подхода к этому миру со стороны исследователя, экспериментатора, ученого, научиться принципам научного подхода к исследованию различных явлений или вспомнить их. И необьятный простор открывает такая, казалось бы, обыкновенная вещь, как Microsoft Office и его средства разработки программ для обучения и воспитания подрастающего поколения, — программирование в среде этого пакета программ является превосходным средством для выработки у учеников самостоятельности в исследованиях, способности сопоставлять различные факты и анализировать информацию, — всего того, что нужно разумному человеку или даже будущему ученому.

Главы книги, посвященные программированию в среде Office, естественно, не могут охватить всех тонкостей искусства создания программ на VBA, да такая задача перед ними и не стоит. Они являются, скорее, введением в этот язык, и предназначены для того, чтобы познакомить вас с ним, описать основные его возможности, помочь в начале работы, предостеречь от некоторых затруднений и ошибок.

Программы на VBA — макросы — можно создавать для любой программы пакета Microsoft Office — для Word, Excel, Access, PowerPoint и даже Outlook. В этой книге будет рассмотрен процесс создания макросов для Microsoft Word, так как, во-первых, с этой программой приходится работать практически любому пользователю персонального компьютера, а, во-вторых, для Word создавать их несколько легче и проще, чем для других компонентов Microsoft Office. Научившись работать с VBA в Word, вам будет довольно просто перейти к программированию для остальных компонентов Office.

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

Предполагается, что читатели знакомы с программой Microsoft Word и знают основные приемы работы в этом текстовом процессоре.

* * *

На настоящее время выпущено три версии Microsoft Office, содержащие в себе возможности работы с VBA — 97, 2000 и 2002, иначе именуемая XP. За некоторыми исключениями все они между собой совместимы "сверху вниз", то есть программа, написанная для Word97 и в среде этого редактора, будет работать и в Word2000, и в WordXP. Обратное же верно не всегда: в Word2000 и особенно в WordXP добавлены новые команды VBA, и программа, их использующая, в Word97 уже не заработает.

В предстоящих главах в качестве основной среды программирования рассматривается Microsoft Office 97, так как вследствие вышесказанного наиболее разумным будет использовать в качестве среды разработки именно 97-ю версию Microsoft Office, в частности, для того, чтобы создаваемую программу могли применять пользователи всех версий Office. Об особенностях же программирования для Office 2000 и Office XP сообщается отдельно там, где эти особенности имеют какое-либо значение.

Полезные советы

Если вам необходимо отправить e-mail кому-либо, у кого не русифицировано программное обеспечение компьютера или неправильно настроен почтовый сервер (подробнее — смотрите главу 13), то стопроцентно обеспечить читаемость сообщения можно, например, таким способом.

Наберите текст сообщения в каком-либо текстовом редакторе, добившись, чтобы весь он влезал на одну страницу, но был вполне читаем с экрана. После этого комбинацией клавиш Alt+PrintScreen сделайте «снимок» экрана, — его копия в виде картинки поместится в буфер обмена. Затем вставьте содержимое буфера обмена в рисунок в MS Paint'е и сохраните его как отдельный файл (можете вырезать лишь ваш текст и сохранить только его для уменьшения размера файла).

Довольно ясно, что прочитать текст в таком файле можно будет на любом компьютере, где есть хотя бы MS Paint, и вы можете смело отправлять его адресату. Только имейте в виду, что размер файла окажется немаленьким, так что постарайтесь либо заархивировать его, либо отконвертировать в формат Jpeg или Gif.

Глава 1. Средства программирования на VBA для Word: общий обзор

Создание программы

В отличие от других средств разработки программного обеспечения, где единственным способом создания новой программы является написание ее кода и создание в визуальных редакторах диалоговых окон или использование уже готовых фрагментов кода других программ, в VBA есть уникальное средство разработки, не присутствующее больше практически нигде и позволяющее быстро научиться создавать простые макросы для компонентов Office, в том числе и для Microsoft Word, без использования описаний языка. Это средство — так называемая "запись макросов". При работе в Word можно включить специальный режим записи макросов, и тогда все действия пользователя в редакторе будут автоматически «переводиться» на язык VBA и записываться в виде текста программы. Этот текст можно потом изучить для выяснения синтаксиса и устройства языка, а также необходимым образом его модифицировать.

Для записи макроса в Word надо выбрать из меню «Сервис» пункт «Макросы», а затем из выпадающего подменю — пункт "Начать запись".

Документы Word — собственно документы с расширением".doc" и шаблоны документов с расширением".dot" — устроены так, что могут хранить в себе программы. Каждую программу, хранящуюся в документе, может вызывать на исполнение либо кнопка на панели инструментов, либо сочетание клавиш, либо пункт меню, либо другая программа. Возможно любое сочетание способов вызовов. Поэтому перед началом записи макроса пользователю предлагается сразу назначить записываемому макросу способ его вызова (рис. 1.1).

Рис. 1.1. Назначение макросу способа вызова — кнопка на панели инструментов или сочетание клавиш.

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

После нажатия кнопки «Ок» окна назначения способа вызова макросу в окне Word появится панель "Запись макроса" (рис. 1.2).

Рис. 1.2. Панель "Запись макроса".

С этого момента все действия пользователя тщательно протоколируются, хотя и с определенными ограничениями — так, в таком режиме невозможно проводить выделение текста мышью (перемещением курсора с нажатой клавишей Shift можно), не работает контекстное меню правой кнопки мыши. Но этих ограничений немного.

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

Пример подробного анализа результатов подобной записи будет показан в главе 3. А сейчас рассмотрим другой, более традиционный способ написания программ на VBA — посредством Редактора VBA.

Редактор Visual Basic for Applications

В Microsoft Word этот редактор вызывается из меню "Сервис"-"Макросы"-"Редактор Visual Basic" или нажатием клавиш Alt-F11. Окно редактора VBA (рис. 1.3.) состоит из следующих частей: Менеджер проектов, Окна текста программ и дизайна форм, Окно свойств, Окно отладки, Окно контрольного значения, Окно локальных переменных, Стек вызова, Окно просмотра обьектов. Каждое окно может как отображаться на экране, так и нет. Ниже мы рассмотрим все эти компоненты подробнее.

Рис. 1.3. Редактор VBA. Отображаются Менеджер проектов, Окно текста программ и дизайна форм, Окно свойств, Окно отладки

Программы на VBA для среды Word хранятся в документах и шаблонах Word. (Другие форматы для хранения макросов непригодны.) Каждый документ или шаблон, содержащий макросы, называется проектом. В окне Менеджера проектов отображаются названия всех доступных Word проектов, в состав которых входят открытые документы и шаблоны, а также шаблоны, загруженные глобально — через помещение их в папку автозагружаемых файлов Word. Кроме того, всегда в этом окне отображается шаблон Normal.dot со всеми макросами, сохраненными в нем (см. рис. 1.4).

Рис. 1.4. Менеджер проектов. Отображаются три проекта и их компоненты.

Щелкнув мышью по знаку "+" слева от названия, можно открыть список имеющихся компонентов проекта. Однако так можно поступить лишь с проектами, открытыми в Word: шаблон, загруженный глобально (т. е. путем помещения его в папку автозагружаемых файлов Word), так открыть нельзя, — чтобы получить доступ к его коду для редактирования, необходимо открыть его как файл. Иначе при попытке просмотра будет выдано сообщение "Проект недоступен для просмотра" и доступ к коду будет невозможен.

Просмотр компонентов проекта можно запретить путем задания пароля, однако делать так не стоит.

Компоненты каждого проекта делятся на пять больших категорий:

1. "Microsoft Word обьекты". В макросах для Word здесь имеется только один обьект — называющийся по умолчанию ThisDocument. Его контекстное меню, появляющееся при нажатии правой кнопки мыши, выглядит так, как показано на рис. 1.5.

Рис. 1.5. Контекстное меню обьекта ThisDocument.

При выборе пункта Обьект (для Normal.dot недоступен) произойдет переход к соответствующему документу — к его содержимому: тексту, графике. В документ Microsoft Word можно вставить специальные обьекты — кнопки, поля ввода текста, поля выбора вариантов и др. В этом случае после выбора пункта Программа контекстного меню обьекта ThisDocument можно написать программу, которая будет выполняться при нажатии соответствующей кнопки, введении текста и др. К написанию такой программы можно перейти и из контекстного меню самого специального обьекта в документе — выделив его, нажав правую кнопку и выбрав пункт "Исходный текст".

В Microsoft Excel в Редакторе VBA в качестве обьектов представлены все листы рабочей книги Excel по отдельности, а также сама книга как целое.

2. "Модули." Модули — это и есть то место, где хранятся сами макросы. Щелкнув два раза мышью на имени модуля, можно получить доступ к тексту программы или начать ее создавать. В одном модуле может содержаться несколько макросов.

Программы, записанные пользователем с помощью средства записи макросов, хранятся по умолчанию в модуле NewMacros шаблона Normal.dot.

Для того, чтобы создать новый модуль, необходимо из контекстного меню Менеджере проектов выбрать пункт "Вставить"-"Модуль".

3. "Модули класса". Класс — это особое понятие, играющее очень важную роль в программировании. Для начала коротко можно сказать, что в данном случае это — "тип обьектов, определяемых программистом". К примеру, надо написать программу, которая работает с электронными версиями классных журналов в школе. В каждом журнале есть множество подразделов: и список учеников, и список их оценок, и система вычисления средней оценки каждого из учеников, и список предметов, и много чего еще… Можно, конечно, на VBA описать устройство каждого классного журнала: создать списки учеников, организовать таблицы с оценками, но тогда при однотипных действиях с группой журналов (например, надо посчитать средний балл оценок всех учащихся седьмых и восьмых классов) придется включать в код очень много операций с каждым компонентом журнала. Также при добавлении нового журнала придется писать программный код для создания списка учащихся, списка предметов и др. Это все очень усложнит программу и потребует большой затраты труда программиста.

Поэтому в VBA, как и в других языках программирования, имеется понятие класса — то есть типа обьектов. Новые классы можно создавать самим. Так, можно создать класс «Журналы» и описать в его модуле класса содержимое обьектов этого класса: список учеников — (в коде это реализуется строкой Public Ученики(40) As String), предметов (Public Предметы(20) As String) и др. Теперь для создания нового обьекта класса «Журналы» — нового журнала — не надо заниматься утомительным описанием вновь создаваемых списков учеников и предметов: будет достаточно в одной строчке написать команду "Обьявить новую переменную класса Журналы" (Dim Журнал25 As Журналы) и присвоить нужные значения соответствующим разделам этого новосозданного журнала (Журнал25.Ученики(1)="Андреев" и.т.д.). Кроме того, можно в модуле класса написать программу вычисления средней оценки всех учащихся, и при необходимости сделать такой подсчет вызывать ее одной командой.

Если текст предыдущих абзацев вам пока непонятен, то вернитесь к нему позже, когда узнаете о VBA больше.

4. «Формы». Формы — это диалоговые окна программ, которые можно разработать по своему вкусу. Для того, чтобы в проект добавить форму, надо из контекстного меню в Менеджере проектов выбрать пункт "Вставить"-"UserForm". Будет создано пустое диалоговое окно, в которое можно поместить кнопки, картинки, текст и др. Пример сложной пользовательской формы — на рис. 1.6.

Рис. 1.6. Пример сложной пользовательской формы

5. «Ссылки». Программы могут запускаться на выполнение не только в результате действий пользователя, но и в результате вызова из другой программы. Однако запустить программу можно только из загруженного в Word проекта (шаблона или документа). Если постоянно загружать проект нецелесообразно (например, подобный вызов используется достаточно редко), то для запуска из загруженного проекта программы из другого, незагруженного шаблона нужно поставить на него ссылку (делается это путем простого перетаскивания иконки шаблона в окно Менеджера проектов). В таком случае будет возможен доступ ко всем программам в этом шаблоне из программ проекта, в котором находится ссылка.

Средства создания кода

Основным рабочим местом программиста на VBA является окно текста программ и дизайна форм (рис. 1.7). Именно здесь пишется текст программ и разрабатываются диалоговые окна. Для того, чтобы открыть его для какого-либо компонента проекта, надо просто два раза щелкнуть на нем мышью или выбрать из контекстного меню пункт «Программа».

Рис. 1.7. Окно текста программ и дизайна форм. Контекстная подсказка редактора VBA

Для начала написания программы надо в окне модуля или кода формы написать фразу "Sub Уникальное имя программы", после чего Редактор VBA сам добавит фразу "End Sub", и между этими двумя фразами должен заключаться текст основной части программы.

Редактор VBA — очень дружественный редактор. Он постоянно подсказывает программисту, какие параметры имеет та или иная команда, как надо корректно ее написать. Например, если набрать команду MsgBox (эта команда вызывает на экран диалоговое окно, например, такое, как всем известное окошко "Сохранить изменения в документе?") и набрать после нее открывающую круглую скобку, то над курсором сразу же появится подсказка (см. также рис. 1.7.), из которой можно получить информацию о синтаксисе данной команды, то есть о том, как конкретно нужно задавать ее параметры — в данном случае текст окошка, количество кнопок, значок и звук при появлении — в тексте программы.

Язык VBA называется обьектно-ориентированным. Это значит, что очень многие его команды имеют особенный формат, отличный, скажем, от формата языков Basic или Pascal, которые изучались в школах еще 10 лет назад. Типичная команда VBA имеет такой вид: <Обьект>.<Обьект, входящий в первый обьект>.<…>.<Тот обьект, с которым нужно произвести действие>.<Собственно действие>. Иными словами, каждая команда пишется как бы "с конца": вначале определяется то, над чем надо произвести действие — обьект, а затем само действие — метод. Разделителями компонентов команды служат знаки «точка». Вот пример такой команды:

Application.ActiveDocument.PageSetup.Orientation = wdOrientLandscape

Эта команда устанавливает альбомную ориентацию листа в документе. У обьекта Application (то есть приложение, программа, в данном случае — Word) есть подобьект — ActiveDocument (активный документ, а есть еще другие, неактивные документы, тоже загруженные в Word), у этого подобьекта есть подобьект — PageSetup (параметры страницы; а есть еще подобьекты Selection — то, что в данный момент выделено, Characters — все буквы в тексте и др.), у него есть подобьект Orientation (ориентация листа; а есть еще BottomMargin — нижний отступ, LeftMargin — левый отступ и др.), которому присваивается "="значение wdOrientLandscape — то есть альбомная ориентация листа. Такой же вид имеет и команда получения информации об ориентации листа — она будет выглядеть так:

p = Application.ActiveDocument.PageSetup.Orientation

и после ее выполнения значение переменной р будет wdOrientLandscape или wdOrientPortrait соответственно. (Более подробно синтаксис языка VBA будет рассмотрен в следующей главе.)

При написании команд редактор VBA постоянно подсказывает возможные варианты следующего шага. Например, стоит написать в тексте программы слово Application и поставить точку, как сразу появятся возможные варианты продолжения (рис. 1.8).

Рис. 1.8. Редактор VBA может сам предлагать продолжения команды

Можно мышкой выбрать нужный вариант, и он обязательно будет правильным — не в смысле верности алгоритма (это остается на совести программиста), а в смысле соответствия правилам синтаксиса и иерархии обьектов, а также правописания слова. Затем можно вновь поставить точку, и вновь будет выдан список возможных вариантов продолжения.

Есть также команда завершения слова — можно не писать целиком слово Application, а набрать Appli и нажать Ctrl и пробел. Редактор допишет слово до конца сам или предоставит возможность выбора слова, если его однозначно нельзя определить по первым буквам. Он как бы «ведет» программиста по процессу написания программы, позволяя ему сосредоточиться не на банальном синтаксисе, а на решаемой программой проблеме, не держа в памяти правила написания каждой команды.

Даже если программист не воспользуется предоставляемой подсказкой и введет всю команду вручную, то редактор не даст ему так просто двинуться дальше, если в элементарном синтаксисе данной команды будет ошибка, выдав сообщение "Ошибка компиляции" (рис. 1.9).

Рис. 1.9. Ошибка компиляции

Редактор, безусловно, не может найти ошибку, если неверен алгоритм программы — это уже дело программиста. Он не увидит ошибку и в неправильно написанном слове команды, так как посчитает тогда ее функцией — новой командой, созданной самим программистом. Но вот неправильно написанную известную ему команду отследить он может. (В приведенной на рисунке примере программист хотел заменить выделенный текст новым, написав Selection.Text:="Новый текст", но ошибся и не поставил знак двоеточия в операторе присваивания — ":=".)

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

Подобная дружественность редактора VBA дает прекрасную возможность для самостоятельного изучения этого языка программирования. А в сочетании с средством записи макросов она практически делает ненужными огромные учебники. Достаточно записать пару макросов, с помощью справки изучить назначение каждой записанной команды, и уже можно начинать писать простейшие работающие макросы — редактор не даст ошибиться в грамматике. Надо лишь усвоить некоторые приемы анализа программного кода, о которых пойдет речь в дальнейшем.

Поставив перед любой командой знак апострофа (), можно ее закомментировать — то есть исключить из выполнения. В этом случае VBA не будет ее выполнять. Кроме того, после знака апострофа можно написать пояснения к соответствующей части программы для себя и других программистов. Все комментарии отображаются в редакторе VBA зеленым цветом.

Щелкнув два раза на названии формы, можно открыть окно Дизайна форм (рис. 1.10).

Рис. 1.10. Окно Дизайна форм.

Нажав на соответствующий элемент (кнопку, поле ввода, переключатель и др.) на панели инструментов "Элементы «управления» и нарисовав затем мышкой этот элемент на поле формы, можно поместить его на форму. Двойной щелчок на помещенном на форму элементе открывает окно программ пользовательской формы, где можно написать программу, которая будет выполняться при этом самом двойном щелчке на элементе. (Можно также выбрать другие действия, которые надо выполнить пользователю или другим программам, чтобы запустить такую программу, — события.) У каждой формы есть окно ее программ — реакций элементов на события, хотя оно может быть и пустым. Вызвать его можно пунктом «Программа» из контекстного меню названия формы в Менеджере проектов.

Если выбрать какой-нибудь элемент формы и из его контекстного меню выбрать пункт «Свойства», то откроется Окно свойств (рис. 1.11).

Рис. 1.11. Окно свойств элементов формы

Здесь можно задать все доступные свойства каждого элемента, например, его цвет, цвет границы, надпись, состояние — доступно/недоступно для изменений, поместить на элемент картинку из внешнего файла (пункт "Picture"). Все эти свойства также можно задавать программно, однако некоторые, вроде той же картинки, стоит задавать только в этом окне. Для получения подробного описания функции каждого элемента окна свойств (а состав этих элементов различен для каждого элемента формы) достаточно просто поставить на него курсор и нажать F1. Настоятельно рекомендуется подробно изучить предназначение всех элементов данного окна как с помощью вызова справки, так и с помощью изучения изменений в состоянии обьекта после изменения значения свойства.

Окно Просмотр обьектов, вызываемое кнопкой F2 или из меню Вид (рис. 1.12), является кратким справочником по всем возможным свойствам и методам (то есть действиям, командам) обьектов VBA. Можно посмотреть, какие свойства или методы доступны для каждого обьекта, какие обьекты в принципе существуют в VBA, вызвать справочный файл для каждого обьекта, свойства или метода.

Рис. 1.12. Окно Просмотр обьектов (справа)

На панели инструментов «Правка» редактора VBA имеются соответствующие кнопки для вызова вышеописанных функций. Так, кнопка "Список свойств/методов" позволяет увидеть возможные продолжения любой команды (то же самое можно получить, поставив после команды точку, но так неудобно делать в уже написанном тексте), а кнопка «Сведения» выводит информацию о переменной, которая в данный момент выделена. Как и в самом редакторе Word, в редакторе VBA можно вставлять закладки в текст программы для более удобного перехода к соответствующим его частям.

Все модули, входящие в состав проекта, можно сохранить в текстовом файле. Для этого в Менеджере проектов из контекстного меню правой кнопки мыши соответствующего модуля надо выбрать функцию "Экспорт файла". Модуль будет сохранен в текстовом файле с расширением".bas". Можно просто перетащить название модуля в окно Explorer'а, держа нажатой левую кнопку мыши — редактор VBA поддерживает механизм Drag-and-Drop. Вставить ранее сохраненный модуль можно через команду "Импорт файла" того же меню или путем перетаскивания его иконки в окно редактора VBA.

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

Средства отладки программы

Редактор VBA обладает очень большими возможностями отладки программы, то есть поиска в ней алгоритмических и языковых ошибок. Поскольку язык VBA — не компилируемый, а интерпретируемый (то есть готовая программа представляет собой текст исходного кода, хранящийся в шаблоне или документе, который переводится в машинные коды при каждом ее запуске, в то время как конечный продукт средств создания программ на остальных языках программирования представляет собой файл с исполняемым машинным кодом), то после завершения написания кода и успешной его отладки программа готова к использованию.

Для запуска на выполнение готовой или записанной программы из редактора VBA необходимо нажать клавишу F5. Программа начнет выполняться и, если в ней вдруг найдутся ошибки в записи команд или обращения к неизвестным командам, будет выдано соответствующее сообщение (рис. 1.13).

Рис. 1.13. Сообщение об ошибке компиляции

Данное сообщение означает, что эта команда редактору VBA неизвестна. Значит — надо изменить код программы, соответственно исправив его.

(В VBA можно создавать собственные команды — функции или процедуры, которые могут вызываться так же, как и встроенные. Об этом будет рассказано в следующей главе.)

Если возникает ошибка вследствие неправильного использования команд VBA, то редактор VBA выдает диалоговое окно, в котором приводится некоторое описание ошибки. Так, при попытке выделить жирным шрифтом десятимиллионное слово в документе было выдано сообщение "Запрашиваемый номер семейства не существует" (рис. 1.14), так как десятимиллионного слова в документе не было.

В диалоговом окне на рис. 1.14, как можно видеть, есть кнопка под названием «Отладка».

Рис. 1.14. Сообщение об ошибке из-за неправильного использования команд VBA

Нажав на нее, можно перейти в режим отладки программы — то есть специального состояния редактора VBA, в котором программа может исполняться построчно, а программист имеет возможность видеть значения всех переменных программы и даже принудительно задавать эти значения. Также в режим отладки можно перейти из редактора VBA, поставив курсор внутрь программы и нажав клавишу F8.

Если ошибка произошла в макросе, находящемся в недоступном шаблоне (например, загруженным глобально через папку автозагружаемых файлов Word), то кнопка «Отладка» будет неактивна.

В режиме отладки программисту доступны следующие возможности:

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

2. Просмотр значений переменных. Подведя в режиме отладки курсор к имени любой переменной, можно увидеть ее значение (рис. 1.15).

Рис. 1.15. Просмотр значения переменной в режиме отладки

Кроме того, значения всех переменных программы можно увидеть в окне Локальные переменные (рис. 1.16, вызов — из меню Вид).

Рис. 1.16. Окно локальных переменных.

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

3. Точки останова. Если программа длинная, то проходить по всем ее строчкам с помощью кнопки F8 — занятие не слишком интересное и приятное. В этом случае лучше использовать точки останова, то есть отметки в тексте программы, где ее исполнение должно остановиться, а сама программа — перейти в режим отладки. Для установки точки останова нужно щелкнуть левой кнопкой мыши на сером левом поле окна модуля, и тогда появится коричневая строка с кружочком на месте точки останова (рис. 1.17).

Рис. 1.17. Точка останова. На самом деле она коричневая.

Начиная с этого места, программа будет выполняться пошагово по нажатию кнопки F8. Отказаться от пошагового выполнения можно путем нажатия кнопки F5. Точки останова полезны, когда нужно локализовать дающее ошибку место в программе, особенно если оно находится в середине текста или не единичное.

4. Окно контрольного значения. В этом окне можно задать определенное выражение, значение которого будет подсчитываться параллельно с выполнением программы. Кроме того, выделив в режиме отладки какое-нибудь выражение и нажав Shift и F9, можно увидеть его значение, а также добавить это выражение в окно контрольного значения и отслеживать его дальнейшие изменения.

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

К примеру, идет вычисление оптимального количества учеников в каждом классе с учетом множества параметров и где-то подозревается наличие ошибки: не сходится сумма количеств всех учеников во всех классах с количеством учеников в школе. Можно, конечно, обойтись без всяких там окон контрольного значения и вставить в текст программы после каждого вычисления проверку равенства суммы количества всех учеников во всех классах с численностью учеников школы, но это очень усложнит программу, да и потом придется удалять все эти добавления, — а если программа большая, то сделать это не так просто. Гораздо лучше поставить контрольное значение — сумму количеств всех учеников во всех классах — и при пошаговом исполнении программы отследить, где, на каком этапе происходит ее ненужное изменение.

5. Окно проверки или Отладки. Это окно вызывается из меню Вид — Окно отладки. В текст программы можно вставить специальные команды — Debug.Print (a+b, например — если надо отслеживать значение этой суммы). Тогда при выполнении этой команды в Окне отладки будет печататься то, что задано в ее параметрах (рис. 1.18).

Рис. 1.18. Окно отладки.

Возможности применения этого окна многообразны. Можно выводить в него сообщения (командой Debug.Print) в случае выполнения или невыполнения какого-либо условия. Можно отображать в нем промежуточные результаты вычислений для контроля их правильности — чтобы не смотреть и искать нужное выражение в окнах Локальных переменных или Контрольного значения, а получать их сразу, перед глазами. Можно даже использовать это окно как маленький калькулятор или командную строку, и тогда при нажатии Enter после ввода команды она будет тут же выполнена! Надо только перед самой командой писать слово Print, если команда должна выдать какой-нибудь результат в этом же окне.

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

Окна Контрольного значения, Локальных переменных, Отладки и Стека вызова могут быть вызваны как из меню Вид или соответствующими сочетаниями клавиш, так и при нажатии кнопок на панели «Отладка». Достаточно только подвести курсор к каждой кнопке панели, чтобы увидеть, какую команду она вызывает.

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

Для выхода из режима отладки до завершения полного выполнения программы необходимо выбрать функцию Сброс из меню Запуск или нажать на панели «Отладка» кнопку "Сброс".

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

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

Очень полезно при разработке программ на VBA смотреть примеры использования команд, приводимые в справке — в разделах «Example» многих справочных окон (рис. 1.19). Если вам никак не удается создать работающий фрагмент кода программы — посмотрите в справке в разделе примеров, не встретится ли вам там то, что вы так долго пытались создать. Все фрагменты кода в справке можно свободно копировать в свои программы. Во всяком случае, в справке все команды написаны грамотно и правильно.

Рис. 1.19. Фрагмент кода в справке

Descent из недр Excel'а

Descent — это игра-симулятор космического корабля, перемещающегося в инопланетных шахтах. А Excel — это программа для работы с электронными таблицами. Казалось бы, что между ними может быть общего? А общее есть. Оказывается, в Excel 97 встроена «леталка»: игра, смысл которой заключается в полете над местностью и просмотре открывающихся красот. Вот как ее можно запустить.

1. Запустите Excel 97 и проследите, чтобы в пункте Сервис-Параметры-Общие не стояла отметка в пункте "Стиль ссылок R1C1".

2. Создайте чистую таблицу. Нажмите F5 и введите в строке ссылки для перемещения фразу "x97:l97" (т. е. переход к ячейкам от X97 до L97 с их выделением). Нажмите Ввод.

3. Вы перейдете к строке номер 97. Нажмите Tab, а затем, удерживая Shift и Ctrl, щелкните левой кнопкой мыши по иконке "Мастера диаграмм". Подождите немного.

Вот вы и в Excel Descent! Все управление — мышью. Левая кнопка — ускорение вперед, правая — назад, движения мыши задают направление. Выход — Esc. Подлетев к центру местности, можно увидеть камень, а на его поверхности — список имен разработчиков.

Descent из недр Excel'а

К сожалению, в последующие версии Excel'а данная игра уже не включалась. Однако, скажем, в Excel 2000 есть не менее увлекательная игра — автогонки. Как ее вызвать? Читайте дальше, на одной из таких же врезок данная информация будет приведена.

Секрет Internet Explorer'а

Если вставить в пустой html-документ строку <!- introducing the Trident team — >, а потом открыть этот файл в Microsoft Internet Explorer версии 4 или 5, то на экране появятся весьма интересные визуальные эффекты. К сожалению, в 6-й версии этого браузера данный прием уже не работает.

Глава 2. Основы языка Visual Basic for Applications

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

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

События, методы, свойства

Когда-то давным-давно программы, написанные и работавшие тогда еще под MS-DOS, получали от пользователя данные, обрабатывали их и выдавали затем результат. Почти любая программа предусматривала в своей работе период ввода данных, период обработки, период выдачи результата. Подобные действия были принципом работы Dos-овских программ. И программирование их называлось структурным — надо было строго и последовательно разрабатывать алгоритм, реализовывать заданный порядок действий программы, в который в процессе работы пользователь в момент, для этого не предназначенный, вмешаться не мог, разве только принудительно остановив программу.

С появлением операционной системы Windows стал широко известен другой принцип программирования и создания алгоритмических языков — принцип объектно-ориентированного языка.

Это значит, что основная направленность разработчика сместилась с действия на объект — на его реакции на действия пользователя, на его свойства и на их изменение. И VBA является типичным представителем объектно-ориентированных языков, как по своему синтаксису, так и по архитектуре программ. Основными понятиями объектно-ориентированного языка являются объект, свойство, метод, событие.

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

Почти каждый объект внутри себя имеет подобъекты, которые, в свою очередь, являются полноценными объектами и могут иметь свои подобъекты. Например, у объекта «Документ» есть подобъект "Десятое предложение", у которого есть подобъект "Второе слово", у которого есть подобъект "Третья буква". С помощью объектно-ориентированного языка VBA можно обратиться к любому объекту, если знать его иерархию — то есть все те объекты, чьим подобъектом он является.

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

Большинство свойств объектов VBA можно задавать программно, однако есть свойства Read-Only — не допускающие изменений.

Многие свойства объектов Word также задаются через стандартные диалоговые окна Word — например, Файл-Параметры страницы или Сервис-Параметры, однако их всегда можно задать и в программе, а соответствующие диалоговые окна использовать при записи макроса для того, чтобы посмотреть синтаксис команды задания того или иного свойства.

Метод — это какое-либо действие над объектом. Например, печать текста или поиск текста в документе. У многих методов есть параметры метода, позволяющие задать параметры действия. Вот пример:

With Selection.Find

Text = "Этот текст надо заменить"

Replacement.Text = "Заменить на этот текст"

Forward = True

Wrap = wdFindContinue

Format = False

MatchCase = False

End With

Selection.Find.Execute Replace:=wdReplaceAll

В данном примере вначале объекту VBA «Find», являющемуся подобъектом объекта «Selection», задаются необходимые свойства".Text", ".Forward", ".Format" и другие. Затем выполняется метод".Execute" для объекта "Selection.Find" с параметром "Replace:=wdReplaceAll"(т. е. "Заменить все"). Команда With … End With позволяет не писать для каждого свойства или подобъекта полное название соответствующего объекта, что дает возможность экономить место и делать программу лучше и быстрее работающей.

Свойства и методы по-разному отображаются в контекстной подсказке. Так, против названий свойств стоит серый символ указывающей руки, а против названий методов — зеленый значок летящей коробки (см. на рис. 1.8 в предыдущей главе).

Событие — это то, что "происходит с объектом помимо его воли", "результат действия какого-то другого метода". Это "все, что случается" с объектами по милости пользователя или программы. Нажатие кнопки, набор буквы, клик мыши, наступление какого-либо момента времени, завершение работы любой другой программы, — все это события.

События — основа работы любой программы. И даже если программа должна работать автономно (например, планировщик заданий), то в качестве событий используется наступление того или иного времени на системных часах. Так, когда пользователь нажимает кнопку на форме, происходит событие нажатия этой кнопки.

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

На каждое событие пишется своя подпрограмма, которая это событие «обрабатывает» — то есть выполняет определенные действия, которые должны быть выполнены, когда это событие происходит.

Типы данных и объявление переменных

Все переменные в программе на VBA могут содержать какую-нибудь информацию: текст, число, утверждение истинности и др. В зависимости от вида содержимого они подразделяются на типы данных, — соответственно текстовые, числовые, булевые (то есть принимающие значения «да» или «нет», соответственно по-английски «True» или "False"). В VBA определено большое количество различных типов данных, которые может содержать переменная. Вы можете получить информацию о всех возможных типах данных VBA из Справки, найдя в Предметном указателе раздел "Типы Данных" (рис. 2.1).

Так, переменная типа Integer — это целое число -32 768 до 32 767, а переменная типа String — это строка текста длиной до двух миллионов символов.

Рис. 2.1. Справка по типам данных VBA

В зависимости от типа данных с переменной можно производить те или иные действия и вычисления — с числовыми математические, с текстовыми — текстовые (выделение подстроки из строки, получение отдельных символов из строк и др.

Для того, чтобы переменная могла использоваться в программе, она должна быть объявлена — то есть указана в соответствующем разделе модуля, который так и называется — Описания и располагается в самой верхней его части, до начала первой программы (рис. 2.2).

Рис. 2.2. Область описаний программы

Для этого нужно вставить туда описание переменной вида "Dim x(переменная) As (тип данных): Dim a As Integer". Вместо слова Dim могут также использоваться слова Public и Private.

Переменная, объявленная как Public, может использоваться и программами из других модулей и форм, при этом она своего значения не теряет, а переменные, объявленные как Private или Dim, могут использоваться только в программах модуля, в котором они объявлены. При наличии такой же переменной в программах другого модуля ее значение не будет передаваться в них при их вызове из программы модуля, где она объявлена.

Как Public или Private переменная может быть объявлена только в разделе описаний переменных. С помощью же инструкции (то есть команды, не выполняющей реальных действий) Dim она может быть объявлена и в тексте программы, но тогда ее другие модули уже использовать не смогут никак.

Объявление типа переменных нужно программе, чтобы она заранее отвела под них именно столько оперативной памяти, сколько нужно для размещения именно такой переменной. Для логической — хватит и одного бита, для буквенной — нужен целый байт, а для строковой или числовой — значительно большие обьемы. Можно вообще не объявлять специально переменные, включая их в текст программы по мере надобности, так как тогда VBA присвоит им автоматически специальный для таких случаев тип данных Variant и отведет для каждой переменной максимально возможную область памяти, что, впрочем, не имеет особо отрицательного значения из-за большого обьема оперативной памяти на современных компьютерах.

Тип данных Variant отличается еще и тем, что переменные с таким типом автоматически могут преобразовываться в нужный другой тип, например, если переменная «х» имеет тип Variant и значение 2 (число), то после команды "x=Str(x)", которая преобразует число в строку, она уже будет иметь значение «2», то есть текстовая строка с цифрой «2». Такое преобразование было бы невозможно, если бы переменная «х» была объявлена как Integer.

Может показаться, что определять все переменные как тип Variant или вообще не включать в модуль раздел описаний является очень хорошим решением, однако стоит помнить, что необъявленные переменные не могут быть использованы в других модулях или формах, а, кроме того, переменные типа Variant занимают очень много места в оперативной памяти. Можно запретить для себя использование необъявленных переменных, вставив в начало модуля, в верх раздела описаний инструкцию Option Explicit, и тогда программа остановится и перейдет в режим отладки, если вдруг наткнется на такую переменную.

Стоит быть внимательнее с типами данных, так как в некоторых случаях неправильное их использование может дать ошибку. Например, переменная с типом Integer не может превысить значение 32 767; если же надо использовать большие числа, то следует определить ее тип как Long, а если она может быть еще и дробной, то — Double.

Процедуры и функции

В принципе любая программа для каждого конкретного случая может быть написана в виде одного длинного блока текста. Однако такой код будет крайне нерациональным. Например, в программе необходимо несколько раз подсчитать сумму всех членов арифметической прогрессии для разных чисел. Можно, конечно, считать результат каждый раз по известной формуле, но это очень усложнит код. А если неизвестно, для какого количества чисел надо считать эту сумму (например, это определяет пользователь), то написание программы становится почти невозможным. Поэтому в VBA, как и в других современных языках программирования, есть понятие процедур и функций, иначе называемых подпрограммами.

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

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

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

В VBA любая процедура, получающая данные из другой программы, имеет следующий формат:

Sub "Название процедуры"("Получаемая переменная" As "Тип данных получаемой переменной")

"Текст процедуры"

End Sub

Получаемых переменных может быть несколько. Для каждой из них желательно указать ее тип, но это можно опустить.

Вызов процедуры происходит так же, как и вызов любой команды VBA, — путем указания ее названия и передаче ей соответствующих значений переменных, указываемых после имени процедуры в команде ее вызова, как, например, в этой программе:

Sub Main()

Dim a As Integer

a = 1

uvelich a, 3

MsgBox a

End Sub

Sub uvelich(b As Integer, c As Integer)

b = b + c

End Sub

Здесь из процедуры Main вызывается процедура uvelich, которой передаются два параметра — a (равный 1) и второй — число 3. Процедура uvelich увеличивает первую переданную переменную на значение второго переданного числа, а затем Main отображает результат.

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

Переменные могут передаваться в процедуру двумя способами — только для чтения или и для изменения. По умолчанию переменные могут в функции изменяться. Как, скажем, в вышеприведенном примере — переменная «a» была передана в процедуру (под именем «b», чтобы лучше проиллюстрировать этот момент) и там изменилась (к ней прибавили величину переменной "с"), и затем в исходной программе она тоже стала иметь новое измененное значение.

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

К примеру, если бы заголовок процедуры uvelich в вышеприведенном примере имел вид Sub uvelich(ByVal b As Integer, c As Integer), то никакого увеличения переменной «a» не произошло бы и программа отобразила бы в качестве результата число 1. Однако в самой процедуре uvelich соответствующая переменная увеличилась бы на 3 и, если бы последняя ее команда была бы MsgBox b, то она отобразила бы значение 4.

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

Sub Main()

Dim a As Integer

Dim d As Integer

a = 1

d = uvelich(a, 3)

MsgBox d

End Sub

Function uvelich(ByVal b As Integer, ByVal c As Integer) As Integer

uvelich = b + c

End Function

Как нетрудно видеть, программа присваивает переменной «d» значение, вычисленное функцией.

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

Sub Main()

Dim a As Integer

Dim d As Integer

a = 1

d = uvelich(a, 3)

MsgBox d

MsgBox a

End Sub

Function uvelich(b As Integer, c As Integer) As Integer

uvelich = b + c

b=1555

End Function,

то программа бы в качестве значения переменной «а» отобразила бы число 1555, а не 1.

Указания типов переменных в заголовках функций и процедур необязательны — их можно опустить. В этом случае будет считаться, что все передаваемые переменные могут иметь любой тип (точнее, они просто преобразуются в тип Variant и такими уже используются в подпрограмме). Однако необходимо строго следить за соответствием типов переменных в заголовках подпрограмм и в вызывающей их программе. Так, если в заголовке функции указано, что первая переменная, передаваемая ей, имеет тип Integer, то та переменная, которая передается в функцию как первая (в последнем примере — "a"), должна быть определена именно как Integer до вызова функции (что мы и видим в этом примере).

Перед заголовком функции или процедуры можно поставить инструкции Public или Private ("Private Function uvelich(b As Integer, c As Integer) As Integer"). Функция или процедура, объявленная как Public, может вызываться и из других модулей, в то время как функция или процедура, объявленная как Private, доступна только из данного модуля.

По умолчанию все функции и процедуры считаются объявленными как Public (а переменные — объявленные как Private!).

Если в программе есть вложенные процедуры или функции (то есть процедура или функция вызывает другую процедуру или функцию, которая, в свою очередь, вызывает еще одну процедуру или функцию и.т.д.), то их взаимоотношения ("кто кого вызывает?") удобно при отладке отслеживать с помощью окна Стек Вызова (рис. 2.3), в котором видны все произошедшие вызовы.

Рис. 2.3. Окно Стек вызова.

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

Главная процедура — собственно программа — не может иметь параметров (в ее заголовке должны стоять пустые скобки). Только таким процедурам можно назначать кнопки и сочетания клавиш для их вызова на выполнение.

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

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

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

Работа с формами

Формы — это окна интерфейса программы. С их помощью можно сообщать пользователю необходимую информацию или получать ее от него. Для создания форм используются средства редактора VBA. Если хотите наглядно посмотреть, что такое форма — откройте окно установки параметров шрифта (меню "Формат").

Создав форму (из меню правой кнопки мыши в Менеджере проектов выберите Вставить-UserForm) или дважды щелкнув на имени существующей формы, можно попасть в окно Дизайна форм. На появившейся панели инструментов "Панель управления" (если ее нет, то ее можно вызвать из меню Вид-Панель элементов) представлены все возможные элементы формы (рис. 2.4):

…???…

Рис. 2.4. Панель инструментов с компонентами форм

1. Поле отображения текста — отображает текстовую информацию. Просто текст на форме — совет пользователю, к примеру.

2. Поле ввода текста — дает пользователю возможность ввести текстовую информацию. Потом введенные данные можно обрабатывать в программе.

3. Несколько видов списков — средства выбора одного варианта из нескольких представленных, вроде выпадающего списка шрифтов на панели инструментов «Форматирование» в Word.

Значения элементов списков задаются только в программе — при разработке формы с помощью окна "Дизайн форм" их задать нельзя.

4. Флажок — элемент, который независимо от других может находиться в трех состояниях: включенном, выключенном (могут быть определены как пользователем, так и программистом) и неактивном (определяется программой).

5. Переключатель — элемент, который также может находиться во включенном, выключенном и неактивном состояниях. В отличие от флажка, переключатели должны быть обьединены в группы с помощью элемента № 7 — рамки — и, если один из переключателей в группе включен, то остальные включены быть не могут.

В Microsoft Word имеются диалоговые окна, содержащие как флажки, так и переключатели. Так, почти все вкладки меню Сервис-Параметры состоят из флажков, а меню Вставка-Сноска — из переключателей.

6. Выключатель. Это кнопка, которая может находиться в нажатом или отжатом состоянии. Например, в Microsoft Word так себя ведут кнопки показа скрытых символов или форматирования текста курсивом, жирным шрифтом, подчеркиванием.

7. Рамка. Отображает прямоугольник с заголовком. В основном используется для обьединения групп переключателей (тех, что под номером 5 в нашем списке). В одной форме может быть несколько рамок и, как следствие, несколько групп переключателей, могущих действовать независимо друг от друга.

8. Командная кнопка. Обычная командная кнопка вроде кнопок «Ok» или «Отмена» в любом диалоговом окне.

9. Набор вкладок и 10. Набор страниц. Представляют из себя набор страничек-вкладок вроде вкладок «Общие», «Сохранение», «Печать» и др. в диалоговом окне Word Сервис-Параметры. Отличие между этими двумя элементами состоит в том, что 9-й элемент при переключении на другую страничку совершенно не затрагивает другие элементы формы, даже и находящиеся на нем, и изменения в состоянии других элементов можно эадать только программно. 10-й же элемент при своем переключении принудительно (т. е. вне зависимости от программы) скрывает элементы на одной своей странице и показывает элементы на другой.

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

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

11. Полоса прокрутки. Такая же, как и в окне Word. Может передавать в программу число, равное расстоянию в пунктах от ее начала. Верхний предел расстояния неограничен.

12. Счетчик. Две нажимающиеся кнопки со стрелками. Может передавать в программу свое значение от 1 до 100.

13. Рисунок. В этот элемент можно вставить из файла рисунок, который будет храниться в форме (и шаблоне или документе с ней). Для вставки самого рисунка нужно после помещения на форму элемента управления Рисунок в Окне свойств выбрать пункт «Picture», нажать на кнопку слева от него и в появившемся окне открытия файла выбрать нужную картинку — рис. 2.5.

У каждого элемента имеется свое уникальное имя, а также набор свойств. Их можно посмотреть в Окне свойств, выделив элемент и выбрав из контекстного меню правой кнопки мыши пункт «Свойства».

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

Большой набор свойств также имеет сама форма. С помощью выпадающего меню в Окне свойств можно быстро перейти к свойствам необходимого элемента (рис. 2.6).

…???…

Рис. 2.5. Вставка рисунка. на форму

…???…

Рис. 2.6. Выпадающее меню Окна свойств — навигатор по элементам формы

Среди наиболее распространенных свойств, имеющихся почти у всех элементов — Caption (т. е. надпись на поверхности или в заголовке, если он есть), Top и Left — координаты верхнего левого угла элемента, Height и Width — высота и ширина, Enabled — доступность для изменений пользователем, TabIndex — число, показывающее, в какую очередь на данный элемент перейдет фокус (т. е. возможность изменения пользователем содержания или состояния) при переходах между элементами с помощью клавиши табуляции (можно запретить такой переход на какой-либо элемент, указав его свойство TabStop как False). Обратите внимание на свойства Picture, PictureAlignment, PictureSizeMode, PictureTiling собственно формы — с их помощью на поверхность формы можно поместить какой-нибудь фоновый рисунок.

Необходимо помнить, что создание элемента — только начало работы над формой. Сам по себе элемент никаких действий не выполняет, за исключением тех, которые его определяют. Кнопка — нажимается под мышкой или Enter'ом, список показывает значения, во флажке можно поставить и убрать галку, но не более того! Для того, чтобы элемент выполнял какое-нибудь действие при действии с ним, нужно написать для него программу реакции на события.

Событий, могущих произойти с элементом, много. Это и двойной щелчок мыши на нем, это и проводка мыши над ним, это и ввод текста в поле ввода, это и нажатие на вкладке, это и переход к другому элементу… Для того, чтобы написать программу обработки реакции на событие, нужно два раза щелкнуть на элементе. Откроется окно написания программ реакций на события, и автоматически написанная заготовка будет иметь вид:

Private Sub CommandButton1_Click()

End Sub

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

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

…???…

Рис. 2.7. Выпадающий список событий.

В программе реакции формы на события могут быть и другие процедуры и функции, не связанные с элементами формы.

У некоторых событий есть параметры, с которыми информация о его происшествии передается программе. Так, процедура обработки события KeyDown (то есть нажатия какой-либо клавиши тогда, когда активен данный элемент) имеет вид

Private Sub CommandButton1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

End Sub

Переменная KeyCode будет после срабатывания данной процедуры будет иметь значение, равное коду нажатой клавиши, а переменная Shift — 1, если соответствующая клавиша была нажата, и 0, если нет. Эти переменные можно использовать в процедуре.

Все свойства, задаваемые в Окне свойств, можно изменять и из программы. Например, команда TextBox1.Enabled=True даст возможность пользователю ввести текст в поле ввода TextBox1, а команда CheckBox1.Value=False уберет отметку из флажка с именем CheckBox1. Эта возможность делает формы VBA динамическими — то есть содержимое форм может меняться немедленно в ответ на действия пользователя без выгрузки и повторной загрузки формы.

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

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

Для просмотра формы в режиме выполнения (то есть так, как она будет выглядеть в готовой программе) надо нажать клавишу F5 — ту же, что и для запуска на выполнение обычной программы. Все средства отладки, описанные выше, работают и при отладке форм.

Стоит иметь в виду, что после выгрузки формы (методом Unload Me) все переменные, описанные в программе реакции формы на события, обнуляются. Поэтому после выгрузки формы получить от нее какие-либо данные уже нельзя. Если в результате работы формы в основную программу должны передаваться какие-либо данные, то тогда нужно в основной программе объявить несколько переменных с помощью инструкции Public (т. е. сделать их доступными для чтения и изменения из любого другого модуля), а затем в программе реакции формы на события записать в них всю необходимую информацию, полученную от пользователя, и использовать значения этих переменных в основной программе.

Программа реакции формы на события представляет собой полноценный модуль проекта за одним исключением: процедуры из него могут быть вызваны только из другой программы. Вызов формы на исполнение с помощью кнопки, строки меню или сочетания клавиш невозможен. Поэтому для вызова формы необходимо в основной программе (если все необходимые функции реализованы в процедурах программы реакции формы на события, то основную программу все равно необходимо создать, хотя бы только для вызова этой формы) надо указать команду ИмяФормы. Show, а кнопки и сочетания клавиш назначать именно этой основной программе.

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

Операторы цикла и перехода

Если необходимо повторить ту или иную группу операций несколько раз, то используются операторы цикла: Do…Loop, For…Next, For Each…Next и While…Wend.

Если необходимо совершить те или иные действия в зависимости от наличия или отсутствия выполнения какого-либо условия или в зависимости от значения той или иной переменной, используются операторы условия: If…Then…Else и Select Case.

Если необходимо совершить переход к другой части той же программы, то используется оператор GoTo "имя метки". Там, куда должен быть совершен переход, на отдельной строке должна стоять метка с соответствующим именем, а после нее — двоеточие.

Подробное описание функций, особенностей и синтаксиса всех этих операторов можно получить в справочной системе редактора VBA, поэтому не стоит здесь на них останавливаться. Просто наберите интересующий вас оператор в окне Редактора VBA, установите на него курсор и нажмите кнопку F1. В русской версии Office 97 справка по этим операторам переведена на русский язык.

Полезный совет

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

Для того, чтобы «отучить» Word2002 (из OfficeXP) перерегистрировать расширения файлов при каждом запуске, создайте в системном реестре, в разделе HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Word\ Options параметр NoRereg, имеющий формат Dword и равный 1, а чтобы сделать то же с Word2000, отредактируйте так же содержимое раздела HKEY_CURRENT_USER\Software\ Microsoft\Office\9.0\Word\Options. Подробнее о системном реестре вы можете узнать в главе 14.

Глава 3. Создание первой макрокоманды

В предыдущих двух главах рассказывалась о языке Visual Basic for Applications (сокращенно — VBA), его возможностях и правилах, а также о Редакторе VBA — средстве создания программ на этом языке в среде Microsoft Office. Теперь же на наглядном примере рассмотрим процесс создания простой макрокоманды для Word, подробно обьясняя и иллюстрируя все шаги этого процесса.

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

* * *

У программы Microsoft Word есть огромное количество возможностей по работе с текстом. И огромные возможности по замене и поиску, и средства помещения в документ графики, не уступающие многим современным издательским системам, и средства оформления документов красивыми шрифтами и границами… Казалось бы — что еще надо, все необходимые возможности уже учтены создателями Word? Однако иногда перед пользователями встают такие задачи, разрешить которые с помощью стандартных средств Word очень трудно, а то и вовсе невозможно. Но для этого в Word, как, впрочем, и во всех компонентах пакета Microsoft Office, как раз и есть очень мощное средство разрешения подобных проблем: встроенный язык программирования.

Вот наглядный пример, когда именно написание программы-макроса — единственный более-менее достойный выход из проблемы.

Все документы на моем компьютере оформлены приблизительно одинаково — для удобства редактирования, переноса текста из одного документа в другой и др. Можно даже сказать, в чем заключаются эти мои предпочтения — шрифт Times New Roman, 12 пунктов, выделения — жирным и курсивом, выравнивание по ширине, все отступы абзацев равны нулю, а красная строка — 1 см. Именно в таком формате я держу все свои документы Word. Кроме того, я очень люблю формат Rtf и стараюсь, по-возможности, делать копии своих документов в этом формате. Но вот из Internet'а я скачал 50 файлов с интересующей меня информацией — скажем, рефератов по актуальным вопросам кардиологии. И все они были набраны разными людьми в соответствии с предпочтениями каждого: везде разный шрифт, разные размеры шрифта, отступы абзацев — все вкривь и вкось, выравнивание — то влево, то по ширине. В общем, работы по приведению в приемлемый вид — куча. (Для тех, кто является решительным противником однообразия оформления своих документов, приведу другую ситуацию: Вы являетесь организатором конференции, на которую все заинтересованные лица прислали свои доклады, и Вам надо привести их в однообразный вид для помещения в Internet, например, или для последующей отдельной распечатки каждого доклада.)

Можно, конечно, повозиться с каждым документом: открывать, ставить нужный шрифт, отступы, сохранять в формате Word, потом Rtf… Если документов — два, да даже десять, то еще как-то можно справиться, а если их сорок или сто? И вот тут-то придут на помощь макросы.

Но как можно написать программу, да-да, настоящую программу на настоящем языке программирования, ничего не зная о нем, кроме того, что он существует? Это действительно было бы очень трудно сделать на С++ или даже Delphi. Но для написания программ на VBA не надо особых знаний — они появятся в процессе работы. Важно лишь уметь думать.

Итак, начинаем.

Вначале я определился, что мне надо сделать с каждым документом. Во-первых, обязательно заменить шрифт на Times New Roman, 12 пунктов. Кроме того, необходимо сделать весь текст одного цвета. Во-вторых, убрать все отступы абзацев. В-третьих, заменить все выравнивание по левому краю выравниванием по ширине. Наконец, нужно обработать все документы, предварительно сохранив каждый в формате Rtf.

Я открыл пару документов из общей кучи и включил запись макроса, согласившись на его имя по умолчанию — все равно потом буду его редактировать. После начала записи макроса я стал обрабатывать документ, а Word скрупулезно переводил мои действия на язык VBA. Выбрал "Правка-Выделить все", выбрал «Формат-Шрифт», поставил шрифт Times New Roman, 12 пунктов, Черный цвет. Выбрал «Формат-Абзац», обнулил все отступы и поставил одинарный межстрочный интервал и красную строку. Затем выбрал «Правка-Заменить», и, указав в графе «Формат-Абзац» для заменяемого — выравнивание влево, а для заменяющего — выравнивание по ширине, а также «Везде» в графе «Направление», провел замену выравниваний во всем тексте (выделенном целиком еще на первом шаге).

После окончания всех этих действий я сохранил документ командой Файл-Сохранить. Затем я выбрал команду Файл-Сохранить в формате Rtf и сохранил документ и в этом формате, после чего закрыл его и выбрал на панели записи макроса кнопку Остановить.

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

Итак, открываем редактор VBA и, развернув в Менеджере проектов содержимое папки Normal (то есть макросов в шаблоне Normal.dot), выберем модуль NewMacros. Именно в этот модуль попадают все макросы, записанные пользователем. Поскольку записанный нами макрос — первый, то он сразу и откроется.

Вот его содержимое:

Sub Макрос1()

' Макрос1 Макрос

Selection.WholeStory

With Selection.Font

Name = "Times New Roman"

Size = 12

ColorIndex = wdBlack

End With

With Selection.ParagraphFormat

LeftIndent = CentimetersToPoints(0)

RightIndent = CentimetersToPoints(0)

SpaceBefore = 0

SpaceAfter = 0

LineSpacingRule = wdLineSpaceSingle

FirstLineIndent = CentimetersToPoints(1)

End With

Selection.Find.ClearFormatting

Selection.Find.ParagraphFormat.Alignment = wdAlignParagraphLeft

Selection.Find.Replacement.ClearFormatting

Selection.Find.Replacement.ParagraphFormat.Alignment = wdAlignParagraphJustify

With Selection.Find

Text = ""

Replacement.Text = ""

Forward = True

Wrap = wdFindContinue

Format = True

MatchCase = False

MatchWholeWord = False

MatchWildcards = False

MatchSoundsLike = False

MatchAllWordForms = False

End With

Selection.Find.Execute Replace:=wdReplaceAll

ActiveDocument.Save

ActiveDocument.SaveAs FileName:="Доклад1.rtf", FileFormat:=wdFormatRTF, LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= False

ActiveWindow.Close

End Sub

Разберем все его строки более подробно.

Sub Макрос1()

' Макрос1 Макрос

Как нетрудно догадаться, это заголовок макроса. Слово "Sub", как уже говорилось, означает начало программы. Название программы — в данном случае "Макрос1" — является уникальным именем, по которому эту программу можно запустить из других программ этого модуля.

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

Selection.WholeStory

Скорее всего, это — переведенная на язык VBA при записи макроса команда Выделить все. В самом деле, ведь первое действие, выполненное в процессе записи — именно выделение всего текста. Подтвердить это нетрудно, просто поставив курсор на слово «WholeStory» и нажав кнопку вызова помощи F1. Справка языка VBA устроена очень удобно — при ее вызове из редактора VBA она «смотрит», не стоит ли курсор на одном из слов, являющихся командой VBA, и, если курсор стоит именно на таком слове, то выводится справка, относящаяся к этой самой команде (рис. 3.1).

Рис. 3.1. Вот что показывает справка по слову WholeStory

Немножко непонятный текст, но при помощи словаря удастся перевести, что эта команда расширяет выделение на весь текст.

Небольшое отступление

Конечно, при самом первом знакомстве с редактором VBA эта информация вряд ли будет очевидной. Но стоит ее привести именно здесь, чтобы строение команд этого языка было более понятным.

Как уже неоднократно упоминалось, язык VBA называется обьектно-ориентированнным. Такое название дано этому языку, как, впрочем, и большому количеству других современных языков программирования, из-за особого строения его команд (более подробно синтаксис VBA был описан во второй главе). Типичная команда Visual Basic имеет такой вид: <Обьект>.<Обьект, входящий в первый обьект>.<…>.<Тот обьект, с которым нужно произвести действие>.<Собственно действие>. Иными словами, каждая команда пишется как бы "с конца": вначале определяется то, над чем надо произвести действие — обьект, а затем само действие — метод. Разделителями компонентов команды служат точки. Вот пример такой команды:

Selection.Font.Size = 12

Эта команда устанавливает размер шрифта во всем выделенном тексте в 12 пунктов. У обьекта Selection (то есть выделенная в данный момент часть текста) есть подобьект Font — шрифт выделенного текста, а у подобьекта Font — свойство Size. Свойство Size тоже можно считать подобьектом. Знак "=" — это оператор присваивания, в данном случае свойству Size обьекта Font обьекта Selection присваивается значение 12 — размер шрифта во всем выделенном тексте устанавливается в 12 пунктов.

Если в документе ничего не выделено, то в 12 пунктов устанавливается размер текущего шрифта и следующая набранная буква будет именно такого размера. Если выделен графический обьект, то команда будет ошибочной, о чем VBA выдаст соответствующее сообщение.

Кроме того, с помощью подобной команды можно получить информацию о текущем размере шрифта:

а = Selection.Font.Size

После ее выполнения переменная а будет иметь значение, равное размеру шрифта выделенного текста. Как видите, синтаксис команды подобен ситаксису предыдущей.

Если в документе ничего не выделено, то переменная а будет иметь значение размера шрифта следующего за курсором символа. Если разные части выделенного текста оформлены разными шрифтами, то переменная а будет иметь значение 9999999. Если выделен графический обьект, то команда будет ошибочной, о чем VBA выдаст соответствующее сообщение.

* * *

With Selection.Font

Name = "Times New Roman"

Size = 12

ColorIndex = wdBlack

End With

Похоже, это что-то, связанное со шрифтом. В самом деле, ведь «Font» по-английски значит «шрифт», а «Selection» — «выделение». По слову «Name» можно заключить, что в этой команде устанавливается имя шрифта — "Times New Roman", а слово «Size», наверное, устанавливает его размер.".ColorIndex = wdBlack" — выглядит как команда, устанавливающая цвет шрифта: есть слово «Color» — «цвет» и есть слово «Black» — «черный». Но чтобы не гадать попусту, посмотрим справку VBA — поставим курсор на слово «Selection» и нажмем F1 (рис. 3.2).

Рис. 3.2. Справка по слову "Selection"

Используя англо-русский словарь, можно узнать, что «Selection» означает выделенный текст или точку ввода текста. Посмотрим справку по слову «Font» (рис. 3.3).

Рис. 3.3. Справка по слову "Font"

Что-то маловато информации. Ну, ясно, что шрифт, а как пишется команда, какие у нее могут быть еще параметры? Нажмем-ка на подчеркнутое слово «Font» в тексте — это выведет информацию об обьекте «Font» (рис. 3.4).

Рис. 3.4. Справка об обьекте "Font"

Ну, теперь все ясно. Даже примеры приведены, — и очень похожие на наш макрос. Посмотрим тогда ссылку «Properties» вверху окна справки — список свойств шрифта, которые можно задать в программе (рис. 3.5).

Рис. 3.5. Список свойств обьекта "Font"

Это, кстати, такой же список, как и тот, что выпадает в качестве контекстной подсказки, если при наборе текста программы вручную поставить после слова «Font» точку. Видно, что там есть все свойства шрифта, задаваемые в макросе: и «Name», и «Size», и «ColorIndex». Можно при желании почитать про каждое свойство подробно, но, наверное, лучше разобраться с командой «With», которая встречается и в нашем макросе, и в справке по слову «Font». Ставим на нее курсор и нажимаем F1 (рис. 3.6).

Рис. 3.6. Справка по слову "With"

Даже на русском (некоторые разделы справки VBA переведены на русский язык). Ну и прекрасно — прочтя справку, узнаем, что "Инструкция With позволяет выполнить последовательность инструкций над указанным объектом, не повторяя задание имени объекта." То есть она позволяет сократить обьем кода и облегчить ориентировку программиста в нем, — иначе, без этой функции, рассматриваемый фрагмент кода нашего макроса имел бы вид

Selection.Font.Name = "Times New Roman"

Selection.Font.Size = 12

Selection.Font.ColorIndex = wdBlack

что и выглядит некрасиво, и места больше требует. Примем к сведению.

Идем дальше:

With Selection.ParagraphFormat

LeftIndent = CentimetersToPoints(0)

RightIndent = CentimetersToPoints(0)

SpaceBefore = 0

SpaceAfter = 0

LineSpacingRule = wdLineSpaceSingle

FirstLineIndent = CentimetersToPoints(1.27)

End With

Это — команда установки параметров выделенных абзацев: отступов, межстрочного интервала, красной строки. Нетрудно получить эту информацию из справки или просто догадаться, — ведь «Paragraph» означает «абзац».

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

Sub Макрос2()

' Макрос записан 26.01.00

With Selection.ParagraphFormat

LeftIndent = CentimetersToPoints(1)

RightIndent = CentimetersToPoints(1)

SpaceBefore = 1

SpaceAfter = 1

LineSpacingRule = wdLineSpace1pt5

Alignment = wdAlignParagraphJustify

WidowControl = True

KeepWithNext = False

KeepTogether = False

PageBreakBefore = False

NoLineNumber = False

Hyphenation = True

FirstLineIndent = CentimetersToPoints(1)

OutlineLevel = wdOutlineLevelBodyText

End With

End Sub

Что-то не то! Код какой-то большой и много новых команд, которых не было записано в первый раз! Какие-то".WidowControl", ".KeepWithNext"… Впрочем, ясно, что это свойства абзаца — наверное, "Контроль висячих строк", "Не отрывать от следующего". Но почему же в первый раз записанный код был гораздо меньше, и все было "по делу"?

Сравним оба случая. В прошлый раз все абзацы в документе были оформлены по-разному, а в этот раз оформление обоих абзацев было одинаковым. Может, в этом дело? И действительно, поэкспериментировав еще (уж не буду здесь приводить все тексты), позаписывав макросы при оформлении разнооформленных абзацев и одинаково оформленных, можно прийти к выводу, что в текст записанного макроса попадают те свойства, которые после установки параметров абзацев через диалоговое окно "Формат"-"Абзац" оказываются одинаковыми у всех обрабатываемых абзацев! И неважно, были ли эти свойства установлены такими именно сейчас, или когда-то ранее.

Небольшое отступление

Средство записи макросов VBA отслеживает не столько действия пользователя, сколько изменения параметров текста. Поэтому при задании свойств абзаца с помощью соответствующего диалогового окна "Формат"-"Абзац" оно скрупулезно записывает в макрос все параметры этого диалогового окна, которые в нем были заданы при нажатии кнопки Ok. Если абзацы имели разное оформление, которое не было изменено в данный момент на единообразное, то те пункты данного диалогового окна, которые остались различными у разных абзацев в выделении, будут иметь неопределенное значение, и средство записи макросов не сможет их поместить в текст записываемого макроса. В самом же диалоговом окне подобные неопределенные опции отображаются галочкой на сером фоне, а в полях указания размеров отступов не стоят их значения.

Если же все выделенные абзацы были оформлены единообразно, то все значения диалогового окна "Формат"-"Абзац" будут определены, и все они попадут в текст макроса.

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

Если при вызове диалогового окна параметров текста или шрифта во время записи макроса в документе ничего не было выделено, то будут определены все параметры диалогового окна, и в макрос попадут все свойства, могущие быть указанными в окне. Установленные параметры будут использоваться для вновь набираемого текста.

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

* * *

Идем дальше.

Selection.Find.ClearFormatting

Selection.Find.ParagraphFormat.Alignment = wdAlignParagraphLeft

Selection.Find.Replacement.ClearFormatting

Selection.Find.Replacement.ParagraphFormat.Alignment = wdAlignParagraphJustify

With Selection.Find

Text = ""

Replacement.Text = ""

Forward = True

Wrap = wdFindContinue

Format = True

MatchCase = False

MatchWholeWord = False

MatchWildcards = False

MatchSoundsLike = False

MatchAllWordForms = False

End With

Selection.Find.Execute Replace:=wdReplaceAll

Насколько помнится, при записи макроса мы вызывали функцию замены Word для изменения всего выравнивания абзацев по левому краю на выравнивание по ширине. И вот перед нами эта функция, вызов которой записан на языке VBA. По всей видимости, строчка "Selection.Find.ClearFormatting" означает очищение параметров форматирования в окне замены — эквивалент нажатию кнопки "Снять форматирование", а фразы "Selection.Find.ParagraphFormat.Alignment = wdAlign ParagraphLeft" и "Selection.Find.Replacement.Paragraph Format.Alignment = wdAlignParagraphJustify" — установка параметров того, что надо искать — выравнивания «Left» (то есть по левому краю) и того, на что надо заменять — выравнивания «Justify» (по ширине). Нетрудно было догадаться — просто переведя с английского языка значения слов, входящих в команды: «Selection» — выделение, "Find.Replacement" — найти и заменить, «ParagraphFormat» — формат абзаца, «Alignment» — выравнивание, "AlignParagraphJustify" — «РавнятьАбзацПоШирине». Что ж, ясно. Оператор «With» нам уже знаком — в следующим за разобранными нами строчками фрагменте речь пойдет об окне "Найти и заменить".

Легко сообразить, что все параметры обьекта "Selection.Find" (то есть поиска в выделенной части текста или во всем тексте) соответствуют параметрам окна "Найти и заменить": ".MatchWholeWord" — "искать целое слово", ".MatchCase" — "учитывать регистр".".Text" — здесь, наверное, надо указать заменяемый текст, а".Replacement.Text" — здесь то, на что заменить. В нашем случае заменять надо не текст, а форматирование, поэтому эти строчки пусты.

Заметив повторения слов "Selection.Find" в первых четырех строчках, можно посчитать, что и их содержимое можно включить в блок оператора «With». Проверим-ка это. Чуть ниже последнего записанного нами макроса напишем строчку: "Sub experience1()" (имя после «Sub» может быть любым, важно лишь, чтобы оно не совпадало с какой-либо командой VBA). Нажмем Ввод — парой строчек ниже редактор VBA напишет: "End Sub". С помощью команд «Копировать» и «Вставить» скопируем из нашей программы в текст нового макроса блок "With Selection.Find". А затем переместим все строчки, относящиеся к отражению в макросе работы окна "Найти и заменить" в блок "With Selection.Find", убрав слова "Selection.Find":

Sub experience1()

With Selection.Find

ClearFormatting

ParagraphFormat.Alignment = wdAlignParagraphLeft

Replacement.ClearFormatting

Replacement.ParagraphFormat.Alignment = wdAlignParagraphJustify

Text = ""

Replacement.Text = ""

Forward = True

Wrap = wdFindContinue

Format = True

MatchCase = False

MatchWholeWord = False

MatchWildcards = False

MatchSoundsLike = False

MatchAllWordForms = False

Execute Replace:=wdReplaceAll

End With

End Sub

Попробуем программу в деле. Откроем еще один документ из общего набора и запустим клавишей F5 новый макрос на выполнение (курсор должен стоять внутри текста запускаемого макроса). Все прекрасно! Замена произошла так, как необходимо. Значит, ясно — так сокращать текст программы можно.

Осталось еще несколько интересных строчек, конкретное значение которых может вызвать вопросы — ".Forward = True", ".Wrap = wdFindContinue", ".Execute Replace:=wdReplaceAll". Ну, первая — это направление поиска — вперед или назад (тогда бы там было значение "False"). Но что значит вторая? А запишем-ка для выяснения еще макрос с такой же заменой выравнивания влево на выравнивание по ширине, но с разными параметрами направления поиска. Вот что получилось:

Видно, что наличие или отсутствие согласия на продолжение поиска не влияет на записываемый текст. А как же тогда отказаться от запроса на продолжение? Откроем текст макроса и поставим после команды".Wrap" еще один знак "=" (рис. 3.7).

Ну вот, все и ясно — для отказа от продолжения замены после достижения конца документа нужно поставить значение параметра".Wrap" как «wdFindStop». То есть вышеприведенная таблица должна иметь вид

Осталось разобраться со строчкой".Execute Replace:= wdReplaceAll". По логике вещей, это должна быть команда запуска поиска, тем более что и слово «Execute» означает «Запустить». Посмотрим в справке — по слову «Execute». Так, четыре ссылки: "For information about the Execute method, click one of the following object names: Dialog, Find, KeyBinding, MailMerge". Нас интересует вторая — «Find», так как мы работаем именно с этим обьектом. Открываем…

Так и есть — команда".Execute" запускает команду поиска и замены на выполнение: "Runs the specified find operation. Returns True if the find operation is successful.". Из текста справки также узнаем, что все параметры поиска и замены можно было бы задать и в скобках, а, кроме того, результат выполнения команды можно записать в переменную — успешен ли был поиск или нет (то есть были ли найдены в данном сеансе работы команды "Найти и заменить" искомые элементы). Сейчас данная возможность не требуется, однако запомнить ее стоит — мало ли когда пригодится.

Продолжаем изучать записанную макрокоманду.

ActiveDocument.Save

Вопросов не вызывает — это команда сохранения активного документа.

ActiveDocument.SaveAs FileName:="Доклад1.rtf", FileFormat:=wdFormatRTF, LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= False

А вот здесь уже понадобится редактирование. Это команда "Сохранить Как…" — поскольку соответствующая команда Word представляет собой диалоговое окно, то в текст макроса помещаются все возможные параметры, как соответствующие установленным по умолчанию, так и нет: «AddToRecentFiles» — добавлять ли ярлык в папку «Recent», «EmbedTrueTypeFonts» — внедрять ли шрифты TrueType. Наиболее интересны элементы "FileName:="Доклад1.rtf"" и "FileFormat:=wdFormatRTF" — имя файла, под которым сохраняется активный документ, и тип сохраняемого файла. Тип нас устраивает — формат Rtf. А вот как быть с именем? Ведь у каждого файла должно быть свое, уникальное имя. Попробуем для начала просто исключить строчку с указанием имени из текста данной команды. Создадим еще один модуль, скопируем туда всю команду "ActiveDocument.SaveAs" со всеми параметрами и удалим строчку "FileName:="Доклад1.rtf"". Запустим программу… ничего не произошло. Но ведь программа что-то делала: и жесткий диск работал, и система была недоступна пару секунд, и сообщений об ошибках не было… Что же все же сработало? А откроем-ка в «Блокноте» или другом редакторе простого текста файл, который сохранялся — у меня это был файл "Доклад2.doc", предварительно выгрузив его из Word (рис. 3.8).

Рис. 3.8. Откроем в «Блокноте» файл, который сохранялся нашей командой

Так вот в чем дело — файл был сохранен в формате Rtf, но под прежним именем и с расширением".doc"! Но нас это не устраивает — имя пусть будет то же, а вот расширение должно быть именно".rtf".

Интересно, а что будет, если запустить эту программу при активном ни разу не сохранявшемся документе? Запускаем… Активный документ приобрел имя "Doc1.doc" (ну, или "Doc2.doc", "Doc3.doc" — у кого как). Но где он сохранился? Ищем по F3 в Explorere — так, сохранен он в папке, где произошло последнее ручное сохранение какого-либо файла или в папке для документов Word по умолчанию.[3]

Следовательно, при программном сохранении ранее несохранявшегося документа без задания ему имени и места сохранения (место сохранения можно задать, включив в имя документа в пункте «FileName» полный путь к его новому местоположению) происходит сохранение активного документа в папке по умолчанию (или в папке, где был последний раз сохранен вручную какой-нибудь документ) и с именем по умолчанию. Примем к сведению.

Но как же нам быть с нашей программой? Нам ведь надо, чтобы все обрабатываемые файлы сохранялись под своим именем и в формате и с расширением Rtf! А попробуем-ка каким-нибудь способом получить программно имя активного документа. Создадим еще один макрос, и напишем там «ActiveDocument», ставим точку (рис. 3.9) и видим, что среди возможных продолжений команды есть свойство "Name".

Рис. 3.9. А так можно найти нужное продолжение команды.

Похоже, это и есть то, что нам надо. Проверим. Модифицируем экспериментальную процедуру следующим образом:

Sub experience2()

MsgBox ActiveDocument.Name

End Su

Это позволит нам вызвать окно сообщения с значением функции "ActiveDocument.Name". Можно было бы написать "Debug.Print ActiveDocument.Name", что отобразило бы значение этой функции в специальном Окне отладки (вызывается из меню редактора VBA "Вид"-"Окно отладки"). Но использовать окно сообщения как-то привычнее. Итак, нажимаем F5… получаем окно с сообщением: "Доклад1.doc".

Но нам ведь нужно одно только имя, без расширения! Как же его получить? Наверное, проще всего убрать последние четыре символа — ".doc". Но как?

Воспользуемся справкой. Нажмем F1 в редакторе VBA, в открывшемся окне нажмем кнопку «Разделы», а там — "Предметный указатель", — в нем все разделы справки классифицированы по смыслу, в то время как в разделе «Поиск» лишь составлена база данных по всем словам, входящим в справочную систему VBA.

Наберем в строке поиска слово «строка». Из списка разделов справочной системы VBA выберем то, что нам надо — строчку "крайние левые символы" (ведь нам нужно получить из имени документа с расширением только его имя, то есть левую часть строки без четырех правых символов, то есть крайние слева символы). Получаем справку по функции «Left» (рис. 3.10).

Рис. 3.10. Справка по функции Left.

Превосходно — функция «Left» является именно той функцией, которая нам требовалась. Но она требует значение количества символов во всей строке — как это узнать? Да так, как описано в данном справочном окне в разделе "Дополнительные сведения" — через функцию «Len». Нажмем ссылку "См. также", выберем из списка строчку "Функция Len" и изучим появившуюся информацию.[4]

Немного подумав и использовав данные о синтаксисе обеих команд в справке, можно написать команду, которая возвращает строку без последних четырех символов:

imyadoc = Left(ActiveDocument.Name, Len(ActiveDocument.Name) — 4)

Можно проверить. Создадим еще один модуль:

Sub experience3()

imyadoc = Left(ActiveDocument.Name, Len(ActiveDocument.Name) — 4)

MsgBox imyadoc

End Sub

и запустим его. В окне сообщения — имя документа без расширения. Все так, как нам необходимо.

Небольшое отступление

Вышеизложенный способ получения имени активного документа без расширения — не самый лучший, хотя имеет право на существование. Есть еще один способ узнать только имя документа, унаследованный из предыдущих версий Word, — в Word 6.0 и Word 95 была специальная команда для получения имени документа, к сожалению, в VBA не включенная. Однако она может быть использована в VBA, так как макросы для Word 6.0 и Word 95 могут выполняться и в более новых версиях Office. При открытии в Office 97/2000/XP шаблонов с макросами, созданных в предыдущих версиях Office, все макросы автоматически конвертируются для выполнения в VBA с помощью включенной в него версии языка WordBasic, на котором писались макрокоманды для Word 6.0 и Word 95.

В Word 6.0 и Word 95 имелась функция "FileNameInfo$(документ, параметр)", с помощью которой можно было получить имя документа без расширения, путь к документу без имени и путь к документу вместе с именем. Для того, чтобы узнать одно имя документа, без расширения и пути, значение параметра должно быть равно 4. (Все это подробно описано в справке по WordBasic для Microsoft Word 6.0 и Microsoft Word 95.)

В VBA эта функция будет выглядеть так:

imyadoc = WordBasic.[FileNameInfo$](ActiveDocument.Name, 4)

Она возвращает полное имя документа без расширения и пути.

Данная функция просто незаменима при обработке документов с расширениями, состоящими не из трех символов — например, ".html". В то время как в таких случаях с помощью функций «Len», «Mid», «Right» пришлось бы писать огромные фрагменты кода для получения имени документа без расширения, эта функция позволит получить его одной строчкой.

Однако при первой работе с VBA она не будет очевидной, так как узнать о ней, и тем более о ее необходимых параметрах может только тот, кто раньше имел дело с WordBasic. Поэтому в нашей программе будет использоваться предыдущая функция — "imyadoc = Left(ActiveDocument.Name, Len(ActiveDocument.Name) — 4)".

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

* * *

Итак, команда нашей программы "ActiveDocument.SaveAs" должна выглядеть так:

ActiveDocument.SaveAs FileName: = Left(ActiveDocument.Name, Len(ActiveDocument.Name) — 4), FileFormat:=wdFormatRTF, LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= False

Все лишнее можно убрать, хотя это не обязательно:

ActiveDocument.SaveAs FileName: = Left(ActiveDocument.Name, Len(ActiveDocument.Name) — 4), FileFormat:=wdFormatRTF

Не мешало бы еще, чтобы новый документ в формате Rtf сохранялся в той же папке, что и исходный. Для этого добавим к параметру «FileName» информацию о пути к активному документу:

ActiveDocument.SaveAs FileName:=ActiveDocument.Path + "\" + Left(ActiveDocument.Name, Len(ActiveDocument.Name) — 4), FileFormat:=wdFormatRTF

Иначе Word будет сохранять документы в той папке, где последний раз был сохранен или открыт како-нибудь документ с помощью диалоговых окон "Сохранить как…" и "Открыть…". А это все же не всегда будет той же самой папкой, где находятся обрабатываемые документы, — к тому же документы для обработки можно открывать в Word и путем перетаскивания иконки файла в окно редактора, а при таком способе открытия папка сохранения документов не меняется.

И, наконец, последняя строчка:

ActiveWindow.Close

End Sub

Вот и конец программы — закрытие активного окна с документом.

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

Как это сделать? Заметим, что готовый документ закрывается после обработки, и в окне Word активизируется следующий документ из всех открытых в редакторе. Следовательно, во-первых, надо обеспечить выполнение макроса над всеми документами, то есть его повторение — после окончания работы макроса он должен быть выполнен сначала. Можно считать, что в момент обработки в окне Word будут открыты лишь те документы, которые обработать надо — лишние всегда можно закрыть, а если так уж необходимо оставить их открытыми, то ничего не мешает открыть для обработки файлов новое окно Word. Для выполнения макроса сначала нужно заставить VBA перейти в начало программы. Поищем в справке VBA, в Предметном указателе по слову «переход» — есть ли какая команда для этого? Получаем список — «безусловные», "при ошибке", "условные".[5]

Выберем «Безусловные» — ведь в нашей программе надо обязательно перейти к обработке следующего документа. Получаем выбор из двух функций — выберем вторую, название короче — наверняка ее использование проще.

Из справки и примера узнаем, что инструкция (то есть функция, которая не возвращает никаких значений) «Goto» указывает на необходимость перехода к строке, на которой находится установленная нами метка. Поставим метку[6] в начало нашей программы:

Sub Макрос1()

' Макрос1 Макрос

metka:

Selection.WholeStory

With Selection.Font

Name = "Times New Roman"

… … … …

а в ее конец — инструкцию "Goto":

… … … …

ActiveDocument.SaveAs FileName:=ActiveDocument.Path + "\" + Left(ActiveDocument.Name, Len(ActiveDocument.Name) — 4), FileFormat:=wdFormatRTF

ActiveWindow.Close

Goto metka

End Sub

Готово. Теперь наша программа обработает все открытые документы. Но… обработать-то обработала, но в конце выдала сообщение об ошибке. Можно, конечно, оставить и так, но программа, заканчивающая свою работу ошибкой, пусть и после выполнения всех необходимых действий, выглядит некрасиво. Поэтому нужно обеспечить остановку выполнения программы после того, как будут обработаны все документы. Итак, алгоритм действий программы должен быть таков:

1. Выполнить обработку активного документа, сохранить его и закрыть.

2. Посмотреть, есть ли еще открытые документы.

3. Если есть, то перейти к пункту 1, если нет, то завершить работу.

"Если" — по-английски «If». Поищем по этому слову в Предметном указателе справки. Получаем строчку: "Инструкция If", выбрав которую, получаем окно из различных сочетаний слов If, Then, Else и др.[7]

Выберем "Инструкция If…Then…Else" — вроде первое слово понятнее. Получаем справку, из которой узнаем синтаксис команды:

If условие Then [инструкции] [Else инструкции_else]

Какое же условие должно быть у нас? Наверное, подсчет количества открытых документов — если не 0, то продолжать работу, а если 0, то остановиться. А как можно подсчитать количество открытых документов? Посмотрим, нет ли в VBA команды для такого подсчета? Напишем в тексте программы: «Documents», поставим точку и просмотрим выпавший список. Так и есть — в списке имеется метод «Count»: скорее всего, это функция подсчета. Выберем ее из списка и посмотрим по ней справку и пример — да, эта команда считает открытые документы. То есть условие должно выглядеть как "If Documents.Count > 0 Then … ". Ну, а инструкции — переход к метке — нами уже написаны.

Часть команды "Else …" можно опустить, а просто написать нужные инструкции после команды "If…" — ведь все равно к их выполнению программа не перейдет до тех пор, пока останутся открытые документы. А поместить там, наверное, стоит вызов сообщения, желательно со звуковым сигналом, — чтобы можно было поставить документы на обработку и отойти. Используем функцию MsgBox (о ее синтаксисе подробно написано в справке):

signal = MsgBox("Обработка закончена", vbInformation, "Обработка текстов")

Итак, программа готова. Можно с помощью диалогового окна «Настройка» назначить ей кнопку, пункт меню или сочетание клавиш, и запускать ее при необходимости.

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

Опять воспользуемся Справкой. В Предметном указателе зададим слова "dialog boxes", выберем эту же строчку из списка тем. В появившемся окне выбора выберем второе — "Displaying Built-In Word Dialog-Boxes", так как это, судя по названию, более общая тема, чем список аргументов диалоговых окон. Читаем… В переводе текст справки означает, что с помощью команды Dialogs("имя диалога"). Show можно вызвать на экран любое встроенное диалоговое окно Word, вроде окна открытия файла или сохранения в папке. Попробуем найти окно, которое возвращало бы путь к какой-нибудь директории. Для этого создадим очередной экспериментальный модуль и будем перебирать в нем все возможные имена диалоговых окон (рис. 3.11).

Рис. 3.11. Для поиска нужной команды можно перебрать список встроенных диалоговых окон Word.

В качестве метода вывода окна на экран установим".Display" — вывод окна на экран без каких-либо последующих действий: если с помощью команды Dialogs(wdDialogFileOpen). Show будет выведено окно открытия файла, то при нажатии кнопки «Открыть» в нем выбранный в окне файл будет открыт, а если окно выводилось командой Dialogs(wdDialogFileOpen). Display, то открытия файла не произойдет, но имя выбранного файла можно будет записать в переменную:

With Dialogs(wdDialogFileOpen)

Display

imya=.Name

End With

и впоследствии использовать это имя по своему усмотрению.

При использовании встроенных диалоговых окон Word обязательно использование оператора With, так как, казалось бы, эквивалентный фрагмент кода

Dialogs(wdDialogFileOpen). Display

imya=Dialogs(wdDialogFileOpen). Name

работать не будет.

После перебора остановимся на окне Dialogs(wdDialogCopyFile) — копирование файла. Посмотрев ссылку "Built-in dialog box argument lists" окна "Displaying built-in Word dialog boxes", получаем список всех возможных аргументов диалоговых окон (то есть параметров, значения которых можно получить из окон или задать им). Нас интересует параметр «Directory» (папка, куда скопируется файл, указанный в параметре «FileName» при выполнении метода «Show» или «Execute» — при выполнении последнего метода происходит задание или получение необходимой информации из параметров диалогового окна без отображения собственно диалога). Поэкспериментируем с этим окном — напишем в экспериментальном модуле следующий код:

Sub experience4()

With Dialogs(wdDialogCopyFile)

Display

papka =.Directory

End With

MsgBox papka

End Sub

Запустив эту программу несколько раз, получаем, что в переменную «papka» записывается путь и имя папки, но, если в пути или имени были пробелы, то путь окаймляется кавычками: "C: \Program Files\Microsoft Office\Шаблоны\", а если пробелов в пути не было, то кавычки по краям не ставятся. Поэтому возвращаемую переменную нужно обработать — убрать кавычки. Сделать это можно с помощью уже известных нам команд «Left», «Rigth», «Mid» и "Len":

If Right(papka, 1) = Chr$(34) Then papka = Mid(papka, 2, Len(papka) — 2)

"Chr$(34)" — это команда, которая возвращает символ с ASCII-кодом 34: кавычку. (Каждый символ в Dos и Windows имеет свой номер — ASCII-код, по которому его можно вызвать на экран. Узнать код выделенного символа можно командой "MsgBox Asc(Selection.Text)". Узнать о командах "Chr$" и «Asc» можно, порывшись в справке.)

Кроме того, не мешало бы сделать так, чтобы при запуске программы окно "Копирование файла" по умолчанию стояло бы на директории с активным документом — не всегда же нужно сохранять все обрабатываемые документы в отдельной папке! Нет ничего проще — установим параметр «Directory» как "ActiveDocument.Name" перед командой".Display":

With Dialogs(wdDialogCopyFile)

Directory = ActiveDocument.Path

Display

papka =.Directory

End With

If Right(papka, 1) = Chr$(34) Then papka = Mid(papka, 2, Len(papka) — 2)

Это и есть необходимый код для отображения диалогового окна и получения пути к папке для сохранения обработанных документов. Наконец, сделаем так, чтобы нажатие кнопки «Отмена» в диалоговом окне приводило бы не к простому продолжению работы программы, а к выходу из нее. Для этого в справке по слову".Display" узнаем, что эта команда является функцией — то есть возвращает определенное значение, в зависимости от того, какая кнопка была нажата. Добавим в программу условие и команду выхода из программы:

With Dialogs(wdDialogCopyFile)

Directory = ActiveDocument.Path

If.Display = 0 Then Exit Sub

papka =.Directory

End With

If Right(papka, 1) = Chr$(34) Then papka = Mid(papka, 2, Len(papka) — 2)

Теперь при нажатии кнопки «Отмена» в диалоговом окне выбора папки произойдет выход из программы.

Окончательный вид нашего макроса:

Sub Макрос1()

' Программа для обработки документов

With Dialogs(wdDialogCopyFile)

Directory = ActiveDocument.Path

If.Display = 0 Then Exit Sub

papka =.Directory

End With

If Right(papka, 1) = Chr$(34) Then papka = Mid(papka, 2, Len(papka) — 2)

metka:

Selection.WholeStory

With Selection.Font

Name = "Times New Roman"

Size = 12

ColorIndex = wdBlack

End With

With Selection.ParagraphFormat

LeftIndent = CentimetersToPoints(0)

RightIndent = CentimetersToPoints(0)

SpaceBefore = 0

SpaceAfter = 0

LineSpacingRule = wdLineSpaceSingle

FirstLineIndent = CentimetersToPoints(1.27)

End With

Selection.Find.ClearFormatting

Selection.Find.ParagraphFormat.Alignment = wdAlignParagraphLeft

Selection.Find.Replacement.ClearFormatting

Selection.Find.Replacement.ParagraphFormat.Alignment = wdAlignParagraphJustify

With Selection.Find

Text = ""

Replacement.Text = ""

Forward = True

Wrap = wdFindContinue

Format = True

MatchCase = False

MatchWholeWord = False

MatchWildcards = False

MatchSoundsLike = False

MatchAllWordForms = False

End With

Selection.Find.Execute Replace:=wdReplaceAll

ActiveDocument.Save

ActiveDocument.SaveAs FileName:=papka + Left(ActiveDocument.Name, Len(ActiveDocument.Name) — 4), FileFormat:=wdFormatRTF

ActiveWindow.Close

If Documents.Count > 0 Then GoTo metka

signal = MsgBox("Обработка закончена", vbInformation, "Обработка текстов")

End Sub

* * *

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

А эти приемы таковы:

1. Для самого первого начала работы, а также для выяснения, какая команда соответствует тому или иному преобразованию текста или другому действию пользователя Word, необходимо широко использовать основное отличие редактора VBA от редакторов других языков программирования — средство записи макросов. Наличие средства записи макросов позволяет быстро и легко создать свою первую программу и начать ее изучать, а также может оказать серьезную помощь, когда необходимо «перевести» на язык VBA какое-либо действие пользователя Word.

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

3. Справка VBA — основной источник знаний по этому языку! Она построена по контекстному принципу — при вызове справки клавишей F1 отображается справка по той команде, на которой стоит в это время курсор. Таким образом можно быстро и легко изучить назначение, синтаксис и особенности каждой команды — стоит только набрать ее и вызвать справку. К сожалению, многие разделы справки не переведены на русский язык, поэтому англо-русский словарь (или система машинного перевода) может стать вашим спутником на время освоения VBA. Путешествия по справке и чтение различных ее разделов, даже не относящихся к непосредственно выполняемой задаче, обогатит Ваши знания по программированию в Word и не только…

4. Примеры справки VBA — работа, сделанная за вас! Копируйте фрагменты кода из примеров себе в программу и модифицируйте их так, как вам надо.

5. Для тестирования и отладки небольшого фрагмента кода или даже одной команды вынесите ее временно в отдельный модуль — проще будет работать.

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

Visual Basic for Applications, пожалуй, на настоящее время единственный язык, который можно изучить абсолютно самостоятельно, без каких-либо дополнительных книг или текстов программ, достаточно лишь иметь "научный взгляд на мир", то есть способность наблюдать, экспериментировать и делать выводы. Даже эти главы имеют цель не столько научить вас программировать на VBA, сколько помочь вам начать учиться, чтобы вы не тратили множество времени на поиск и получение информации о не совсем очевидных вещах. Ведь, согласитесь, совсем неплохо облегчить вам начало работы и знакомство с возможностями редактора, немного проиллюстрировав процесс программирования.

Автогонки в Excel 2000

Если в программе Microsoft Excel 97 имеется встроенная игра-"леталка", то в следующей версии этой программы работы с электронными таблицами присутствуют даже настоящие автогонки! Так что не стоит удивляться большим размерам программ от Microsoft, — каждая из таких программ умеет многое, в том числе и играть.

Автогонки из Excel 2000

Как же добраться до этой автотрассы?

Запустите Excel 2000 и создайте новую книгу с помощью команды «Создать» из меню «Файл». Затем сохраните эту книгу как web-страницу с помощью соответствующей команды (т. е. "Сохранить как Web-страницу") того же меню, при этом в диалоговом окне сохранения установите в разделе «Сохранить» отметку в пункте "выделенное: Лист" и поставьте галочку в пункте "Добавить интерактивность". Откройте полученную страницу в браузере Microsoft Internet Explorer, во внедренном в нее листе Excel перейдите с помощью клавиши PageDown к строке 2000, а с помощью линейки горизонтальной прокрутки — к столбцу WC. Выделите строку 2000 (просто нажав мышью на ее номер в указателе номеров строк слева листа) и с помощью клавиши Tab переведите выделение на ячейку WC2000. После этого, нажав одновременно левые клавиши Ctrl, Alt и Shift, кликните левой кнопкой мыши на эмблеме Office в левом верхнем углу внедренного в web-страницу листа Excel. Вот вы и на трассе…

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

Поскольку игра базируется не только на Excel'е, но и на средствах сопряжения этой программы с web-страницей, в том случае, если игра у вас не запускается, проследите, чтобы на компьютере были установлены Microsoft Web Components (компонент Office 2000) и в том случае, если они отсутствуют, установите их из дистрибутива Office.

К сожалению, в Excel XP ни автогонки, ни «леталка» не присутствуют. Однако наверняка в скором времени можно будет услышать, как в этой программе запустить какую-нибудь Free Space или еще что почище…

Глава 4. Пусть программа с вами говорит…

Продолжим изучение программирования на Visual Basic for Applications (напомним — сокращенно VBA). Подробные описания теперь уже не нужны — достаточно лишь заострения внимания на некоторых "подводных камнях" или скрытых возможностях.

В этой главе речь пойдет о так называемых "пользовательских формах". Формально они являются "нестандартными диалоговыми окнами" макросов, наподобие диалоговых окон Word, но по сути с их помощью можно создавать настоящие программы, подобные компилируемым программам для Windows, которые будут отличаться от них лишь тем, что для их работы необходим Microsoft Word. К сожалению, формы нельзя создавать с помощью средства записи макросов, но все средства создания форм снабжены подробной справкой, и на ее основе можно довольно быстро научиться работать с формами.

Для создания формы необходимо в любом доступном проекте (шаблоне или документе) из контекстного меню правой кнопки мыши в Менеджере проектов выбрать Вставить-UserForm.

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

Основное отличие программного кода, обслуживающего формы, от кода в обычных модулях заключается в принципе программирования. В то время как программа на VBA вроде той, что была нами совместно написана в предыдущей главе, чаще всего выполняется «последовательно», — то есть все ее команды выполняются одна за другой, и их порядок выполнения изменяется лишь в зависимости от операторов условного и безусловного перехода «If» и «Goto», форма "реагирует на события" — то есть каждому элементу формы может быть поставлена в соответствие определенная отдельная программа, выполняющая нужные действия.

Большинство программ для Windows, да и сам текстовый редактор Microsoft Word построены именно по такому принципу, — они не "работают сами по себе", а ждут от пользователя команд и «реагируют» на них: выполняют те или иные действия. Так и форма: программист должен разработать ее интерфейс — создать форму, расположить на ней элементы, определить их свойства, а затем написать "программы обработки событий", поместив в каждой такой программе код, который должен быть выполнен, когда то или иное событие произойдет, то есть будет нажата какая-нибудь кнопка на форме или на клавиатуре, введен текст в поле ввода текста, выбран тот или иной флажок на форме и т. д.

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

Закон Джоуля-Ленца.

Для примера создадим форму, в которой будет производиться подсчет количества теплоты, выделяемой в проводнике при подаче на него разности потенциалов, — пригодится при расчете нагревательных элементов. Согласно соответствующим формулам, Q (количество теплоты в джоулях) = U^2 (квадрат величины напряжения в вольтах) * t (время в секундах) / R (сопротивление в омах), при этом R = p (удельное сопротивление материала проводника в омах на метр) * l (длина проводника в метрах) / s (площадь поперечного сечения проводника в квадратных сантиметрах). Таким образом, формула для расчета количества теплоты выглядит так (она также известна под именем закона Джоуля-Ленца): Q=(U^2*t*s)/(l*p). Ее мы и запрограммируем в форме.

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

Для помещения на форму элемента управления достаточно перетащить его с "Панели элементов" на форму. Вот что получилось (к примеру) — рис. 4.1.

Рис. 4.1. Форма нашей программы

Поля ввода параметров имеют имена "TextBox1"…"TextBox5" соответственно, поле отображения результата имеет имя «TextBox6», кнопки имеют имена «CommandButton1» и «CommandButton2» сверху вниз соответственно. В элементы "TextBox1"…"TextBox5" пользователь будет вводить текст. Желательно установить свойство Locked элемента «TextBox6» как «True» (рис. 4.2), чтобы не допустить случайного ввода пользователем в него текста — к сбою такой ввод не приведет, но возможность такого ввода может вызвать некоторое недоумение у пользователя.

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

Рис. 4.2. Установка свойства Locked элемента «TextBox6» как "True"

В нашей программе можно сделать, например, так: пользователь вводит все значения, нажимает кнопку «Подсчитать» (надо будет добавить на форму…), и ему в окне результата выдается подсчитанное значение. Но в этом случае, во-первых, пользователь вынужден выполнять лишнее действие — нажатие на кнопку, а, во-вторых, надо будет продумать систему защиты от неправильных действий пользователя: нельзя допускать ввод нулевых или нечисловых значений в поля «TextBox4» и «TextBox5». Для этого придется либо выдавать в таком случае сообщение о неправильном вводе, либо, что представляется более красивым, ставить в эти поля значения по умолчанию, как только пользователь сделает неправильный ввод и уберет курсор с поля ввода. Но… все же, как неудобно! Пользователю надо нажимать лишний раз кнопку, постоянно следить за тем, стоят ли в полях ввода именно нужные значения, а не значения по умолчанию (ведь можно при вводе и случайно задеть соседнюю клавишу), да и при программировании возни будет предостаточно — изволь предусмотреть все случаи, на каждый написать программу обработки именно этого случая… Не слишком ли много проблем? А может быть, надо получше подумать о проектировании программы?

Основной принцип такого проектирования — "сделай проще, но без ущерба функциям". Что нам надо? Чтобы был результат. Когда он возможен? Да когда определены все значения в полях ввода, и при этом два нижних (то есть «TextBox4» и "TextBox5") ненулевые. Так пусть результат в своем окне появляется тогда и только тогда, когда все эти условия выполнены. И пусть программа постоянно отслеживает ввод значений в поля ввода и, как только будут введены все пять значений, и последние два будут ненулевые, а остальные — числовые, отобразит результат. Но есть ли такая возможность у языка VBA? А проверим! Откроем окно программного кода формы (из контекстного меню правой кнопки мыши нашей формы в Менеджере проектов выберем "Программа") и из выпадающего списка в левом верхнем углу (рис. 4.3) выберем, например, «TextBox1».

Так… появился фрагмент кода:

Private Sub TextBox1_Change()

End Sub

Рис. 4.3. Выпадающий список в левом верхнем углу — навигатор по программам элементов формы

"Change" — это по-английски «изменение». Код, написанный в этой части программы (часть эта называется "обработчик события "Change"), должен выполняться всякий раз при происхождении этого события. Можно предположить, что это событие происходит тогда, когда в поле ввода ввели какой-либо символ или удалили его оттуда. В этом случае это — именно то событие, которое нам надо. Но то ли? Проверим. Напишем-ка здесь строчку:

Private Sub TextBox1_Change()

TextBox6.Text=TextBox1.Text

End Sub

Пусть для эксперимента при изменении текста в первом поле ввода произойдет изменение текста в поле отображения результата. Проверим, будет ли это работать, — нажмем F5 (запуск программы на выполнение) и введем текст в первое поле ввода.

Прекрасно — в поле отображения результата появляется тот же текст! Значит, событие «Change» — именно то, которое нам надо использовать в нашей программе, чтобы после каждого нового ввода данных пользователем проверять условия возможности отображения результата и отображать его в случае их выполнения.

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

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

Переведем на язык VBA условие возможности отображения результата. Во-первых, все значения полей ввода должны быть числовыми. В VBA есть специальная функция для проверки того, является ли та или иная строка записью числа — IsNumeric (можно, например, найти ее описание в разделе «Поиск» справки по VBA из Microsoft Office 97 по словам "строковое выражение числовое значение", а в справке VBA из более старших версий этого пакета — по английским эквивалентам данных слов). Ее и используем. Ну, а для проверки отличия от нуля значений в последних двух полях ввода используем функцию «Val». Итак, результат существует, если

IsNumeric(TextBox1.Text) = True And IsNumeric(TextBox2.Text) = True And IsNumeric(TextBox3.Text) = True And IsNumeric(TextBox4.Text) = True And IsNumeric(TextBox5.Text) = True And Not Val(TextBox4.Text) = 0 And Not Val(TextBox5.Text) = 0

В этом случае можно осуществить подсчет по формуле Джоуля-Ленца:

rez = ((Val(TextBox1.Text) ^ 2) * Val(TextBox2.Text) * Val(TextBox3.Text)) / (Val(TextBox4.Text) * Val(TextBox5.Text))

и отобразить его в поле вывода результата:

TextBox6.Text = Str$(rez)

Теперь можно написать процедуру вычисления результата и вызовы ее из всех обработчиков событий "Change":

Private Sub TextBox1_Change()

Scet

End Sub

Private Sub TextBox2_Change()

Scet

End Sub

Private Sub TextBox3_Change()

Scet

End Sub

Private Sub TextBox4_Change()

Scet

End Sub

Private Sub TextBox5_Change()

Scet

End Sub

Private Sub Scet()

If IsNumeric(TextBox1.Text) = True And IsNumeric(TextBox2.Text) = True And IsNumeric(TextBox3.Text) = True And IsNumeric(TextBox4.Text) = True And IsNumeric(TextBox5.Text) = True And Not Val(TextBox4.Text) = 0 And Not Val(TextBox5.Text) = 0 Then

rez = ((Val(TextBox1.Text) ^ 2) * Val(TextBox2.Text) * Val(TextBox3.Text)) / (Val(TextBox4.Text) * Val(TextBox5.Text))

TextBox6.Text = Str$(rez)

Else

TextBox6.Text = ""

End If

End Sub

В принципе программа уже почти закончена, но стоит еще разобраться с командными кнопками. Для кнопки «Отмена» обработчик события «Click» (то есть нажатия на кнопку) прост — выход из программы:

Private Sub CommandButton2_Click()

Unload Me

End Sub

Но у нас есть еще вторая кнопка — "Вставить результат в документ". А пусть она вставит в документ не просто значение результата, а осмысленную фразу, содержащую как результат, так и введенные параметры! Это можно сделать командой

Selection.Text = "При прохождении тока напряжением в " + TextBox1.Text + " вольт по проводнику длиной " + TextBox4.Text + " метров, сечением " + TextBox3.Text + " кв. мм и удельным сопротивлением " + TextBox5.Text + " ом на метр за " + TextBox2.Text + " секунд выделится" + TextBox6.Text + " джоулей теплоты.»

Она сформирует фразу из значений полей ввода и вставит ее в активный документ. Проверим… так, действительно вставляет, но фраза остается выделенной. А значит, что следующая фраза, выведенная с помощью нашей программы, сотрет предыдущую. Надо посмотреть, нет ли в VBA функции снятия выделения? Посмотрим по выпадающему меню после точки "Selection."… есть команда «Collapse» (то есть "Свернуть"). Из справки по ней узнаем ее синтаксис:

Selection.Collapse Direction:=wdCollapseEnd.

Эта команда убирает выделение и помещает курсор в его конец.

Можно также вставить текст в активный документ "Selection.TypeText Text:="Мой текст" (двоеточие после слова «Text» обязательно, так как это — оператор присваивания значения параметру команды). Тогда в команде специального снятия выделения со вставленного текста не будет необходимости, — после выполнения команды выделенного текста не окажется.

Но что произойдет, если пользователь вдруг вызовет программу тогда, когда открытых документов в Word'е нет? Тогда ведь возникнет ошибка программы. Но этого легко избежать — надо просто проверить перед вставкой, есть ли открытые документы и, если нет, создать новый:

If Documents.Count = 0 Then Documents.Add

Осталась еще одна маленькая деталь. Кнопка "Вставить результат в документ" не должна работать, если результат вычислить нельзя (то есть поле «TextBox6» пусто). Как это сделать?

Среди всего набора возможных свойств элемента «CommandButton» есть свойство «Enabled» — если его установить как «False» (то есть "ложно"), то кнопка будет отображаться серым цветом и не будет реагировать на события (станет неактивной). Это свойство можно задать и программно — командой "CommandButton1.Enabled = False".

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

Вот готовый код нашей программы:

Private Sub CommandButton1_Click()

If Documents.Count = 0 Then Documents.Add

Selection.Text = "При прохождении тока напряжением в " + TextBox1.Text + " вольт по проводнику длиной " + TextBox4.Text + " метров, сечением " + TextBox3.Text + " кв. мм и удельным сопротивлением " + TextBox5.Text + " ом на метр за " + TextBox2.Text + " секунд выделится" + TextBox6.Text + " джоулей теплоты.»

Selection.Collapse Direction:=wdCollapseEnd

End Sub

Private Sub CommandButton2_Click()

Unload Me

End Sub

Private Sub TextBox1_Change()

Scet

End Sub

Private Sub TextBox2_Change()

Scet

End Sub

Private Sub TextBox3_Change()

Scet

End Sub

Private Sub TextBox4_Change()

Scet

End Sub

Private Sub TextBox5_Change()

Scet

End Sub

Private Sub Scet()

If IsNumeric(TextBox1.Text) = True And IsNumeric(TextBox2.Text) = True And IsNumeric(TextBox3.Text) = True And IsNumeric(TextBox4.Text) = True And IsNumeric(TextBox5.Text) = True And Not Val(TextBox4.Text) = 0 And Not Val(TextBox5.Text) = 0 Then

rez = ((Val(TextBox1.Text) ^ 2) * Val(TextBox2.Text) * Val(TextBox3.Text)) / (Val(TextBox4.Text) * Val(TextBox5.Text))

TextBox6.Text = Str$(rez)

CommandButton1.Enabled = True

Else

TextBox6.Text = ""

CommandButton1.Enabled = False

End If

End Sub

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

Назначить форме кнопку или пункт меню для вызова из Word нельзя, — это возможно только для модулей. Поэтому переименуем для красоты форму в «Teplotok», например (свойство «Name» обьекта «UserForm» — можно задать в окне свойств, выделив форму) и напишем модуль, в котором будет всего одна команда — вызов созданной нами формы:

Sub TeploCount()

Teplotok.Show

End Sub

Зададим модулю красивое имя ("Teplo", например, через свойство «Name» обьекта «Модуль1», если модуль для программы вызова формы был вставлен с помощью пункта "Вставить"-"Модуль" контекстного меню правой кнопки мыши в Менеджере проектов) и назначим в Word кнопку для вызова макроса "Normal.Teplo.TeploCount".

Вот и все — наша программа готова! Если вы последовательно выполняли на своем компьютере все приведенные здесь шаги, то можете проверить ее работу. Теперь программу можно вызывать на выполнение соответствующей кнопкой. При желании можно скопировать форму и модуль в отдельный шаблон и создать в нем панель инструментов с кнопкой вызова макроса, — тогда программу можно будет установить и на другие компьютеры, скопировав шаблон с макросом в папку автозагружаемых файлов Word.

Глава 5.Советы и секреты программирования Что такое API?

Для того, чтобы облегчить труд своих коллег и обеспечить всем программам для Windows универсальный интерфейс, программисты Microsoft создали такую вещь, как API — "Application Programming Interface".

Это — набор функций и процедур, которые могут наиболее часто использоваться программами: отображение дерева каталогов, поиск файлов, отображение стандартного окна с кнопками закрытия, минимизации и развертывания на весь экран и многих других. В итоге разработчик, создающий программу для Windows, не должен продумывать и разрабатывать специальные подпрограммы для отображения окна программы, окна для выбора папки и остальных подобных элементарных операций, — ему достаточно просто вызвать из библиотек kernel32.dll или user32.dll, содержащих функции и процедуры API, нужную ему функцию, а она уже все сделает за него сама. Таких функций и процедур много — порядка 600.

В операционной системе MS-DOS такого понятия, как API, не было, — тот, кто брался писать программу для этой операционной системы, обязан был сам, от начала до конца, продумать и реализовать способы выдачи на экран изображения, получения данных от пользователя, путешествия по файловой системе, рисования графики, если таковая возможность была необходимой.[8] Это делало процесс разработки программ с удобным для пользователя интерфейсом весьма трудоемким процессом, зачастую затраты времени и сил на создание приемлемого графического интерфейса программы превосходили затраты на реализацию собственного алгоритма программы, ради которого она и создавалась. Недаром были очень распространены так называемые «консольные» приложения, то есть программы, работающие только из командной строки, без интерфейса, — ввод данных происходил в той же командной строке или производился из указанного в ней файла, а вывод результатов шел в простом текстовом режиме.

С появлением операционной системы Windows каторжный труд программистов по разработке внешнего вида программы и удобных способов ввода и вывода информации резко облегчился, — уже в Windows 3.0 использовались функции API. Теперь программист, если он, например, желал создать окно ввода текста или полосу прокрутки, должен был всего лишь написать вызов функции отображения такого окна с необходимыми ему параметрами, так же, как и любой другой функции языка, на котором он писал свою программу, а не вводить огромные обьемы кода ради создания программы, заново рисующей такое окно или полосу (сознавая при этом, что при разработке следующей программы, в которой тоже будут использоваться такие объекты, ему придется вновь разрабатывать такой код или пытаться частично использовать старый, приспосабливая его к нуждам этой новой программы). Поэтому появление API совершило революционный прорыв в технологии программирования, позволяя создавать нужные программы с привычным удобным интерфейсом гораздо быстрее, не заботясь о таких рутинных деталях, как программирование стандартных объектов интерфейса для ввода и вывода информации.

В языке Visual Basic for Applications (VBA) многие функции и процедуры API вызываются сами при выполнении программы интерпретатором, так что использовать их для отображения окон ввода и вывода текста, рисования на экране геометрических фигур и других простых действий совершенно нет необходимости, — их VBA вызывает по мере надобности, а программе на нем достаточно использовать соответствующие функции этого языка. Однако иногда возникает необходимость в некоторых действиях, для которых либо нет аналогов во встроенных функциях VBA, либо они работают нерационально или слишком медленно. Например, окно выбора папки с изображением дерева каталогов (рис. 5.1) или программа поиска файлов (аналог на функциях VBA — объект "Application.FileSearch" — работает слишком медленно при больших количествах файлов). Для таких случаев в VBA предусмотрена возможность вызова функций API.

Рис. 5.1. Это окно вызывается функцией API.

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

В подавляющем большинстве случаев при программировании для Office можно обойтись без использования API, но иногда только вызов API-функции может привести к достижению нужного результата. Скажем, вам надо обеспечить вызов разных макросов при простом нажатии мышью кнопки на какой-либо панели инструментов Word и в случае одновременного нажатия этой кнопки и клавиши Shift или Control. Вот фрагмент кода, делающего это:

Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal kState As Long) As Integer

Sub Program()

GetAsyncKeyState (vbKeyShift Or vbKeyControl)

If GetAsyncKeyState(vbKeyShift) Then

Call macro1: Exit Sub

ElseIf GetAsyncKeyState(vbKeyControl) Then

Call macro2: Exit Sub

End If

Call macro3

End Sub

Первая строчка — это как бы «резервирование» функции API для использования в программе на VBA. Видно, что вызывается функция GetAsyncKeyState из библиотеки (файла, содержащего программы, предназначенные только для использования другими программами) user32.dll, причем в эту функцию передается номер клавиши, а возвращает она целое число (а именно — 0, если клавиша с соответствующим номером не нажата, и -32767 или 1, если нажата). Любую функцию или процедуру, вызываемую из библиотек, не относящихся к VBA, необходимо так резервировать с помощью команды Declare.

Фраза vbKeyShift в команде — это заменитель кода клавиши Shift (его значение — 16), а vbKeyControl, как нетрудно понять — заменитель кода клавиши Control. Структура инструкций "If…Then", думается, ясна,[9] а если нет — посмотрите в справке VBA. Команда Call перед именем макроса, как вы помните, означает его запуск.

В Интернете есть русские сайты, посвященные API.[10] Посетите их, чтобы узнать больше об этом наборе функций.

Настройка вызова программы. Последние штрихи

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

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

Далее надо решить, в каком формате программу стоит оформить — как шаблон Word, как автозагружаемый шаблон Word или как простой документ? Если программа предназначена для одномоментных нечасто используемых расчетов и не работает с текстом документа, то ее проще всего поместить в документ Word. При необходимости его можно будет открыть и выполнить программу. Если программа как-то оформляет текст особого документа, который надо создавать отдельно от всех (к примеру, программа для красивого форматирования поздравительных открыток), то ее лучше оформить как шаблон и создавать на его основе документы, а потом уже эти документы заполнять содержанием с помощью программы. Ну, а если программа выполняет какие-нибудь серьезные операции с текстом, постоянно требуется или работает с многими документами сразу, то тогда ей прямая дорога в папку автозагружаемых файлов Word.

Потом необходимо создать документ с программой. Для этого создается пустой документ необходимого формата — шаблон или простой файл Word, а затем с помощью диалогового окна Word «Организатор» ("Сервис — Макрос — Макросы — Организатор" или "Сервис — Шаблоны и надстройки-Организатор") в него копируются все готовые компоненты программы из шаблона или документа, где велась разработка. Документ сохраняется под каким-нибудь красивым именем.

И, наконец, делается способ вызова программы. Можно с помощью диалогового окна "Сервис — Настройка — Команды — Макросы" назначить макросу пункт меню или кнопку на стандартной панели путем простого перетаскивания. Можно там же назначить ему комбинацию клавиш для вызова. А можно, что считается лучшим вариантом, создать новую панель инструментов и уже на ней поместить кнопки для вызова макросов. Надо только сохранить все изменения именно в документе с макросами, а не в своем Normal.dot или где-нибудь еще.

В окне "Сервис — Настройка — Команды — Макросы" название каждого макроса отображается так: сначала пишется имя проекта (его можно посмотреть и изменить в Окне свойств редактора VBA, выделив мышью название нужного проекта), затем — имя его модуля (тоже можно изменить в окне свойств, выделив мышью название модуля), а затем — собственно имя макроса (то, что стоит после команды начала программы Sub).

Назначить кнопку или сочетание клавиш для вызова формы невозможно. Необходимо вставить команду вызова формы ("ИмяФормы. Show") в текст программы в модуле, и уже затем назначить кнопку или сочетание клавиш для вызова именно этой программы.

Для вызова программы очень удобно использовать кнопки с иконками. Для этого нужно всего лишь перетащить название нужного макроса из окна «Настройка» на какую-нибудь (лучше специально созданную) панель инструментов, а затем выбрать значок для кнопки и задать стиль отображения — лучше всего без текста, "Основной стиль".

Можно также оставить на кнопке текст с названием макроса, однако тогда этот текст стоит соответственно отредактировать. Стоит помнить, что при подведении курсора мыши к кнопке, вызывающей макрос, отображается всплывающая подсказка с названием макроса (берется название макроса после команды начала программы Sub), поэтому макросам неплохо давать осмысленные имена. Однако если макрос назван по-русски, то в нелокализованных версиях Word он не будет вызываться кнопкой, созданной в русской версии.

Всплывающие подсказки кнопок можно задать самостоятельно с помощью команды "CommandBars("Имя панели"). Controls("Номер иконки на панели"). TooltipText = "Текст подсказки"". К сожалению, через диалоговое окно настройки панелей и кнопок сделать это не удастся, поэтому для ввода этой команды придется использовать отдельный модуль или Окно отладки.

Вам может не понравиться весьма ограниченный выбор значков для кнопок, предлагаемый Word'ом. Этот набор, вызываемый из меню "Выбрать значок для кнопки" в режиме настройки панелей, действительно, маловат. Но никто не мешает с помощью других команд того же меню скопировать значок с любой другой кнопки на любой другой панели или создать его самому во встроенном редакторе изображений на кнопках. Кроме того, красивые значки можно извлечь из «недр» Office, — а он содержит в себе около двух тысяч разнообразных значков! Для этого достаточно ввести в Окне отладки команду

CommandBars("имя существующей панели инструментов"). Controls.Add(Type:=msoControlButton, ID:=797). FaceId = x

где х — любое число от 1 до 3000. Тогда на указанной в команде панели будет создана кнопка со значком, который можно скопировать на свою кнопку. Не для всех кодов существуют значки, поэтому иногда созданная таким образом кнопка будет пустой, — попробуйте еще раз с другим х.[11]

Если в качестве способа вызова макроса выбрана панель инструментов с кнопками, то после окончания работы над ней стоит повторить создание нового документа и вновь скопировать все компоненты программы в новый документ вместе с панелью. Такое преобразование позволит существенно сократить размер файла с программой, так как вследствие ошибки в Office при редактировании макросов файл с программой сильно увеличивается в размерах — до полутора-двух раз. Впрочем, в OfficeXP данная рекомендация уже неактуальна.

Не стоит забывать и об информативном руководстве для пользователя, особенно если программа будет распространяться через Интернет. Лучше всего такое руководство оформить в отдельном текстовом файле или, если оно имеет большой объем, в виде набора связанных html-документов.

Полезные советы

· Настройки программы можно сохранять в системном реестре Windows. Для этого служит команда "SaveSetting", с помощью которой можно поместить в системный реестр строку или число. Она имеет формат "SaveSetting "Имя приложения","Имя раздела", «Ключ», "Значение"". Имя приложения, имя раздела и ключ — указатели места, в котором сохраняется Значение. Получить значения из реестра можно командой "GetSetting" с синтаксисом "GetSetting "Имя приложения","Имя раздела", «Ключ», "То значение, которое следует вернуть, если такого ключа, как указанный в предыдущем параметре, в реестре нет"", а удалить — командой "DeleteSetting "Имя приложения","Имя раздела", "Ключ"". Например:

SaveSetting «Макросы», «Макрос1», "Имя папки", "C: \MyPapka"

papka = GetSetting «Макросы», «Макрос1», "Имя папки", "C: \Docs"

· Записать список всех установленных в системе шрифтов в массив можно таким способом:

ReDim shrifti(FontNames.Count) As String

For r = 1 To FontNames.Count

shrifti(r) = FontNames(r)

Next r

WordBasic.SortArray shrifti()

(В массив "shrifti()" размером в количество шрифтов в системе помещается список имен всех установленных в системе шрифтов. Команда "WordBasic.SortArray" сортирует его по алфавиту.)

· Условие "If Selection.Type = wdSelectionIP Then …" выполнится, только если в документе не выделен фрагмент текста.

· Если вы решили хранить какую-нибудь информацию, нужную при работе программы, в отдельном файле, не стоит экспериментировать с командами чтения и открытия файла типа «open», «write» и др. Просто открывайте файл в Word как текстовый с помощью команды "Documents.Open …" и пишите в него обычными средствами записи текста: "Selection.Text = "Мой текст"".

· Посмотрите повнимательнее свойства, объекты и методы таких объектов, как «Application» и «System» (для этого достаточно набрать название объекта и поставить после него точку, — список возможных продолжений отобразится сам). Среди них можно найти немало весьма интересных и полезных, вроде средства задания и получения значений ширины и высоты окна Word, информации о языке данной версии Office, метод чтения данных из произвольного места реестра и многое другое.

· С помощью фрагмента кода

Set MyData = New DataObject

MyData.SetText "Мой текст"

MyData.PutInClipboard

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

· С помощью команды "Options.DefaultFilePath("константа названия папки")" можно получить пути и имена папок, перечисленных в диалоговом окне Word «Сервис» — «Параметры» — «Расположение». Все константы перечислены в справке VBA по слову «DefaultFilePath», а об их значении можно легко догадаться, переведя название константы с английского.

· Если у одного из элементов формы установить свойство Cancel в True, то нажатие кнопки Esc будет эквивалентно клику мыши на этом элементе.

· Если вы пишете инсталлятор для ваших программ, который помещает шаблоны с макросами в папку автозагружаемых файлов Word,[12] то совсем необязательно требовать перезагрузки редактора, чтобы макросы из помещенного в эту папку шаблона стали доступны. VBA позволяет активизировать такие шаблоны без перезагрузки Microsoft Word — для этого существует специальная команда

AddIns.Add("полное имя шаблона, включая путь к нему и расширение"). Installed = True

Эта команда эквивалентна ручному подключению шаблона с макросами через меню Word "Сервис — Шаблоны и надстройки". Однако если она будет выполнена сразу же после программного копирования шаблона в папку автозагружаемых файлов, то может возникнуть ошибка вследствие того, что при таком копировании Word должен зарегистрировать этот шаблон как доступный для подключения (после регистрации он появится в диалоговом окне "Сервис-Шаблоны и надстройки", но не будет отмечен как загруженный). На это уходит пара секунд, и если в этот момент вызвать команду подключения шаблона, то Word может ответить программе, что такого шаблона в папке автозагрузки нет, что вызовет ошибку.

Предотвратить подобную ситуацию можно, например, с помощью следующей конструкции, — разместите ее после команды копирования шаблона "FileCopy":

a="Имя шаблона в папке автозагрузки с полным указанием пути"

On Error Resume Next

Do

If AddIns(a). Installed Then Exit Do

AddIns(a). Installed = True

Loop[13]

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

· Для удаления шаблона без выгрузки Word можно использовать такой же код:

a="Имя шаблона в папке автозагрузки с указанием пути"

On Error Resume Next

Do

If Not AddIns(a). Installed Then Exit Do

AddIns(a). Installed = False

Loop

AddIns (a). Delete

Kill (a)

· Команда "Kill" выполняет удаление файла.

Команда "On Error Resume Next", встречающаяся в обоих вышеприведенных фрагментах кода — это обработчик ошибок. В случае возникновения ошибки в коде после него (скажем, связанной с обращением к несуществующему объекту) он продолжит выполнение программы с команды, следующей за вызвавшей ошибку. Обработчик ошибок может также иметь вид "On Error GoTo метка", и тогда при ошибке в коде после него произойдет переход к указанной в обработчике метке и выполнение программы продолжится именно с нее.

· Если вы, работая в Word 97, часто сохраняете документы в формате HTML, и вам мешает постоянно появляющийся диалог о выборе кодировки файла (рис. 5.2), то отключите его, установив в системном реестре строковый параметр "HKEY_LOCAL_ MACHINE\Software\Microsoft\Shared Tools\ Text Converters\Export\HTML\Options\Show EncodingDialog" как «No». Установить этот параметр реестра можно и программно с помощью команды "System.PrivateProfileString("", "HKEY_LOCAL_MACHINE\Software\Microsoft\Shared Tools\Text Converters\ Export\HTML\Options", "ShowEncodingDialog") = "No""

Рис. 5.2. Как убрать этот диалог? Читайте справа.

· Если Вы закрыли исходный код Вашей программы на VBA от просмотра паролем, а потом благополучно его забыли — не огорчайтесь: в Интернете, по адресу www.passwords.ru есть программа AVPR, позволяющая восстановить забытый Вами пароль. Ее английская версия требует оплаты и регистрации, а русская — бесплатная. К сожалению, бесплатная версия работает только с файлами, созданными в Word и Excel из Microsoft Office 97.

Чтобы ускорить работу программы, работающей с текстом, поставьте в ее начале команду "Application.ScreenUpdating = False", а в ее конец — команду "Application.ScreenUpdating = True", если

· только в процессе работы программы не требуется визуальный контроль происходящих изменений. Эта команда позволяет системе не тратить время и силы на постоянное обновление экрана и отображение изменений. Для того, чтобы все же обновить экран после отключения обновления экрана, используйте команду "Application.ScreenRefresh".

· Для получения от пользователя определенных данных, кроме создания форм, можно использовать встроенные диалоги VBA — диалоговое окно "Открытие файла", "Свойства документа" и др. Они вызываются командой Dialogs("Название диалога"). Show (показывает диалог и выполняет соответствующие ему действия), Dialogs("Название диалога"). Display (только показывает диалог и позволяет записать в переменные введенные изменения, но не выполняет никаких действий и ничего не изменяет: очень полезно для использования встроенных диалоговых окон в своих целях), Dialogs("Название диалога"). Execute (ничего не отображает на экране, но применяет все те изменения, которые были сделаны ранее с помощью команды With Dialogs("Название диалога") … End With). Для вывода списка возможных диалогов наберите "Dialogs(", и Вам будет выдан их список. К сожалению, описания конкретных диалогов нет в справке — придется просто попробовать отобразить каждый, хотя список возможных параметров каждого диалога в справке есть.

В Microsoft Excel набора встроенных диалогов нет, однако отобразить на экране окна открытия и сохранения файлов все же можно. Для этого служат команды "Application.GetOpenFilename" и "Application.GetSaveAsFilename". В результате выполнения команды "file = Application.GetOpenFilename" будет отображено окно открытия файла, а после выбора имя файла поместится в переменную (здесь — "file"). Команда же "rez = Application.GetSaveAsFilename" отобразит окно сохранения файла, в переменную же (здесь — rez) будет помещено True — если сохранение успешно, и False — если нет. Обе команды докускают указание параметров (например, меняющих заголовки окна и других).

Иногда возникает необходимость вызвать из макроса какое-либо диалоговое окно, но так, чтобы такой вызов ничем не отличался от «ручного», производимого через пункты меню Word. А возможно это не всегда: так, команда "Dialogs(wdDialogEditFind). Show" действительно вызывает окно поиска, но при этом в случае ввода в него фрагмента, которого в тексте нет, не отображается сообщение о безрезультатности поиска.

Тем не менее вызвать из макроса данное окно так, чтобы оно работало точь-в-точь так же, как и «обычное», можно — для этого следует использовать имеющуюся в VBA функцию SendKeys, которая передает активному окну нажатия клавиш — как если бы они были нажаты на клавиатуре. Подробнее об этой функции вы можете прочитать в Справке по VBA, а использовать ее для вызова диалогового окна можно, к примеру, так:

Sub prog()

SendKeys "^f"

End Sub

предполагая, что комбинация клавиш Ctrl+f вызывает окно «Найти», как, впрочем, устанавливается по умолчанию. Список кодов функциональных клавиш — в Справке.

Если Вы используете функцию "SendKeys", то вызванное ею окно будет вести себя абсолютно так же, как при ручном вызове. Однако помните, что если пользователь переопределит заложенную Вами в макрос комбинацию клавиш, то Ваша программа начнет работать некорректно.

· Помимо привычных кнопок и выпадающих меню в Word существует еще несколько типов элементов вызова команд и программ — поля ввода и выпадающие меню выбора. К примеру, элемент "Выпадающее меню с полем ввода" используется для указания масштаба просмотра документа на панели «Стандартная» или для ввода вопроса к справочной системе в OfficeXP.

Создать такое поле можно только программно — через окно настройки это сделать нельзя (как, впрочем, и удалить их впоследствии). Для этого следует в окне отладки или в отдельном модуле выполнить команду

CommandBars(x). Controls.Add Type:=y

где «х» — номер панели (можно узнать, просто перебрав их все с помощью команды "MsgBox CommandBars(номер). Name" и выяснив, какой номер имеет панель инструментов с нужным названием), а «y» — одна из констант: "msoControlEdit", "msoControlDropdown", "msoControlComboBox", создающие соответственно поле ввода текста, выпадающее меню и выпадающее меню с возможностью ввода текста.

Управлять созданными полями, добавляя, к примеру, в них текст, можно стандартными командами работы с панелями инструментов. Так, чтобы поместить какой-либо текст в поле ввода, следует использовать команду

CommandBars(x). Controls(y). Text = "текст в поле ввода"

где «х» — номер панели, «y» — номер по счету слева направо данного поля среди кнопок этой панели. Таким образом можно использовать эти элементы для отображения нужной пользователю информации. Точно так же — командой "a=CommandBars(x). Controls(y). Text" можно считать информацию из данного поля и использовать ее в работе программы. Следует лишь внимательно следить за соответствием номеров кнопок их реальному расположению, — при изменении порядка кнопок программа может работать неверно. Назначить макрос кнопке, меню или полю ввода можно командой "CommandBars(x). Controls(y). OnAction = "Имя модуля. Имя программы"".

· Для работы из одного приложения Office с другим можно использовать технологию ActiveX. Она основана на имеющейся в Office возможности представлять одну программу в другой как некий объект, с которым можно работать теми же командами, что используются при непосредственной работе с этой программой. Так, чтобы можно было из Word'овского макроса работать с Excel'ем, следует создать объект "Excel.Sheet":

·

Dim es As Object

Set es = CreateObject("Excel.Sheet")

Здесь «es» — простое наименование переменной, может быть любым.

(Если надо сразу открыть какой-либо файл Excel'а, то можно использовать команду "GetObject":

Set es= GetObject("Путь к файлу Excel'а"))

При желании можно сделать созданный объект Excel видимым:

es.Application.Visible = True

Теперь можно этому объекту es (т. е. просто запущенному Excel'у) посылать команды такие же, как и в макросах Excel'а (предваряя текстом "es.Application." те из команд, которые не требуют прямого указания объекта, — так как надо дать понять программе, что работа идет именно с Excel'ем). Так, чтобы открыть файл Excel'а, можно также дать команду

es.Application.Workbooks.Open FileName:="Путь к документу Excel'а"

а чтобы, например, поместить в первую ячейку открытой книги текст, используйте команду

es.Cells(1, 1). Value = "Это столбец A, строка 1"

Закрыть Excel можно командой

es.Application.Quit

Set es = Nothing

Можно даже вызвать на исполнение макрос, содержащийся в книге Excel. Для этого следует использовать команду

es.Application.Run "имя макроса"

Так что есть простор для творчества.

ProgressBar в ваших программах

Во многих программах для Windows используется такой элемент, как ProgressBar — индикатор, показывающий, на сколько продвинулся тот или иной процесс. В частности, он есть практически во всех программах-инсталляторах. К сожалению, в VBA этот элемент отсутствует, но его можно сделать самостоятельно!

Выглядеть он будет, например, так, как на рис. 5.3.

А делается он следующим образом (предполагается, что у нас есть часть программы, в которой выполняется длинный и долгий цикл: то есть известное нам количество множество однотипных операций, и которую надо снабдить ProgressBar'ом):

1. Создаем небольшую форму и помещаем на нее: надпись с пояснительным текстом (например, "Label1") и две другие надписи, (скажем, «Label2» и "Label3"), низкие и широкие, которые расположим одну над другой (рис. 5.4).

К примеру, их координаты и размеры:

Label2: Top — 45, Left — 15, Height — 15, Width — 250

Label3: Top — 45, Left — 15, Height — 15, Width — 0

Зададим в качестве фонового цвета для «Label2» — серый, а для «Label3» — зеленый (свойство «BackColor», вкладка "Палитра").

Рис. 5.3. ProgressBar в программе на VBA

Рис. 5.4. А вот как он сделан

2. Для того, чтобы форма появилась на экране, но могла быть модифицируема программно все время своего отображения, в ее код нужно поместить следующий текст:

Private Sub UserForm_Activate()

… остальной текст программы, которая должна выполняться во время отображения ProgressBar'а …

Unload Me

End Sub

Все, что находится в теле этого обработчика, будет выполняться, в то время как форма будет находиться на экране. По окончании выполнения программы форма будет выгружена (хотя выгружать ее не обязательно, если после окончания программы в обработчике предполагается продолжение работы с формой). Однако никакие другие события формой обрабатываться в это время не будут.

3. Идея такова. Ширину третьей надписи «Label3» можно изменять программно. Поэтому для отображения ProgressBar'а надо вставить в код строки, изменяющие ширину этой надписи. К примеру, цикл в программе выполняется n раз. Тогда ширина надписи «Label3» будет определяться командой в теле цикла по формуле "Label3.Width = (scet / n) * 250", где "scet" — это счетчик цикла, а 250 — ширина надписи Label2.

После каждой такой команды надо вставлять инструкцию "Me.Repaint", чтобы перерисовать форму с учетом новых параметров третьей надписи, — автоматической перерисовки до полного отображения формы (которое произойдет, когда кончится обработка события "UserForm_Activate()"и форма не будет выгружена) не происходит. Если форма с ProgressBar'ом должна долго находится на экране без изменений, то рекомендуется почаще использовать команду "Me.Repaint", так как без перерисовки внешний вид формы может быть легко испорчен окнами других приложений, когда пользователь решит воспользоваться ими во время работы макроса.

Итак, код для формы с ProgressBar'ом должен иметь такой вид ("n" — количество необходимых выполнений цикла):

Private Sub UserForm_Activate()

Me.Repaint

For t=1 to n

… … … … необходимые команды программы в цикле … … … …

Label3.Width = ((t / n) * 250)

Me.Repaint

Next t

Unload Me

End Sub

Разумеется, в нем возможны изменения и улучшения. Можно несколько раз использовать ProgressBar в одной форме, каждый раз обнуляя ширину третьей надписи. Можно поместить на одну форму несколько ProgressBar'ов, где один, например, показывает выполнение всего задания, а другой — его текущей части.

Хранение скрытой информации в документе

Иногда автору программы необходимо записать в документ информацию "для внутреннего пользования": например, чтобы при следующей обработке документа программой использовать определенные предыдущие данные.

Можно, конечно, использовать Свойства документа (объект "Dialogs(wdDialogFileSummaryInfo). Comments"), но лучше сделать такую запись с помощью добавления специальной переменной прямо в документ Word:

ActiveDocument.Variables.Add Name:="x1", Value:="Текст"

ActiveDocument.Variables.Add Name:="x2", Value:=12

Прочитать эти переменные можно будет с помощью похожей функции:

y1 = ActiveDocument.Variables("x1"). Value

y2 = ActiveDocument.Variables("x2"). Value

Кроме как с помощью этой функции, значения заданных в документе переменных узнать нельзя никак! Таким способом можно помещать в документ служебную информацию для макросов: сохраненные параметры, скрытые комментарии и и.д. Но не думайте, что для надежного сокрытия секретной информации достаточно поместить ее в переменные документа — с помощью функции

For Each per In ActiveDocument.Variables

Debug.Print per.Name + " " + per.Value

Next per

абсолютно все переменные будут благополучно помещены в окно отладки, где их легко и просто можно просмотреть.

Немного о панелях, шаблонах и макросах

Панель инструментов Microsoft Word 97/2000/XP — то есть ее название, набор кнопок, расположенных на ней, связь этих кнопок с командами и макросами — может храниться либо в шаблоне Microsoft Word 97/2000/XP (*.dot), либо в документе Word (*.doc). При этом имеет место быть следующее:

1. Если панель инструментов сохранена в Normal.dot, то она доступна всегда, когда открыт Word.

2. Если панель инструментов сохранена в шаблоне, который загружен как глобальный — то есть помещен в папку автозагружаемых файлов Word, то она также доступна всегда, когда открыт Word, но ее можно убрать, выгрузив шаблон с помощью диалогового окна "Сервис-Шаблоны и надстройки".

3. Если панель инструментов сохранена в шаблоне, на котором основаны документы, например, в одном из шаблонов, находящихся в папке шаблонов пользователя Word[14] и ее подпапках, то она доступна тогда, когда этот шаблон присутствует на компьютере и активен документ, созданный на его основе.

4. Если панель инструментов сохранена в каком-либо документе, то она доступна тогда, когда активен этот документ.

Панели инструментов можно копировать из одного шаблона или документа в другой с помощью диалогового окна «Организатор» (Сервис — Шаблоны и надстройки — Организатор).

Информация о том, какие панели при предыдущем выходе из Word'а были видимы, а какие нет, как они располагались и где находились на экране (чтобы восстановить эти их параметры при новой загрузке Word), сохраняется в системном реестре. Информация же о том, как должны располагаться панели при самой первой загрузке шаблона, находится в самом шаблоне и используется при отсутствии нужной информации в реестре.

Каждой кнопке панели инструментов, вызывающей макрос, ставится в соответствие имя вызываемого ею макроса, которое состоит из имени модуля, содержащего этот макрос, и имени макроса в модуле.

Узнать имена модуля и макроса в модуле можно в редакторе VBA. При изменении любого компонента имени кнопка становится неработоспособной.

Несмотря на то, что в параметрах кнопки при назначении ей макроса указывается, где этот макрос находится — в Normal.dot, в каком-либо шаблоне или документе, этот параметр Word'ом не учитывается. Поэтому если в глобально загруженном шаблоне (то есть помещенном в папку автозагружаемых файлов Word) есть макрос с таким же названием и именем, что и в Normal.dot, то при нажатии кнопки, вызывающей этот макрос (расположенной на любой панели), выполняется макрос из Normal.dot, а не из глобального шаблона.

Если при запуске Word в папке Шаблоны не оказывается шаблона Normal.dot, то он создается Word'ом на основании стандартов по умолчанию. В него помещается изначальный набор панелей инструментов.

Поиск модуля и имени макроса при нажатии кнопки (при этом не имеет значения, где панель сохранена) идет в следующем порядке: "Активный документ" — "Шаблон, на котором основан документ" — "Normal.dot" — "Шаблон, загруженный глобально через папку автозагружаемых файлов Word или окно "Шаблоны и надстройки".

Кнопки с панелей можно свободно перемещать с панели на панель, при этом их связь с макросами сохраняется вне зависимости от того, где макрос находится. Если макрос недоступен (скажем, удален глобальный шаблон с ним), то кнопка просто не работает.

Немного о паролировании и шифровании

Защита доступа с помощью пароля — самый распространенный способ хранения всяческих секретов на компьютере. Однако о принципах такой защиты большинству пользователей известно плохо. В чем же ее основы? И как можно преодолеть такую защиту? Ниже рассказывается об этом.

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

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

Иными словами, это некое подобие функции Или,[15] которая в отличие от настоящей Или возвращает 0, если на входы было подано сразу две единицы.

А теперь — приглядитесь повнимательнее и обратите внимание на интереснейшую вещь: если на вход функции Xor подать значение 1 входа и результат, то получится значение 2-го входа! И то же самое — со значением 2 входа и результатом: получается значение 1-го входа. Следовательно, зная итог функции Xor и значение на любом из входов, можно получить значение на другом входе, то есть функция Xor обратима.

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

11010101010110101001101010111110101010111110101010001…

Представляем так же пароль:

10010101010011

и сопоставляем последовательности битов шифруемого текста и пароля, повторив пароль несколько раз так, чтобы у каждого бита шифруемого текста был соответствующий ему бит пароля:

11010101010110101001101010111110101010111110101010001…

10010101010011100101010100111001010101001110010101010…

И теперь — шифруем: применяем к этим двум последовательностям функцию Xor:

01000000000101001100111110000111111111110000111111011…

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

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

Функция Xor, разумеется, присутствует и в VBA. Вот пример кода, реализующего возможности шифрования с ее помощью.

Sub encrypt()

Dim a, b, c, d As String

Исходный текст для шифрования — запрашивается от пользователя, к примеру:

a = "secret text from kgb agent from newyork rezidentura…"

Пароль: может запрашиваться от пользователя:

b = «password»

Итог шифрования:

c = ""

Узнаем длины каждой из строк — пароля и исходного текста:

lentext = Len(a)

lenpass = Len(b)

Собственно шифрование:

For cn = 1 To lentext

В этой строке попробуйте разобраться самостоятельно. Здесь выполняется функция Xor с каждым символом исходной строки и соответствующим символом пароля, как бы «повторенным» на всю длину исходного текста. Mid берет из середины строки символ, Asc — превращает его в ASCII-код, Str — превращает число в строку, Trim — удаляет пробелы:

d = Trim(Str(Asc(Mid(a, cn, 1)) Xor Asc(Mid(b, ((cn — 1) Mod lenpass) + 1, 1))))

А теперь сделаем так, чтобы каждый символ занимал ровно три позиции, вне зависимости от величины его ASCII-кода. А иначе как потом при расшифровке разбивать строку на символы?

Select Case Val(d)

Case 0 To 9

d = «00» + d

Case 10 To 99

d = «0» + d

End Select

c = c + d

Ну вот и все, и так — с каждым символом из исходной строки:

Next cn

Теперь в переменной с — шифрованная строка, каждой исходной букве соответствует 3 символа. Ее можно записать, например, в документ:

Selection.TypeText Text:=c

End Sub

А теперь — программа расшифровки данных. Точно так же разберем ее по строкам.

Sub decrypt()

Dim a, b, c, d As String

Строка для расшифровки:

c = "003004016001018027082016021025007083017029029009"

Пароль:

b = "password"

Итог расшифровывания:

a = ""

Узнаем длины каждой из строк:

lentext = Len(c)

lenpass = Len(b)

Собственно расшифровывание (попробуйте разобраться самостоятельно в структуре команды — это не так сложно):

For cn = 1 To lentext Step 3

a = a + Chr(Val(Mid(c, cn, 3)) Xor Asc(Mid(b, (Int(cn / 3) Mod lenpass) + 1, 1)))

Next cn

В итоге в переменной a — расшифрованная строка, ее можно записать в любое место — в документ, к примеру:

Selection.TypeText Text:=a

End Sub

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

Открытый и закрытый коды

Наверняка все слышали такие фразы: "Шифрование с открытым ключом", "Шифрование с закрытым ключом", "Публичный ключ". О том, что они означают, можно писать большие книги, однако стоит вкратце описать ситуацию для полноты изложения.

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

Сгенерировав специальной программой пару таких последовательностей (называемых ключами), можно первую из них сообщить тому, от кого ждешь секретных посланий ("сообщить ему публичный ключ"), а вторую оставить себе и хранить как зеницу ока ("оставить себе секретный ключ"). То, что будет зашифровано отправителем этим публичным ключом, даже сам отправитель расшифровать не сможет. Это сможет сделать только обладатель секретного ключа.

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

Именно на таком принципе работает механизм шифрования PGP.

Отличия новых версий Office

Отличия VBA в новых версиях Office в основном заключаются в добавлении новых функций, процедур и объектов. Однако есть некоторые тонкости.

В Office2000 изменилась система защиты от вирусов в макросах. Так, в Word2000 для того, чтобы иметь возможность запускать макросы, необходимо, чтобы в диалоговом окне "Сервис — Макросы — Безопасность" был установлен «Средний» или «Низкий» уровень защиты от макросов (лучше «Средний» — тогда при открытии документов с макросами пользователю будет выдан запрос о необходимости разрешения исполнения макросов). Также в Word2000 для того, чтобы пользователь имел возможность запускать макросы из шаблонов, установленных в папку автозагружаемых файлов Word, необходимо на вкладке "Надежные источники" диалогового окна "Сервис — Макросы — Безопасность" установить отметку в пункте "Доверять всем установленным надстройкам и шаблонам". Обо всем этом следует упомянуть в документации к разрабатываемой вами программе.

То же самое верно и для Office XP, однако отличия есть и здесь. Во-первых, по умолчанию компоненты Office XP, отвечающие за запуск макросов, на жесткий диск не ставятся — таким образом, похоже, Microsoft пытается защитить наиболее неразумных пользователей от макровирусов. По большому счету, подобные ее действия обычно приносят больше вреда, чем пользы, для авторов же программ на VBA из этого следует, что в справочных файлах к своим программам им следует упоминать о необходимости доустановки компонентов Office перед началом использования макросов. Во-вторых, для того, чтобы иметь возможность программно копировать модули и формы макросы между документами и шаблонами, необходимо, чтобы в диалоговом окне "Сервис — Макросы — Безопасность", на вкладке "Надежные источники" имелась отметка в пункте “Доверять доступ к Visual Basic Project”. Об этом тоже следует упомянуть в справке к программе.

В OfficeXP скопировать файл из одной папки в другую или удалить его посредством программного кода можно только при отключенной Службе индексирования (cсылка “Параметры поиска” на панели “Обычный поиск", рис. 5.5). К сожалению, по умолчанию эта Служба включена, а программно ее отключить невозможно. Поэтому, несмотря на декларируемую полную "совместимость сверху вниз" версий Office, автору программ на VBA настоятельно рекомендуется тестировать свои программы во всех версиях Office и отлаживать их при необходимости.

Рис. 5.5. Если в OfficeXP вы хотите копировать и удалять файлы с помощью VBA — выключите здесь “Службу индексирования”.

Глава 6. Волшебный мир макросов

О том, как создавать программы на встроенном в Microsoft Office языке программирования Visual Basic for Applications (VBA), было подробно рассказано в предыдущих главах. Но теория будет еще полезнее, если подкрепить ее практикой — примерами реально работающих программ, написанных на этом языке. А таких — немало. К сожалению, многие из них не такие уж и известные, но весьма интересные и полезные для очень многих пользователей.

В этой главе вы найдете небольшой обзор существующих на настоящее время программ на языке VBA, работающих в среде Microsoft Office. Обратите внимание на них — если вы часто и много используете текстовый редактор Microsoft Word или другие компоненты Office, то они могут серьезно помочь вам в работе. Отличительная особенность большинства программ, описанных здесь — то, что они распространяются с открытым кодом. То есть — вы можете свободно просматривать текст программ, исследовать его, учиться на опыте ваших коллег, изучая код их программ и стремясь понять предназначение каждой строчки и каждой команды.

Не думайте, что изучение кода уже созданных программ как-то неправильно или незаконно. Вы тем самым служите распространению знаний на Земле (хотя бы и просвещаясь самостоятельно), а это — весьма благородная цель. К тому же и вашим коллегам это принесет пользу — их труд по написанию красивого и быстрого кода, помимо создания хорошей программы, еще и даст вам возможность стать умелым программистом.

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

«Untaco» — расшифровка чисел и их обновление

Довольно часто в бухгалтерской и финансовой документации вместе с цифровой записью числа требуется указывать и его текстовую расшифровку — например, писать «сто» после числа 100. Довольно ясно, что делать это вручную утомительно, да и небезопасно — можно легко ошибиться. И не случайно данный процесс весьма большое количество пользователей решило поручить макросам — программам на VBA. Дополнений для Word, помещающие в документ текстовые расшифровки чисел, создано немало.

Однако программа Untaco (рис. 6.1) серьезно отличается от своих аналогов одной особенностью. Дело в том, что Untaco умеет автоматически обновлять те расшифровки, которые вставлены с ее помощью. Если после вставления расшифровки числа вы измените его значение, то расшифровка тоже соответственно изменится при сохранении, печати документа или вызове специальной команды, и вам не придется вставлять ее повторно. При работе с деловыми документами, бухгалтерской отчетностью такая автоматическая синхронизация расшифровки числа с его значением весьма важна, так как любое несогласование здесь может вызвать серьезные последствия.

Рис. 6.1. Untaco — многофункциональный конвертор «число-текст» с возможностью автоматического обновления расшифровок чисел.

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

В Untaco реализованы интересные технические решения, связанные с работой с переменными в документе, закладками, интеллектуальной обработкой текстовых строк, а также с операциями над самими макросами (их копирование и удаление). Также в Untaco показано, как осуществить подмену стандартных команд Word (например, «Сохранить», "Печать") макрокомандами. Простой и удобный инсталлятор демонстрирует возможность помещения компонентов программ в шаблон Normal.dot.

Программа Untaco доступна с адресов: http://antorlov.chat.ru или http://www.newtech.ru/~orlov.

TreeView — кнопка «Пуск» для Microsoft Word

Данная разработка способна серьезно облегчить труд тех, чей рабочий инструмент — Microsoft Office. Коротко можно сказать, что она — окно "Открыть файл", сделанное по образцу папки Internet Explorer'a «Избранное» (или меню Windows "Пуск"), — в виде выпадающего меню отображаются все документы в текущей папке и в любых других, указанных пользователем, что позволяет искать и открывать документы, не выходя из Word и не роясь в изрядно поднадоевшем окне Word «Открыть» (рис. 6.2).

Рис. 6.2. TreeView. Чтобы открыть нужный файл, просто пробегитесь мышкой по этим ниспадающим меню и найдите его.

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

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

Автор «TreeView» — Антонюк Дмитрий Александрович из города Комсомольск-на Амуре. Программу можно загрузить с сайта разработчика http://treeview.chat.ru.

SuperTypist — набиратель текстов

Небольшая программа SuperTypist, созданная Константином Ушаковым, предназначена для быстрого и удобного набора текстов. Для работы с программой сначала нужно создать небольшой словарь с теми словами, которые, по Вашему желанию, должны набираться автоматически (о том, как создавать этот словарь и куда его потом помещать, написано в инструкции к программе). Когда же вы начнете набирать какое-нибудь слово из словаря, макрос автоматически подставит его окончание, как только это слово будет однозначно определено. Если вы желаете набрать другое слово, начинающееся с тех же букв, что и записанное в словаре, то просто продолжайте набор, и подставленное слово исчезнет. А если вы согласны с макросом, то нажмите стрелку влево, и курсор автоматически перейдет к концу вставленного слова.

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

Загрузить SuperTypist можно из Библиотеки Microsoft Office Extensions, расположенной по адресу http://www.microsoft.ru/offext.

ВерсткаТекстаКнижкой — книгоиздательство в Word

Иногда при подготовке документов в Microsoft Word возникает необходимость распечатать их в виде книжки размером в половину листа, так, чтобы после печати ее можно было бы сшить посередине. Такую книжку удобно взять с собой, да и просто читать, а для учебных материалов подобный вид был бы самым удобным. Зачастую методические пособия в высших учебных заведениях выпускаются именно в таком формате.

До недавнего времени стандартными средствами Word сделать такую книжку было невозможно. Многие пользователи прибегали к различным ухищрениям (к примеру, устанавливая «зеркальные» поля в полстраницы и пропуская каждый лист через принтер четыре раза) или пытались освоить специализированные программы верстки вроде PageMaker'а. В любом случае создание брошюры было весьма непростой задачей. В OfficeXP возможность делать брошюры появилась, однако просмотреть макет перед печатью и вывести на принтер его отдельные листы невозможно, так что при сбое принтера приходится перепечатывать весь макет заново. Кроме того, системные требования данного пакета программ весьма немалые.

Но книжку можно спокойно сделать в Word любой версии, начиная с 97-го, с помощью программы, написанной специально для этого и называющейся просто — «ВерсткаТекстаКнижкой». Она использует довольно оригинальный способ создания макета книжки, в качестве основы для него взяв надписи — обьекты Microsoft Word, способные содержать в себе текст. Надписи могут быть между собою связаны, и текст, вводимый в одну из них, при исчерпании свободного места в ней перетечет в другую, следующую по порядку связывания надпись. Эта возможность и используется в программе, которая заполняет макет книжки связанными надписями, соответствующими ее отдельным страничкам, а затем копирует в них текст из исходного документа. В результате получается макет книжки, готовый к печати (рис. 6.3), который в случае необходимости можно спокойно редактировать, а при сбое в процессе печати нетрудно перепечатать любой лист макета. Макет составлен так, что каждый второй лист в нем является обратной стороной первого, поэтому на принтере с двусторонней печатью получить готовую книжку можно, просто послав на печать документ со сверстанным макетом. На обычных принтерах необходимо посылать на печать вначале нечетные, а затем четные страницы макета (для автоматизации данного процесса служит специальный макрос, входящий в комплект поставки программы). При необходимости макет книжки можно перенести для печати на другой компьютер, где данная программа не установлена.

Рис. 6.3. Сделать книгу в Word теперь не проблема. Вот написать бы еще ее сначала

Каждый второй лист в макете книжки — обратная сторона первого, так что на принтере с двусторонней печатью достаточно будет одного «прохода», чтобы получить готовую книжку, а на остальных принтерах придется сначала посылать на печать нечетные, а затем четные страницы макета, соответственным образом переложив листы после первой печати. Для автоматизации такой печати служит специальный макрос, входящий в комплект поставки программы.

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

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

Также в комплект поставки входит программа «Файлообьединялка», которая поможет вам обьединить содержимое множества однотипных файлов в один.

Разумеется, у программы есть и недостатки, в основном обусловленные ограничениями Word в плане работы с надписями. Так, при наличии в исходном документе таблиц процесс верстки брошюры серьезно затрудняется, так как ширину таблиц приходится подгонять под ширину полученных страничек. Иногда при попадании таблицы на границу страничек пара ее строчек, примыкающих к этой границе, перестают отображаться (следствие ошибки в самом Word'е) — приходится принудительно разбивать таблицу. В случае наличия в исходном документе рисунков зачастую необходимо неоднократно переверстывать макет заново (впрочем, это нетрудно благодаря входящей в комплект дополнительной утилите), подбирая нужный размер рисунка, — программа их не масштабирует. Впрочем, данные проблемы возникают лишь при работе со сложными документами, содержащими большое количество таблиц и графики.

Ознакомиться с кодом компонентов пакета программ «ВерсткаТекстаКнижкой» рекомендуется всем, кто интересуется возможностями VBA по работе с содержимым документа, пользовательскими формами. Также весьма примечателен инсталлятор программы, который нетрудно приспособить для установки собственных разработок.

"ВерсткуТекстаКнижкой" можно загрузить с адресов:

http://antorlov.chat.ru или http://www.newtech.ru/~orlov.

Красоты из глубин Word

Когда обычный пользователь достигает определенных высот во владении компьютерными технологиями, то у него практически всегда возникает желание как-нибудь переделать привычные программы, настроить их под свои требования. Гибкая система настройки панелей и меню в Microsoft Word дает возможность это сделать весьма неплохо. Однако при добавлении новых команд на панели инструментов часто хочется присвоить командам красочные значки, отличающиеся от однообразных стандартных. Но набор значков, предоставляемый Word'ом по умолчанию в выпадающем списке выбора иконки для кнопки, не больно-то и велик…

Эту проблему успешно решает программа "Генератор иконок". Впрочем, вернее ее бы можно было бы назвать "Вытаскиватель иконок". Дело в том, что Microsoft Office содержит в себе, в своих исполняемых файлах и библиотеках около 3000 значков. Эти значки по умолчанию назначены разным командам, большую часть которых обычный пользователь никогда не вызывает по причине ненадобности или отсутствия информации о них. Но это не значит, что значки для этих команд нельзя использовать для своих целей! Icon Generator извлечет из «недр» Word'а эти значки, разместив их на специально созданных панелях инструментов (рис. 6.4), так что вам останется лишь скопировать их на свои панели с помощью стандартной функции "Копировать значок" режима настройки панелей. Пусть ваш Word расцветится красивыми иконками!

Рис. 6.4. И все это хранит в себе Word

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

Программу "Генератор иконок" можно загрузить с адресов

http://antorlov.chat.ru/develop.htm или http://www.newtech.ru/~orlov/develop.htm.

Для студентов и программистов

Пакет макросов, который называется очень просто — "Дополнения для Word", создан Петром Каньковски и доступен с адреса http://kankowski.narod.ru. Основное его предназначение — расширение возможностей пользователя Word, в особенности в плане составления документов, удовлетворяющих требованиям современных научных издательств и ВУЗов. Так, в комплекте пакета есть шаблоны «Реферат», «Заявление», позволяющие быстро оформить соответствующий документ, а параметры основного шаблона программы во многом соответствуют российским требованиям к оформлению научных публикаций. При установке программы большому расширению подвергается список автозамены — после установки пакета в него добавляются многие сокращения, позволяющие серьезно сэкономить время при наборе текста (например, «док-т» заменяется на «документ», «эл-т» — на "элемент").

"Дополнения для Word", а также другие разработки Петра Каньковски особенно заинтересуют тех, кто создает программы на VBA, так как все они поставляются с открытым исходным кодом и подробными комментариями в нем. Особенно примечательны специальные компоненты для разработчиков, доступные так же с сайта Петра — "Пакет для разработчиков" и "Ice In Eyes" (доступный со страницы http://kankowski.narod.ru/dev.htm). Помимо действительно полезных макросов, например, набора математических функций, и коллекции красивых значков, программисты на VBA найдут в этих разработках и коды функций работы из VBA с API — программным интерфейсом Windows, позволяющие отображать диалоговые окна Windows, вызывать команды операционной системы. Одна из разработок представляет собой HTML-конвертор, позволяющий эффективно и качественно преобразовать файл Excel в web-страницу. Этот конвертор в отличие от встроенных в Office средств сохранения данных в формате HTML генерирует компактный и корректный код.

Весьма примечательным является «Справка» к пакету, содержащая, помимо его описания, еще и обширную подборку советов по работе с Word. С "Дополнениями…" поставляется методичка "Как написать реферат", которая может помочь студентам в учебной работе с излишне строгими преподавателями. К сожалению, у пакета есть и мелкие дефекты (например, отключение без запроса отображения горизонтальной линии прокрутки вместе с кнопками выбора вида документа, развертывание по умолчанию окна Справки на весь экран), однако они не умаляют его достоинств и не мешают с ним работать.

На сайте Петра есть подборка ссылок на Интернет-ресурсы, посвященные VBA, а также сборник полезных советов по работе с Word и использованию API.

WOPR — Woody's Office Portal

WORP, или Woody's Office Portal — это большой и мощный пакет макросов, выполняющих самые разнообразные задачи, — от предоставления пользователю усовершенствованных диалоговых окон сохранения и открытия файлов до создания и печати конвертов или буклетов. С помощью компонентов WORP можно вставить в документ зеркальное отображение любого его фрагмента, свободно изменять даты создания и изменения файлов, удобно настраивать параметры вставляемых рисунков. WORP поможет пользователю в восстановлении поврежденных документов Word или в управлении стилями.

Сайт программы расположен по адресу http://www.wopr.com. Основная версия программы работает под Word 97, однако на сайте есть модули, использующие возможности новых версий Word. К сожалению, по умолчанию код WORP закрыт от просмотра, однако вам может помочь решить эту проблему упоминаемая в прошлой главе бесплатная версия программы AVPR с сайта www.passwords.ru. Программа распространяется по принципу Shareware, а объем установочного файла превышает три мегабайта.

Библиотека макросов

В Интернете есть целый сайт, посвященный программам на VBA. Это — неоднократно уже упомянутая Библиотека Microsoft Office Extensions — http://www.microsoft.ru/offext. Там представлены макросы на любой вкус: и для набора текстов, и для бухгалтерской работы, и даже игры. На сайте программы Microsoft Office Extensions есть также специальный раздел «VBA-форум», в котором публикуются статьи специалистов по VBA как для начинающих, так и для опытных разработчиков.

Рис. 6.5. Знак качества PC Magazine

Всем программам, помещаемым в Библиотеку Microsoft Office Extensions, выдается специальный Знак Качества "Yes, Its Works" (рис. 6.5). Его можно размещать на сайте программы, на коробках с дистрибутивом, в общем, где угодно! Так что если вы хотите, чтобы ваша программа имела престижную оценку от Тестовой лаборатории PC Magazine — обязательно отправьте ее в Библиотеку.

Но самое главное — если вы отправите в Библиотеку свою программу, то у вас появится шанс получить приз за нее, если ваше творение будет признано наилучшим. На сайте Microsoft Office Extensions проводится конкурс на лучшую разработку для Microsoft Office, и победителям этого конкурса выдаются вполне реальные призы, например, персональный компьютер или клавиатура с оптической мышью. Условия получения призов представлены на сайте конкурса. Фактически конкурс Microsoft Office Extensions является единственным местом в Сети, где разработчики бесплатных программ могут получить достойное вознаграждение за свой труд.

Когда вы наконец-то решите представить свою разработку на конкурс, то для начала посетите страницу http://www.microsoft.ru/offext/rules и загрузите с нее Лицензионное соглашение и Анкету разработчика, которые вам необходимо заполнить. Вы можете свободно изменять Лицензионное соглашение так, как вам заблагорассудится, но в Анкете должны указать точные данные. Помните, что оба этих документа будут распространяться вместе с вашей разработкой, так что не указывайте там слишком конфиденциальных данных.

Затем поместите вашу разработку, а также Анкету и Лицензионное соглашение в архив формата Zip и отошлите его в виде аттачмента по адресу offext@microsoft.com. В течение 24 часов вам должно придти потверждение получения вашей разработки, отправляемое автоматически. Если оно не пришло, то повторите отправку — видно, почтовые серверы сработали с ошибками.

Требования к представляемым программам немногочисленные и вполне разумные. Во-первых, программа должна работать в русской версии Microsoft Office XP. Во-вторых, она не должна повреждать какие-либо файлы системы или пользователя, не должна вызывать зависание системы.

Однако есть также и Пожелания Тестовой лаборатории PC Magazine разработчикам. Если представляемая программа им соответствует, то это повышает ее шансы на выигрыш в конкурсе. И вот какие это пожелания:

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

· Во-вторых, программа должна работать корректно — то есть не допускать потери данных пользователя. Так, если программа не предназначена для изменения параметров текста, то она и не должна их менять.

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

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

· И, в-пятых, весьма желательно, чтобы разработка поставлялась с кодом, не закрытым от просмотра паролем. Во всяком случае, доверия тогда к разработчику будет больше, а значит, и вероятность получить приз выше.

Сайт "Высокие статистические технологии"

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

· Статьи доктора технических наук, профессора А.И.Орлова, посвященные современным статистическим технологиям. Если вы являетесь специалистом в области статистических наук, то вас наверняка заинтересует рассказ о новом направлении математики — статистике обьектов нечисловой природы, позволяющей использовать статистические методы для обработки данных, не поддающихся переводу в числовые значения.

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

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

· Возможность подписаться на бесплатную электронную газету «Эконометрика», в которой рассказывается об этой науке, на наглядных примерах демонстрируются технологии прогнозирования экономической ситуации, оценки рисков, повествуется о применении эконометрики в экологии, менеджменте, управлении предприятием. Если вы учитесь в экономическом ВУЗе, желаете стать специалистом в своей области, то эта газета предназначена специально для вас.

· Учебник по менеджменту профессора А.И.Орлова. Он рассказывает о премудростях этой науки живым и легкодоступным языком и может служить как учебным пособием, так и просто интересной книгой. Учебник завоевал заслуженную популярность у студентов и преподавателей и был издан как часть учебного пособия по менеджменту. В настоящее время готовится его отдельное издание.

· Программы «ВерсткаТекстаКнижкой», «Untaco» и "Генератор иконок", о которых подробно рассказано в этой главе.

· Программу-дополнение для Microsoft Word 97/2000 «Каталогизатор», которая даст вам возможность создавать каталоги из гиперссылок на файлы в той или иной папке, а также web-страницы, содержащие картинки из какого-либо каталога. Ее удобно использовать, если вы желаете упорядочить свои файлы на жестком диске или создаете web-сайт.

· Набор дополнений для Microsoft Word 97/2000 «SaveIn». В этом наборе вы можете найти интересные технические решения и посмотреть, как они в нем реализованы. Кроме того, «SaveIn» поможет вам, если вы постоянно сохраняете копии рабочих файлов в нескольких разных папках.

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

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

Ну, а какой же адрес у сайта "Высокие статистические технологии"? Вот такой: http://antorlov.euro.ru. Есть и зеркало — http://www.newtech.ru/~orlov. Так что добро пожаловать в любое время дня и ночи. А если вы живете в Москве, то на заглавной странце сайта http://antorlov.euro.ru прочитайте, как получить к его зеркалу доступ бесплатно, не платя деньги провайдерам за пользование Сетью.

Глава 7. Напутствие

И под конец первой части книги, посвященной программированию в среде Microsoft Office, стоит сказать пару слов тем, кто все же заинтересуется этой темой.

Создавая программы на Visual Basic for Applications, вы сможете на опыте получить представление практически обо всех современных принципах программирования: как структурных — основанных на последовательном выполнении всех команд программы, так и «событийных», согласно которым программа должна реагировать соответствующим образом на действия пользователя. В современном программировании используются как структурный, так и событийный принципы: интерфейс программ построен по принципу реакции на события, а функции, выполняемые программой — по принципу независимой работы. Например, графический редактор Paint, да и тот же Word в большей своей части являются приложениями, управляемыми событиями — действиями пользователя; а, скажем, программы дефрагментации или проверки диска работают почти независимо от пользователя, он только должен задать им начальные параметры. В VBA можно писать как программы, управляемые событиями (посредством разработки форм), так и работающие последовательно и независимо (используя только модули), а также, разумеется, и приложения, сочетающие в себе оба способа действия.

VBA может служить не только полноценной средой разработки приложений, работающих в Microsoft Office, но и как бы "учебным центром" по освоению принципов и различных приемов современного программирования. Работа с системным реестром, с файловой системой и даже со встроенными в Windows функциями программирования API и многое другое, — все это вы сможете изучить на опыте, используя VBA, причем сделать это Вам будет значительно легче, чем если бы Вы сразу начали учиться программировать на Delphi или Visual Basic for Windows.

Средство записи макросов, возможность легкого анализа уже написанных программ (так как фактически любая программа на VBA распространяется вместе со своим исходным текстом), русский интерфейс редактора (к сожалению, только в Microsoft Office 97), большая и четко написанная справка, обилие примеров, — все это очень помогает в освоении этого языка и делает возможным его самостоятельное изучение даже без использования дополнительной литературы. Другие языки программирования так освоить практически невозможно. Кроме того, интерпретатор VBA обладает большими возможностями по коррекции ошибок, и поэтому программа на этом языке вряд ли вызовет ошибку системы и необходимость перезагрузки компьютера, если только не увлекаться вызовом функций API.

Если Вы научитесь программировать на VBA, поймете принципы разработки алгоритмов и основные приемы программирования, освоите среду написания программ — редактор VBA, то для Вас практически не составит труда начать создавать программы на Visual Basic for Windows. У этого языка абсолютно такой же синтаксис, такая же среда разработки с контекстной справкой и пошаговыми подсказками, на первый взгляд он отличается от VBA разве что набором доступных встроенных процедур и функций и отсутствием возможности записи макросов. Безусловно, есть и более глубокие различия, но при создании не очень сложных программ они не будут иметь большого значения. Вы сможете легко освоить средство разработки программ Delphi, хотя логика языка Pascal, лежащего в основе Delphi, несколько отличается от логики Visual Basic. Однако и среда разработки, и общие принципы программирования в Delphi те же. Несколько труднее будет освоить C++ и его производные из-за серьезно отличающегося синтаксиса и высокой сложности этого языка, но это не всегда необходимо, — подавляющее большинство проектов программ можно реализовать на Visual Basic или Delphi.

* * *

Среди тех, кто занимается программированием уже много лет и достиг в этом деле определенных высот, весьма распространено мнение, что VBA, да и Visual Basic — языки, на которых нельзя создать быстро и хорошо работающие программы. В определенной степени это соответствует действительности: программы на Visual Basic обычно работают несколько медленнее и занимают больше места, чем аналогичные им программы на С++, на Visual Basic весьма проблематично решение некоторых программистских задач и приемов. Поэтому профессиональные программисты часто считают, что Visual Basic — язык для дилетантов, а любой уважающий себя специалист в области информационных технологий обязан знать и использовать такие языки, как С++ или ассемблер. Но не следует забывать, что изначальное предназначение компьютерных технологий — помощь человеку в обработке и создании информации, а отнюдь не "служение самим себе", своему дальнейшему развитию. Поэтому основная функция большинства компьютерных программ — получение нужного результата, обработка вводимой информации, например, анализ электрокардиограммы или расчет траектории космической ракеты, а быстродействие, малый размер, да и удобство интерфейса — лишь их хорошие свойства, которые могут серьезно облегчить работу с программой.

Создать же программу, дающую действительно нужный результат, может лишь человек, непосредственно работающий в области, для которой данная программа пишется, — врач, инженер, астроном, математик. Только он знает все тонкости своего дела и сможет предусмотреть в программе все необходимые условия. Профессиональный программист же, хоть и имеет возможность создать программу, которая будет работать в несколько раз быстрее и занимать на диске значительно меньше места, чем написанная врачом или инженером, не представляет себе тонкостей области человеческой деятельности, для которой эта программа пишется, а поэтому, при всей внешней привлекательности, такая программа будет работать хуже, чем первая. К примеру, какая программа для анализа электрокардиограмм лучше: созданная опытным специалистом в области медицины, который посвятил всю свою жизнь исследованию электрокардиографии и энает все-все тонкости этого дела, или написанная не менее опытным программистом, который знает все языки программирования как свои пять пальцев, но, увы, не знаком с медициной? Даже если врач обратится к программисту с просьбой помочь ему написать эту программу, то он все равно не сможет посвятить того во все тонкости своего дела, чтобы отразить в программе все грани своего многообразного опыта, — на это может уйти слишком много времени и сил, да и нелегко программисту будет изучить совершенно незнакомую ему до этого сферу деятельности! Поэтому врач, немного знающий программирование, больше подходит для написания медицинской программы, чем профессиональный программист, немного знакомый с медициной. И пусть программа врача будет работать медленнее, пусть она будет занимать на диске в два раза больше места, пусть даже при ее создании будут нарушены все сложившиеся каноны программистского искусства, — все равно она сможет принести людям гораздо больше пользы, чем программа, прекрасно и хорошо написанная не знакомым с медициной человеком, так как только врач сможет поделиться с ней всем своим многогранным опытом.[16]

Отнюдь не всякий человек, превосходно умеющий лечить людей, сможет столь же превосходно освоить язык С++. И это нормально — у каждого свой талант, свои дарования. Но, благодаря стараниям сотен и тысяч программистов, зачастую безвестных, сейчас существуют среды программирования, освоить которые без проблем может каждый — те же Visual Basic и Delphi. И поэтому практически любой специалист своего дела может в наши дни использовать в своей работе новейшие достижения информационных технологий — создать нужную ему программу, разработав ее алгоритм на основе своего опыта. А для профессиональных программистов осталось не менее почетное и трудное дело — создавать такие среды программирования и новые языки, с которыми работать будет еще легче и быстрее, чем с существующими.

На вопрос: "Какой язык программирования лучше всего?" стоит отвечать так: "Тот, на котором ты можешь лучше всего писать программы и реализовывать свои проекты". Проще всего освоить Visual Basic и Delphi. И поэтому не стоит так уж стремиться обязательно знать ассемблер, выучить все функции API и жалеть, что не можешь вводить программы сразу в машинных кодах, — лучше повнимательнее изучить более простой язык даже вроде того же VBA для того, чтобы уметь использовать все его возможности для воплощения своих пожеланий в жизнь. Ну, а если кто желает посвятить свою жизнь информационным технологиям, создавать новые языки общения с компьютером, то тому знание Visual Basic никогда не помешает, а остальные знания, как говорится, дело наживное, — надо лишь начать учиться и освоить общие принципы.

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

* * *

И, наконец, стоит сказать об использовании программирования на VBA в процессе обучения в школе, институте, да и в самостоятельном образовании. Обучение искусству составления программ на собственном опыте, путем самостоятельного исследования возможностей языка и среды разработки является одним из наилучших способов научиться так называемому "научному мышлению", тому подходу к различным явлениям окружающего мира, на котором стоит вся современная наука.

Самостоятельно обучаясь использованию VBA, можно как бы на небольшой модели испробовать почти все исследовательские приемы, которые используются современной наукой, — и наблюдение, и анализ результатов, и эксперимент… Например, вынесение из записанного макроса неизвестной команды в отдельную процедуру для выяснения ее функции, — чем не эксперимент в контролируемых условиях? Или изменение параметров команды с целью узнать, к чему это приведет, — разве не так действуют исследователи, изменяя начальные условия эксперимента? Так что изучение VBA может стать целым "научным исследованием", в течение которого можно будет отработать основные приемы современного научного подхода.

Удачи вам в программировании!

Из мира Интернета

· В Интернете есть немало информации о программировании на VBA. Помимо Форума для разработчиков на сайте программы Microsoft Office Extensions (http://www.microsoft.ru/offext), обратите внимание на сайт Андрея Колесова и Ольги Павловой http://www.visual.2000.ru, на котором представлены статьи этих авторов о VBA, а также на литературу из сетевых библиотек

http://www.firststeps.ru, http://www.rusdocs.ru, http://www.emanual.ru и других.

Наверняка найдете немало полезного.

Список разработчиков VBA

Если вы хотите посмотреть имена тех, кто занимался разработкой языка VBA, создавал среду разработки — Редактор VBA или писал справочную систему, то сделайте следующее. Запустите Редактор VBA и выберите из меню «Вид» пункт "Панели инструментов — Настройка" (в английском варианте интерфейса соответственно пункт "Toolbars — Customize" из меню "View"). После открытия диалогового окна настройки панелей вы получите возможность переименовывать, удалять или добавлять пункты меню и иконки на панелях инструментов Редактора VBA.

Затем в режиме настройки откройте меню помощи (скрывается за вопросительным знаком или словом Help в строке меню) и переименуйте самый нижний его пункт — "About Microsoft Visual Basic" в английских версиях или "О программе" в русской, задав ему имя "Show VB Credits". Выйдите из Режима настройки, закрыв диалоговое окно.

Теперь, выбрав из меню помощи пункт Show VB Credits, вы увидите медленно плывущий снизу вверх список разработчиков на фоне крутящихся кубиков и приятной музыки. Клавиши стрелок управляют скоростью движения списка.

Данная возможность присутствует в Office 97 и Office 2000, но из Office XP она убрана.

Часть II. ИССЛЕДУЕМ КОМПЬЮЕТР

Вторая часть книги посвящена устройству и работе компьютерных систем и сетей. Из нее вы узнаете, что находится внутри жесткого диска и отчего существует пять разных кодировок для русского языка, как устроены жидкокристаллические экраны и кто такие «фидошники» или «линуксоиды». Глава про устройство сети Интернет содержит редкую информацию, которую можно встретить лишь в сложных профессиональных руководствах, тем не менее, написана она достаточно доступно для того, чтобы понять ее без особой подготовки. А если вы хотите узнать о том, как создать сеть без постоянных соединений между компьютерами — познакомьтесь со строением Fidonet. Глава, посвященная электронной почте, расскажет вам о секретах данной технологии передачи информации. Полезные советы, которыми перемежаются некоторые главы, могут помочь вам в вашей работе с компьютерными технологиями.

Если вы какую-то информацию не поймете — спокойно пропустите ее. Вернетесь потом. Возможно, некоторые главы вам придется прочитать неоднократно. И это нормально — все осознать и освоить за один раз нельзя. Эта книга — не учебник, который нужно читать последовательно от начала до конца. Она скорее является справочником для "компьютерщиков"-самоучек, для тех, кто решил самостоятельно узнать, как устроен и работает компьютер. Так что читайте в ней то, что вам нужно, а не то, что идет по порядку. Теоретические главы в книге перемежаются практическими, а сложные в понимании — легкими. Хотите ли вы узнать о строении Интернета или о «секретных» приемах работы в Microsoft Word, желаете ли познакомиться с перспективными разработками в области устройств мониторов или узнать об том, как перепрошить BIOS и установить на компьютер несколько операционных систем сразу, — для всего вам пригодится книга, которую вы держите в руках.

Так что — в путь!

Из мира Интернета

· На сайте http://karamurza.chat.ru представлена книга видного современного философа и политолога С.Г.Кара-Мурзы "Опять вопросы вождям", которая является глубоким научным исследованием современных проблем западного и российского общества. Данная книга может серьезно повысить образовательный уровень интересующихся политологическими и социологическими проблемами.

· Если вы желаете регулярно получать на ваш компьютер новости и разную полезную информацию, то посетите сервер www.informer.ru и создайте на своем жестком диске web-страницу с набором полюбившихся вам информеров, вставив в нее предоставляемый при выборе информера код. При каждом заходе в Интернет открывайте эту страницу, нажимайте кнопку «Обновить» и узнавайте погоду на текущий день, а также многое другое…

Глава 8. Как хранятся данные?

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

Жесткий диск

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

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

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

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

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

Каждая дорожка с помощью магнитных меток еще во время изготовления винчестера[18] разбивается на секторы — непосредственные единицы хранения информации на жестком диске. Согласно существующим стандартам, в каждом секторе может быть записано 512 байт информации, метка начала сектора и число, рассчитываемое на основе информации в секторе для отслеживания возможных ее изменений (так называемая "контрольная сумма сектора"). Начало каждой дорожки и сектора также особо помечается, причем начала всех дорожек, как нетрудно понять, расположены в плоскости одного радиуса стопки дисков.

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

Управляет работой жесткого диска особая микросхема, именуемая контроллером винчестера.

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

Несмотря на то, что в каждый отдельный момент контроллер винчестера может работать максимум лишь с одним сектором на одном из дисков стопки, блок головок перемещается целиком — со всеми головками. Это может показаться нерациональным, но иначе конструкция винчестера очень бы усложнилась.

После окончания сборки жесткого диска на заводе проводится его тестирование с помощью специальной аппаратуры. К сожалению, на существующем уровне развития технологий добиться идеально качественной поверхности магнитных дисков невозможно, поэтому на них обязательно будут дефектные участки — места, куда невозможно полноценно осуществить запись данных. Чтобы этот факт не приводил к невозможностью работать со всем жестким диском, во время тестирования составляется так называемая "таблица переназначения дефектных секторов". При этом контроллер жесткого диска программируется так, что при поступлении обращения операционной системы к дефектному сектору в действительности работа осуществляется с резервными сектором, находящимся в специальной области диска (располагающейся, в зависимости от модели винчестера, на каждой дорожке или, чаще, в отдельных цилиндрах). Данные о соответствии дефектных секторов диска резервным также находятся в специально выделенной области и загружаются в память контроллера жесткого диска при начале работы винчестера.

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

После этого производится самотестирование жесткого диска путем считывания определенной последовательности дорожек, и, если все прошло нормально, сообщение BIOS'у об успешном запуске винчестера.

BIOS, или базовая система ввода-вывода: Base Input-Output System, — это программа, записанная в микрочипе на материнской плате. Она содержит в себе функции управления ресурсами материнской платы и некоторых периферийных устройств, а также программу работы с жестким диском — считывания и записи данных, перемещения головок. Операционная система MS-DOS использует именно BIOS для работы с ресурсами компьютера — когда MS-DOS посылает команду считать данные с винчестера, то выполняет ее BIOS. Системы Windows9x/Me, Windows NT/2000/XP, Linux используют свои программы-драйвера для работы с винчестерами.

BIOS'у компьютера и операционной системе не обязательно поставляются точные данные о физическом строении ("физической геометрии") жесткого диска — о количестве цилиндров, головок, секторов. Электроника винчестера способна "на лету" пересчитывать данные "физической геометрии" в так называемую "логическую геометрию" диска и уже именно ее параметры сообщать BIOS'у. Например, старые модели BIOS не могут работать больше, чем с 1024 цилиндрами, 256 дорожками в цилиндре и 63 секторами на дорожке. Это связано с возможностями его так называемого "прерывания 13", способа работы с жестким диском, изначально в BIOS запрограммированного и используемого MS-DOS, а также операционными системами Windows во время загрузки. Поскольку развитие жестких дисков шло именно по пути увеличения количества цилиндров (в самом деле, представить себе жесткий диск с 256 головками одна над другой сложно), то для того, чтобы с диском можно было работать через BIOS, контроллер винчестера представляет BIOS'у, скажем, диск с 20480 цилиндрами и 4 дорожками как диск из 1024 цилиндров и 80 дорожек.

К сожалению, даже при использовании конвертации "физической геометрии" диска в «логическую» максимальный обьем винчестера, с которым можно работать средствами BIOS, составляет 1024*256*63*512= 8455716864 байт = около 8 гигабайт. С дисками большего обьема работать посредством 13-го прерывания BIOS невозможно.[19] Поэтому на новых материнских платах BIOS особым образом усовершенствован ("прерывание 13" сделано "расширенным"), и это ограничение емкости дисков в нем отсутствует.

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

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

В жестких дисках последних 7–8 лет выпуска имеется так называемая система S.M.A.R.T. (то есть "Self Monitoring Analysis and Reporting Technology") — особые компоненты устройства, предназначение которых заключается в отслеживании возможных неисправностей и устранении их по мере возникновения. Так, в то время как в старых дисках таблица переназначения дефектных секторов формировалась на заводе, выпускающем винчестеры, а впоследствии уже не могла изменяться, то в новых винчестерах система S.M.A.R.T. во время работы диска отслеживает качество записи и чтения с каждого сектора и при его снижении заранее переназначает сектор на резервный, не дожидаясь момента отказа. Изначально же область резервных секторов делается больше, чем нужно в момент изготовления диска, — с расчетом на будущее.

Читая старые статьи и воспоминания компьютерщиков, вы наверняка обращали внимание на описания ситуации, когда жесткий диск покрывается сбойными секторами, и наверняка поражались, что, к счастью, вас эта чаша минула — ваш недавно выпущенный диск абсолютно исправен и не имеет ни одного поврежденного сектора. Но это так из-за действия системы S.M.A.R.T. - она просто даже не дает операционной системе заметить, что тот или иной участок диска испортился, моментально переназначая на него резервные секторы. И только тогда, когда вся резервная область будет исчерпана, на вашем жестком диске появятся видимые из операционной системы сбойные участки.

Помимо слежения за качеством поверхности жесткого диска, S.M.A.R.T. также отслеживает изменения параметров работы механики винчестера, таких, как время достижения диском расчетной скорости вращения, время доступа к различным зонам диска и в случае, когда эти параметры выходят за допустимые пределы, сообщает операционной системе, что диск собирается испортиться. Если операционная система поймет сообщения S.M.A.R.T., то пользователю будет сообщено о вскоре предстоящей необходимости замены диска.

Для просмотра параметров S.M,A.R.T. можно воспользоваться программным комплексом HDDUtility Дмитрия Пашкова (адрес для загрузки — http://www.ibaranov.ru/hddutil.rar, программа работает только в среде Windows9x). Кроме того, если ваш диск выпущен фирмой Quantium после 1997 года, то с помощью HDDUtility вы сможете просмотреть его дефект-лист непосредственно и узнать, какие конкретно сектора являются переназначенными. Если же у вас нет HDDUtility или воспользоваться вы им вы не можете (например, по причине работы в другой операционной системе), то используйте любой программный пакет для тестирования компонентов компьютера, имеющий функцию прорисовки графика скорости последовательного чтения секторов диска (например, ZiffDavis WinBench 99). Моменты резкого падения скорости чтения соответствуют переназначенным секторам, так как при тестировании такого сектора тратится время на перемещение магнитной головки в резервную область и обратно к той дорожке, на которой располагался переназначенный сектор.

Если при заводском тестировании на одной поверхности магнитной пластины будет найдено столько плохих секторов, что весь дефект-лист окажется заполненным, а другая поверхность будет в порядке, то ту магнитную головку, которая должна работать с дефектной поверхностью, просто отключают. Вас, кстати, никогда не удивляло наличие в магазинах дисков, скажем, на 10 и 30 гигабайт при заявленной емкости одной пластины в этих моделях в 20 гигабайт? Величины-то 20-ти не кратны. Так вот в таких дисках одна из сторон их магнитных пластин имеет так много дефектов, что просто отключена и диск промаркирован на меньшую емкость. Скажем в 10-гигабайтном винчестере стоит 20-гигабайтная пластина, в которой работает только одна сторона.

На свободное место в резервной зоне поврежденные сектора переназначаются лишь на некоторых моделях жестких дисков. На остальных же переназначение секторов может идти лишь на резервные, находящиеся лишь на той же дорожке. Или на том же секторальном блоке. Или на том же цилиндре. Использование же для переназначения секторов резервной области другой дорожки (блока, цилиндра) невозможно. Делается это для некоего упрощения работы системы переназначения секторов, подразумевается, что повреждения поверхности про исходят в относительно случайном порядке. При длительной работе жесткого диска примерно так и происходит, однако, скажем, при ударе по диску или при его падении может происходить повреждение сразу множества секторов, расположенных в одном месте. Тогда, если эти поврежденные секторы находились, например, на одной дорожке, резервная область этой дорожки окажется переполненной переназначенными секторами, и места в ней для всех не хватит. Многие bad-сектора останутся непереназначенными, и при проверке диска кластеры, их содержащие, будут помечены как поврежденные. Однако резервные области на остальных дорожках останутся незаполненными — те-то дорожки повреждены не были, и общий процент переназначенных секторов будет не таким уж и высоким. Поэтому получится ситуация, при которой согласно сообщениям S.M.A.R.T. процент заполнения дефект-листа низкий, в bad-блоки на диске имеются. Однако моделей жестких дисков, использующих именно такой способ работы с переназначенными секторами, не так и много.

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

Однако даже при работе ScanDisk в режиме «полной» проверки диск все равно время от времени «всхрюкивает». Это происходит как раз в те моменты, когда проверка доходит до дефектного сектора, и контроллер винчестера заставляет головки переместиться в зону, где содержатся резервные секторы. Из этого следует простой практический вывод: если вы желаете узнать, насколько качественно сделана поверхность вашего жесткого диска без каких-либо специальных программ проверки S.M.A.R.T. или тестирования скорости считывания, то запустите ScanDisk в режиме полной проверки, дождитесь начала тестирования поверхности и прислушайтесь к звукам, доносящимся из корпуса компьютера. Каждое «хрюканье» будет означать наличие одного дефектного сектора. Естественно, в период проверки не следует допускать какую-нибудь еще работу с жестким диском со стороны операционной системы или запущенных программ, включая планировщики заданий и хранитель экрана.

"Всхрюкивание" жесткого диска при начале загрузки компьютера также связано с перемещением головок по определенной последовательности дорожек во время самотестирования.

Жесткий диск в своем «натуральном» виде, полученном на заводе, непригоден для размещения информации. Чтобы на винчестере можно было хранить данные, необходимо создать на нем файловую систему.

Файловая система

Каждый пользователь Windows может провести небольшой интересный эксперимент.

Перейдите в корневой каталог какого-нибудь логического диска, например, С, выделите там все папки и файлы и посмотрите совокупный обьем хранящейся в них информации с помощью пункта «Свойства» меню правой кнопки мыши. Если вы работаете в Windows98, обратите внимание на число в окне свойств выделенных папок, после которого стоит слово «занято», — эта величина показывает размер физически занятого этими папками пространства на диске. В Windows2000/XP соответствующая строчка так и гласит — "на диске: столько-то байт". Ну, а в Windows95 посмотрите в окне "Мой компьютер" обьем занятого пространства диска, точно так же вызвав пункт «Свойства диска» (рис. 8.1).

Рис. 8.1. Неодинаковые данные.

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

К примеру, на диске С по данным окна "Мой компьютер" и соответствующей строчки в окне свойств совокупности размещенных на нем папок и файлов было занято 1.83 гигабайт, а обьем всего содержимого диска — 1.44 гигабайта (рис. 8.1). Почему так? Куда делись еще 0.39 гигабайт? А ведь этого обьема несколько лет назад хватило бы на небольшой жесткий диск…

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

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

В разных операционных системах файловая система устроена по-разному. В этой главе будет рассмотрена система FAT, использующаяся в MS-DOS, Windows95 и Windows98 в качестве основной файловой системы, так как она является наиболее просто устроенной и на ее примере легко продемонстрировать основные принципы организации данных. Структура файловых систем, использующихся в качестве основных в операционных системах Unix, Linux, Windows NT/2000/XP другая, но их устройство — тема отдельной книги.

Кластерная организация

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

Казалось бы — а в чем проблема? Пишем файлы на диск друг за другом, записываем в особую область на диске информацию о номерах секторов с началами файлов и размер каждого файла — и нет проблем. Чтобы прочесть нужный файл, надо лишь перейти к его началу и считать столько секторов, сколько файл занимает. Но дело в том, что файлы с жесткого диска иногда надо не только читать, но и удалять, а на их место записывать новые. И что же получится? Файл удален, после него осталось свободное место, а другой файл, который предполагается записать на место старого, отличается по размерам и либо не влезает целиком туда, либо меньше и не заполняет все освободившеся место! В первом случае придется либо искать достаточно большой кусок свободного места, либо записывать новый файл в конец диска, а во втором — пытаться заполнить оставшееся свободным место более мелкими файлами. Все очень неудобно, и к тому же в результате может получиться диск, на котором полно свободных секторов, а новый файл записать некуда.

Чтобы решить эту проблему, был придуман принцип кластерной структуры жесткого диска и использования специальной таблицы размещения файлов. При использовании этого принципа весь жесткий диск как бы делится на множество кусочков равного обьема — кластеров, каждый из которых содержит одинаковое число секторов. В начале диска размещается особая область с данными — FAT-таблица (от File Allocation Table — таблица размещения файлов), в которой записывается, в каких кластерах находится содержимое каждого находящегося на жестком диске файла. Например, примерно так: "файл записан в 121, 122 и 123 кластерах".

С первого взгляда может показаться, что это — такая же ситуация, как и ранее. Но все дело в том, что один файл может располагаться не в последовательно расположенных кластерах, а в множестве отдельных кластеров, разбросанных по всему диску. Достаточно лишь перечислить номера этих кластеров и указать их последовательность друг за другом. То есть в FAT может появиться такая информация: "файл расположен в кластерах 120, 124 и 137". Операционная система, получив запрос на чтение этого файла, смотрит в FAT, в каких кластерах он записан, а потом последовательно их считывает, переписывая содержимое этих кластеров в оперативную память и соединяя его в ней в один неразрывный файл.

Когда же операционной системе надо записать данные на жесткий диск, то она смотрит по таблице размещения файлов, где находится первый свободный кластер (то есть кластер, который не принадлежит какому-либо файлу), и пишет данные в него и последующие кластеры, указывая их номера в той же таблице. Но как только процесс записи файла на диск натыкается на занятый кластер, то система вновь ищет ближайший свободный кластер, следующий за занятыми, и продолжает запись данных на диск с него.[20] Если файл удаляется, то соответствующие ему кластеры освобождаются (точнее, просто их номера помечаются в таблице размещения файлов как свободные), и в эти кластеры снова возможна запись других данных.

Таблица FAT

Таблица FAT — это как бы уменьшенное изображение строения всего жесткого диска (рис. 8.2). Она состоит из отдельных записей-"строчек" с информацией о последовательности кластеров в файлах.

Рис. 8.2. Если вы хотите наглядно представить себе, что такое FAT, то запустите программу дефрагментации диска из Windows95/98 и отобразите сведения о диске. Вот FAT — это примерно то же самое, только там вместо цветных квадратиков — отдельные записи, описывающие состояние каждого кластера диска.

В каждой записи FAT содержится информация следующих видов:

1. Если кластер, к которому относится данная запись FAT, не является последним в файле, то в данной записи будет указан номер следующего кластера, в котором записан данный файл.

2. Если кластер, к которому относится данная запись FAT, является последним в файле, то в данной записи будет стоять специальная метка конца файла.

3. Если кластер, к которому относится данная запись FAT, не относится ни к какому файлу, то в данной записи будет находится информация, указывающая, что этот кластер свободный.

4. Если кластер, к которому относится данная запись FAT, расположен на поврежденной области диска, то в данной записи будет находится информация, указывающая, что этот кластер поврежден и не должен использоваться.

Каждая запись в FAT имеет вполне определенную длину — 12, 16 или 32 бита. В зависимости от длины отдельных таких записей в FAT ее разновидности так и называются — FAT12, FAT16 и FAT32.

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

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

Узнать, какая файловая система установлена на вашем жестком диске, в операционных системах Windows можно в окне "Свойства диска". (Файловая система FAT16 обозначается как просто "FAT".)

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

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

Сохраните лишний раз в процессе работы какой-нибудь Word'овый, скажем, файл на жесткий диск, и вы заметите, как диск «хрюкнет» — то есть произойдет перемещение головок взад-вперед по диску. Причем шумовой эффект не будет зависеть от фрагментированности диска — даже на абсолютно чистом диске с единственным редактируемым файлом шум все же появится. Это так, потому что для записи файла головки жесткого диска будут перемещаться между областью FAT-таблицы, которая располагается в начале диска, и собственно записываемыми данными на диске.

Каталоги

Как уже было сказано, в FAT-таблице располагается информация только о размещении файлов в кластерах. Ну а где же хранятся имена файлов, их даты создания, атрибуты? И где находится информация о первом кластере каждого файла? Если в FAT информации о них нет, то где же она?

А хранится она в каталогах.

Каталог — это попросту файл, почти такой же, как и все остальные, занимающий место на диске, только содержащий данные о других файлах (и каталогах), которые в нем находятся.

В файле каталога записана информация о находящихся в нем файлах (и вложенных других каталогах): их имена, обьем, даты изменения и создания, атрибуты, а также указывается номер самого первого кластера, занимаемого каждым файлом (и файлом-каталогом!). Каждая запись о файле называется дескриптором файла, запомните это слово — оно еще пригодится вам при чтении программистской литературы. Кроме того, во всех файлах каталогов, кроме корневого, имеется ссылка на первый кластер «родительского» каталога — то есть того каталога, который содержит этот самый каталог.

В файлах каталогов, созданных в Windows95 и более старших версиях этой операционной системы, в каждом дескрипторе хранится как длинное имя файла, так и короткое — вида progra~1.exe, которое находится в том же месте дескриптора, что и в каталогах, созданных в MS-DOS. Таким образом обеспечивается возможность работы с созданными в Windows каталогами в старых операционных системах — эти системы смотрят в файл каталога и считывают оттуда лишь короткие имена файлов, а системы Windows умеют считывать из дескрипторов еще и длинные имена. Естественно, что при копировании или перемещении средствами MS-DOS файлов, созданных в Windows, длинные имена теряются, так как в этом случае операционная система MS-DOS копирует данные о файлах из одного файла каталога в другой, а так как она не умеет читать ту часть дескрипторов этих файлов, в которой записаны их длинные имена, то она их и игнорирует.

Файл корневого каталога диска физически всегда расположен в одном и том же месте на диске — сразу после таблицы FAT, присутствующей на диске в виде двух копий, идущих друг за другом — для повышения надежности.

Так как каталог — это обычный файл, то пустой каталог все равно будет занимать место на диске. К примеру, создайте на пустой дискете пустую папку и посмотрите обьем дискеты. На ней будет занято 512 байт (рис. 8.3).

Рис. 8.3. Пустая папка тоже занимает место.

Это и есть обьем файла, являющегося этим каталогом. Или, если у вас установлен пакет программ Norton Utilities для Windows, посмотрите на отчет программы Norton Speed Disk (рис. 8.4), — в нем показывается покластерная структура жесткого диска и указываются, какие файлы расположены в каждом кластере. В отчете вы увидите, что некоторые кластеры содержат файлы с именами каталогов — то есть файлы самих этих каталогов.

Рис. 8.4. Если хотите убедиться, что каталог реально из себя представляет файл с информацией об именах и физическим размещении других файлов на диске, посмотрите отчет программы Norton SpeedDisk. Она показывает, какие файлы записаны в том или ином кластере. Вы обязательно найдете записи вроде тех, что здесь — а это названия папок, не обычных файлов!

Кэширование

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

Но сам файл каталога тоже еще нужно считать. Для этого, вообще говоря, всегда должен быть выполнен весьма сложный алгоритм: считать файл корневого каталога диска, располагающийся всегда в одном и том же известном месте — сразу после FAT, найти в нем информацию о первом кластере того каталога, в котором содержится файл, который в конце концов должен быть считан, перейти к записи FAT, соответствующей найденному номеру первого кластера этого каталога, узнать из FAT, в каких кластерах содержится файл каталога, считать его, а потом повторить этот алгоритм сначала, до тех пор, пока не доберешься до каталога, непосредственно содержащего файл… Ясно, что весь этот процесс — «поход» в корневой каталог и затем по дереву каталогов, постоянное обращение то к файлам-каталогам, то к FAT, а лишь затем считывание самого файла — занимает немало времени. Поэтому операционные системы используют специальные методики для упрощения и ускорения работы с файлами. Самая простая и распространенная — это кэширование, то есть помещение часто используемых данных в оперативную память. Так, всегда кэшируется FAT, а также информация о структуре каталогов и располагающихся в них файлах. В операционных системах Windows95/98 задать количество кэшируемого материала можно в окне "Файловая система" вкладки «Быстродействие» пункта «Система» Панели управления (рис. 8.5).

Рис. 8.5. В операционных системах Windows95/98 здесь можно указать, сколько путей к папкам и файлам операционная система запомнит и будет потом использовать.

Если установить в этом окне параметр "Настольный компьютер", то операционной системой будет запоминаться информация о местоположении первых кластеров 32 каталогов и 677 файлов, к которым в последнее время происходило обращение, а если "Сервер сети" — то о первых кластерах 64 каталогов и 2729 файлов. Эта информация располагается в оперативной памяти и тем самым сокращает в какой-то степени ее обьем, доступный другим приложениям, но в любом случае выигрыш во времени и сбережении головок жесткого диска от износа при кэшировании очевиден.

То есть — казалось бы: если для каждой операции с файлами, даже самого элементарного считывания файла из корневого каталога, нужно посмотреть минимум в три места на жестком диске, — в файл этого корневого каталога, затем в FAT, и лишь потом в кластеры, содержащие данные файла (а если файл фрагментирован, то еще и пройти по ним по отдельности), — то почему же эти операции происходят все же достаточно быстро? А потому, что на самом деле система смотрит в FAT и в каталоги не всегда — она сначала копирует их в оперативную память, а затем, при необходимости считывания файла, берет нужные данные именно из оперативной памяти, а не с диска. Этот процесс именуется кэшированием.

Разделы

В начале жесткого диска, в его самом первом секторе самой первой дорожки располагается небольшая программа — так называемая "главная загрузочная запись" Master Boot Record. В том же секторе помещается Корневая Таблица Разделов ("Root Partition Table"), в которой располагаются сведения о разбиении всего физического пространства жесткого диска на разделы — участки диска с определенной файловой системой на них.

Раздел — это кольцевидная зона поверхности жесткого диска, находящаяся между двумя определенными цилиндрами. В Корневой Таблице Разделов указывается для каждого раздела, с какого сектора какой дорожки какого цилиндра он начинается и на каких заканчивается, сколько в нем всего секторов, какой тип файловой системы на нем установлен и является ли данный логический диск в данный момент загрузочным — то есть должна ли операционная система загружаться именно с него. Согласно стандартам IBM PC, всего в Корневой Таблице Разделов может быть описано не более четырех различных разделов, так как ее размер не должен превышать 512 байт вместе с Master Boot Record.

Внутренняя структура раздела определяется той файловой системой, которая на нем создана. Однако в начале каждого раздела обязательно располагается Загрузочная запись раздела ("Boot Record") — небольшая программа, выполняющая начальную загрузку операционной системы. Один из разделов, описанных в Корневой Таблице Разделов, помечается как «загрузочный», или «активный», и при загрузке компьютера Master Boot Record считывает Корневую Таблицу разделов, а затем считывает и запускает Boot Record того раздела, который помечен в этой таблице как загрузочный. (Сама Master Boot Record запускается BIOS'ом, запрограммированным считывать с диска и запускать на исполнение содержимое его первого сектора.)

С понятием «раздела» тесно связано понятие "логического диска", использующееся в операционных системах MS DOS и Windows. "Логический диск" — это некоторая часть жесткого диска, представляемая операционной системе как отдельное физическое устройство — как отдельный жесткий диск. При наличии нескольких логических дисков проще организовывать хранение данных, в частности, можно разнести системные файлы и данные пользователя.

Изначально, согласно стандартам, принятым при разработке MS-DOS и впоследствии унаследованными всеми операционными системами типа Windows, в каждом разделе мог быть выделен лишь один логический диск. Однако для увеличения числа логических дисков, могущих быть выделенными на винчестере, в те же стандарты была добавлена возможность создания так называемого Расширенного раздела DOS.

Структура этого Расширенного раздела DOS такова. В его первом секторе расположена Таблица Разделов Расширенного раздела DOS с точно такой же структурой, как и Корневая Таблица Разделов. Только описываются в ней координаты начала и конца первого логического диска в этом Расширенном разделе (точно так же, как и каждого раздела в Master Boot Record), его тип файловой системы, а также координаты начала и конца зоны, занимаемой остальными логическими дисками, если они есть. Соответственно в первом секторе зоны остальных логических дисков находится Таблица Разделов с информацией о втором логическом диске, расположенном в Расширенном разделе Dos, и зоне, занимаемой следующими за ним дисками. В итоге получается как бы ряд вложенных друг в друга, как матрешки, разделов, в каждом из которых имеется по Таблице Разделов, описывающей координаты одного логического диска и зоны, занимаемой следующими дисками. Такая структура может показаться сложной, но только она дает возможность совместить большое количество логических устройств и ограниченный размер Таблиц Разделов.

Все изложенное проиллюстрировано на рис. 8.6.

Рис. 8.6. Структура жесткого диска, на котором в MS-DOS или Windows выделено несколько логических дисков.

Операционные системы MS-DOS и Windows допускают создание на жестком диске лишь одного Расширенного раздела DOS. Остальные разделы при этом могут содержать не более одного логического диска (то есть границы этих дисков попросту совпадают с границами разделов) и именуются Первичными разделами DOS.

В начале каждого логического диска размещается его Загрузочная запись ("Boot Record"), содержащая в себе информацию о размерах кластера на данном диске, а также о местах начала и конца обеих копий FAT, если на этом диске используется именно такая файловая система. Если логический диск является загрузочным (а это возможно в том случае, если он расположен в Первичном разделе DOS, помеченном в Корневой Таблице Разделов как активный, — в этом случае Master Boot Record загрузит Boot Record именно этого диска в память и запустит ее), то в его Boot Record содержится также и программа, обеспечивающая считывание файлов операционной системы, отвечающих за ее начальный запуск. Эта программа может считывать лишь определенные секторы диска (обычно, хоть и не обязательно, находящиеся сразу за корневым каталогом), поэтому и файлы начального запуска операционной системы обязательно должны располагаться в местах, известных BootRecord.[21]

На логических дисках, не являющихся загрузочными (например, расположенным в Расширенном разделе Dos), Boot Record служит просто для хранения информации о файловой системе.

Для разбиения нового жесткого диска на разделы часто используется программа Microsoft FDisk, входящая в состав MS-DOS и Windows 9x. При работе FDisk создаются Таблицы Разделов и все Загрузочные записи.

Если вы подготавливаете с помощью FDisk к работе новый чистый жесткий диск, единственный в компьютере, то FDisk следует скопировать на загрузочную дискету (вы можете найти эту программу в Windows 95/98 в подкаталоге Command папки, где установлена Windows) при ее изготовлении, а затем загрузиться с этой дискеты и запустить программу. После запуска FDisk вы увидите вопрос о включении поддержки больших дисков. Согласившись на ее использование, вы сможете создавать разделы с файловой системой FAT32. Сделать это стоит. Затем вы перейдете в основное меню программы (рис. 8.7), после чего можете выполнять разбиение диска. Интерфейс у программы достаточно понятный, так что работать с ней легко, если, конечно, знать о значении всех терминов.

Рис. 8.7. Microsoft FDisk

После окончания работы fdisk не забудьте отформатировать полученные логические диски командой format (из них диск С: — как системный: format C: /s). Все — жесткий диск готов для установки на него операционной системы.

Например, сначала на пустом диске выделите Primary Dos Partition — основной раздел DOS размером в 2–4 гигабайта. Все остальное место отведите под Extended DOS Partition — дополнительный раздел DOS, если вы, конечно, не собираетесь работать с Unix или Linux. В Extended DOS Partition выделите 3–5 логических дисков обьемом до 2 гигабайт, а остальное отведите под один большой диск.

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

У программы FDisk есть также некоторые неявные параметры, которые могут иногда помочь восстановить работоспособность компьютера. Скажем, некоторые вирусы в результате своей деятельности уничтожают содержимое Master Boot Record, и компьютер перестает загружаться, так как не может найти и использовать Корневую Таблицу Разделов (ведь именно это делает программа, записанная в Master Boot Record). Исправить эту ситуацию можно, загрузив компьютер с дискеты, содержащей FDisk, и введя команду fdisk/mbr. Если у вас два или больше жестких дисков, то ключ должен выглядеть как /cmbr <номер диска> для восстановления загрузочной записи на соответствующем устройстве.

Возможности FDisk по работе с диском несколько ограничены — в частности, она умеет выделять только один Первичный раздел DOS на одном жестком диске. Поэтому на дисках, подготовленных с помощью FDisk, присутствуют лишь Первичный раздел DOS, содержащий загрузочный логический диск (по традиции обозначаемый буквой С) и Расширенный раздел DOS, содержащий цепочку логических дисков. Программа Disk Administrator, входящая в состав Windows 2000/XP, является более мощной и позволяет использовать Корневую Таблицу Разделов по максимуму, создавая на диске до 4 Первичных разделов DOS.

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

Если на жестком диске уже есть информация, но его разбиение на логические диски вас не устраивает, то его можно изменить с помощью той же Partition Magic. Эта программа самостоятельно перестроит структуру диска, не стирая данные. Существует много специальной литературы об эффективной работе с ней, в том числе и книг, так что если интересуетесь, почитайте их или ознакомьтесь с ее Руководством пользователя. Partition Magic также может использоваться вместо FDisk или Disk Administrator, так как ее интерфейс удобнее, а сама она работает быстрее, чем упомянутые программы.

Размеры и обьемы

Размер одного кластера определяется размером логического диска и установленным типом файловой системы. Операционные системы MS-DOS, Windows 3.11 и первые версии Windows 95 могли работать лишь с файловой системой FAT16. Размер одной записи в FAT16 (содержащей номер следующего кластера файла), как уже было сказано, составляет 16 бит. Поскольку 2 в 16-й степени составляет 65536, то и количество номеров кластеров, а, следовательно, и самих кластеров при использовании 16-разрядной таблицы размещения файлов на одном логическом диске не может быть больше 65536. Так как максимальный размер кластера в FAT16 согласно стандартам может составлять 32 кб (это, впрочем, не фиксированное ограничение), то и максимальный размер логического диска с FAT16 будет 32*65536=2 гигабайта.

Поскольку в FAT16 может адресоваться не более 65536 кластеров, то в ней не может быть больше 65536 записей. При длине одной записи в 16 бит обьем самой FAT16 составит тогда 128 кб.

В файловой системе FAT32 для указания номеров следующих кластеров в файле используется записи длиной в 32 бита. Следовательно, всего в ней может адресоваться 2^32= 4294967296 кластеров. При размере кластера в 32 кб максимальный обьем логического диска с FAT32 составит 2^32*32 кб=131 гб (а размер самой FAT тогда составит 16 гигабайт!), что превышает размеры большинства существующих сейчас моделей винчестеров. Поэтому возможность выделения на логическом диске такого большого количества кластеров используется для того, чтобы уменьшить размер кластера — обычно он для FAT32 составляет 4 кб. Но даже при таком малом размере кластера максимальный обьем логического диска составит 16 гб, поэтому обычно все возможности системы FAT32 не используются и количество кластеров на диске меньше 2^32.

Так как, во-первых, для размещения информации о кластере в FAT32 используется в два раза больше места, чем в FAT16, а, кроме того, количество кластеров при использовании FAT32 бывает куда как больше, чем 65536, например, при размере кластера в 4 кб и размере диска в 8 гб кластеров будет 2147483648, то размер самой 32-разрядной таблицы FAT значительно больше размера 16-разрядной — в данном случае 8 мегабайт против 128 кб. Это, в частности, приводит к тому, что на компьютерах с малым количеством оперативной памяти вся 32-разрядная FAT не умещается в оперативной памяти при ее недостаточном количестве и при работе с файлами операционной системе приходится часто считывать ее нужный фрагмент с диска, что вызывает снижение быстродействия. Кроме того, при большом количестве кластеров таблица FAT занимает весьма много места на диске и тем самым сокращает его полезный обьем, тем более что на диске всегда имеется две ее копии — одна из них резервная. (Именно поэтому обьем установленного в компьютер и отформатированного жесткого диска всегда меньше того обьема, который указывает для него производитель, — потому что некоторую часть диска занимают две копии FAT и некоторая служебная информация.)

С файловой системой FAT32 могут напрямую работать операционные системы Windows (за исключением Windows 3.11 и первых версий Windows95), а также Linux с помощью особых программ.

Информация о типе файловой системы, размере кластера, размере самой таблицы FAT, а также о количестве копий FAT на жестком диске содержится в Boot Record, находящейся сразу перед первой копией FAT.

Проблемы кластерной организации

Потери

Кластерная организация данных на жестком диске, обеспечивая возможность многократного удаления и создания файлов, приводит к двум большим проблемам. Первая — это потери дискового пространства. Так как в подавляющем большинстве случаев размер файлов не кратен размерам кластеров, то последний кластер, помеченный в FAT как принадлежащий какому-либо файлу, оказывается заполненным не полностью. Это место уже не может стать частью другого файла, и поэтому не может быть использовано. Если файлов много, то общее количество такого «потерянного» места становится немалым. Особенно такая потеря проявляется при размещении на жестком диске большого количества мелких файлов, размер которых меньше размера кластера. Так, при размере кластера в 32 килобайта 10 файлов по 3 килобайта займут на жестком диске не 30 килобайт, как могло бы показаться, а 320. В самом крайнем случае для сохранения файла размером один байт операционная система выделит на диске один кластер размером 32 килобайта.

Стоит запомнить, что так как один кластер занимает фиксированный обьем диска (чаще всего это 16 или 32 килобайта) и может содержать не более одного файла, то неизбежны потери пространства диска. Если размер файла меньшеразмера кластера или просто не кратен ему, то в кластере, содержащем этот файл (или окончание файла) останется незанятое пространство.

Информацию о размере кластера и количестве их на диске можно получить, используя программу Scandisk для Windows 95/98 (рис. 8.8).

Рис. 8.8. Информация программы ScanDisk.

Фрагментация

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

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

Пути решения

Путь решения проблемы потерь дискового пространства напрашивается сразу — уменьшить размер кластера. В самом деле, если кластер имеет размер 4 кб, а не 32, то пустого места в нем может остаться в 8 раз меньше, чем при использовании кластеров в 32 кб. Используя FAT16, для этого надо уменьшить размер логического диска (в самом деле, на диске в 1 гигабайт минимальный размер кластера будет 1024*1024/65536=16 килобайт, а на диске в 512 мегабайт — 1024*512/65536=8 килобайт). В FAT32 размер кластера в 4 кб является вполне нормальным и может использоваться на логических дисках размером до 16 гигабайт.

Но даже в пределах имеющейся файловой системы FAT16 можно уменьшить потери дискового пространства. Например, делать файлы большого обьема или, если это невозможно, хранить их в архивах, либо извлекая по мере необходимости, либо используя специальные программы, делающие архивы «прозрачными» для операционной системы, вроде ZipFolders или ZipMagic. Тогда кластеров, не до конца заполненных данными, будет мало. Также можно использовать сжатие дисков (при этом все содержимое диска фактически хранится в одном файле), но это очень опасно в плане надежности хранения.

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

Рис. 8.9. Не правда ли, странно? Как будто капли дождя на стекле.

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

В идеале в конце концов после дефрагментации все файлы на диске должны располагаться в идущих друг за другом кластерах. Однако некоторые системные и служебные файлы операционной системы, в частности, файл виртуальной памяти, располагаются в кластерах, которые не могут быть перемещены. В результате в массив дефрагментированных данных оказываются вкраплены фрагменты таких файлов.[22] Поэтому перед дефрагментацией рекомендуется отключить использование виртуальной памяти, а после нее — установить постоянный размер файла подкачки (Панель управления — Система — Быстродействие — Виртуальная память), чтобы он впоследствии не подвергался фрагментации.

Это — множество мелких файлов, размером меньше кластера, записанных на диск. А получилось так потому, что при записи каждого файла Windows ищет первый блок из 500 кб свободных кластеров и записывает файл в его конец. Именно в конец — чтобы дать возможность расти без фрагментации тому файлу, который находится перед этим блоком.

Проблема выбора

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

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

Также имеется вопрос — а какая файловая система лучше, FAT16 или FAT32? Тут необходимо оценить, что важнее. FAT32 позволяет установить меньший размер кластера и разбивать винчестер на логические диски больших размеров — больше 2 гигабайт. Но при этом сама 32-разрядная таблица FAT занимает больше места на диске, труднее кэшируется, а файлы, записанные на диске с малым размером кластера, сильнее фрагментируются, что может привести к меньшему быстродействию FAT32 по сравнению с FAT16. Кроме того, с FAT32 не могут работать ни MS DOS, ни Windows NT. Что здесь выбрать — решать вам.

Стоит запомнить:

При установке размера кластера приходится делать выбор между быстротой с надежностью и экономичностью. Большой размер кластера — не так плохо, как кажется. Чем больше размер кластера, тем больше потери дискового пространства из-за того, что в кластерах остается незанятое место — но и тем меньше фрагментация файлов, ведь количество фрагментов-кластеров, на которые может быть разбит файл, меньше, чем при меньшем размере кластера! Так что тут стоит выбирать — либо согласиться с потерями свободного места (и бороться с ними путем использования ZipFolders и других программ — архиваторов "на лету"), либо терпеть неизбежную фрагментацию файлов (и регулярно запускать программу дефрагментации).

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

Бороться с потерями дискового пространства на мелких файлах при больших кластерах можно архивированием и использованием программ, делающих архивы "прозрачными".

Бороться с фрагментацией файлов при малом размере кластера можно только регулярной дефрагментацией диска.

Путаница

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

При нормальном режиме работы все эти мероприятия выполняются вполне корректно. Однако при аварийном завершении работы операционной системы (которое произойдет, скажем, при нажатии кнопки Reset во время записи файлов на диск) может возникнуть несоответствие между содержимым диска, FAT и каталога. Например, файл помещен на диск, в FAT расписана его кластерная структура, а в файле каталога остался его старый размер. Это, впрочем, не так опасно — просто, возможно, некоторые программы не смогут с ним работать. Но может также возникнуть путаница и в FAT, а вот это уже значительно хуже.

К примеру, операционная система поставила в записи FAT, относящейся к одному из кластеров, ссылку на другой кластер, содержащий продолжение файла, а вот пометить этот кластер с продолжением как занятый (поместив в соответствующую запись FAT либо ссылку на следующий кластер файла, либо символ конца файла) не успела — произошла перезагрузка или отключение компьютера.

В итоге кластер оказался помеченным в FAT как свободный, и при записи на диск следующего файла (после новой загрузки операционной системы) он был для него использован. В итоге этот кластер стал принадлежать сразу двум файлам — сделался общим. Ясно, что в итоге в кластер будут записываться попеременно данные для обоих файлов, что испортит и те, и другие.

Или другая ситуация: при записи нового файла операционная система для него отвела в FAT цепочку кластеров, а в каталог записать информацию о номере его первого кластера не успела. В итоге отведенные кластеры стали потерянными — и не пустые, и не принадлежащие какому-либо файлу. Данные в них, если все же оказались записанными, стали недоступными.

Все описанные ситуации могут серьезно затруднить работу с файлами. Общие кластеры приводят к потерям данных, а потерянные — к трате свободного места и утере их содержимого. Чтобы исправить подобные ошибки файловой системы, используются программы для проверки дисков — например, ScanDisk из поставки Windows или Norton Disk Doctor из комплекта Norton Utilities. Эти программы анализируют FAT и структуру каталогов, и в случае обнаружения потерянных кластеров сохраняют их в отдельные файлы, а общие кластеры копируют для каждого из их файлов.

Много интересных материалов об устройствах различных файловых систем и их характеристиках можно найти на сервере www.ixbt.ru, в разделе http://www.ixbt.ru/storage[23] ].

Об удалении файлов и восстановлении данных

Когда выполняется команда удаления файлов с жесткого диска (в Windows это происходит при очистке «Корзины», так как при простом удалении файлов с помощью команды «Удалить» или кнопки Delete файлы перемещаются в «Корзину», а не удаляются), то сама информация, находящаяся в ячейках жесткого диска, не уничтожается. Выполняется лишь пометка в FAT кластеров, ранее занимаемых этим файлом, как свободных, а в файле каталога, в котором этот файл находился, первый символ имени заменяется на знак"!". Так как длинные имена файлов хранятся в файле каталога отдельно от настоящих имен, то они в этом случае сохраняются.

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

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

Поэтому программы восстановления удаленных файлов (к примеру, Norton UnErase Wizard) просто обьединяют в одном файле определенное число последовательных свободных кластеров (соответствующее записанному в файле каталога размеру удаленного файла) и именуют результат названием удаленного файла. Пример того, что получается — на рис. 8.10.

Рис. 8.10. Результат работы Norton UnEraze.

Этот текстовый файл snakecor.txt размером в 40 килобайт был удален, а потом восстановлен с помощью Notron UnErase Wizard, который нашел в файле каталога, где snakecor.txt находился, его имя с знаком"!" впереди, узнал оттуда размер файла и номер первого кластера, занимаемого файлом, а потом обьединил содержимое этого и следующего свободного кластера. Но, увы, программе и пользователю не повезло — изначально файл snakecor.txt был фрагментирован и в восстановленный файл попал фрагмент другого ранее удаленного файла, а не тот, который был нужен.

Что такое Unformat

При форматировании жесткого диска очищается таблица FAT (в ней все кластеры помечаются как свободные) и корневой каталог — из него удаляется вся информация о содержащихся в нем файлах и других каталогах. Сами данные на винчестере не стираются. Поэтому их можно восстановить программами типа Unformat. В этом отличие винчестера от дискеты — при проведении полного форматирования дискеты на ней заново записываются и магнитные метки начала секторов, и служебная информация, поэтому после полного форматирования данные на дискете восстановить практически нельзя.[24] "Быстрое форматирование" дискеты по своему принципу аналогично полному форматированию винчестера.

Программа для восстановления данных после форматирования просканирует логический диск и найдет на нем файлы, бывшие некогда каталогами, ориентируясь при этом на типичные последовательности байтов ("метки"), характерные именно для файлов-каталогов. Затем она узнает из этих файлов номера первых кластеров содержащихся в них обычных файлов. К сожалению, информация об остальных кластерах, занимаемых файлами, потеряна навсегда, поэтому Unformat (как и UnErase Wizard), добавит каждому файлу следующие за первым кластером свободные кластеры в количестве, равном занимаемому ранее файлом числу кластеров, и занесет в FAT информацию об этом.

После этого Unformat создаст в корневом каталоге свежеотформатированного диска новые каталоги и укажет в этих каталогах имена и первые кластеры узнанных на предыдущем этапе обычных файлов. В результате в корневом каталоге отформатированного диска появятся папки, содержащие файлы, ранее присутствовавшие на диске. Те файлы, которые занимали меньше одного кластера или при восстановлении которых были обьединены именно те кластеры, которые они раньше и занимали (такое бывает, когда диск был дефрагментирован незадолго до форматирования), будут восстановлены полностью. Остальные — как повезет.

Такая обычная ScanDisk…

Наблюдая за работой всем известной, стандартной программы ScanDisk из Windows 95/98, можно увидеть немало интересного… Конечно, если смотреть внимательно и вдумыватся в то, что видишь.

1. Программа ScanDisk просматривает FAT. Так как вся FAT находится в одном месте диска, то считывается и проверяется она очень быстро. На этом этапе своей работы ScanDisk ищет ошибки файловой системы — общие кластеры, и в случае обнаружении таковых исправляет структуру FAT, копируя эти кластеры для каждого из содержащих их файлов и соответственно изменяя содержимое FAT.

2. А теперь ScanDisk проходит по структуре каталогов — то есть считывает все файлы-каталоги, проходя по их иерархии. Это связано с необходимостью многократного перемещения головок жесткого диска, поскольку эти файлы расположены в разных местах диска. Поэтому времени на "Проверку папок" уходит немало. На этом этапе также собираются данные для последующего анализа диска на предмет наличия потерянных кластеров — помеченных как занятые, но не принадлежащих ни одному из файлов. Сам этот анализ происходит сразу после "Проверки папок". Потерянные кластеры могут быть преобразованы в файлы или удалены.

3. Системная область — это область, занимаемая FAT. Ониа находится в начале логического диска. В те секторы, которые FAT занимает, данные пользователя записывать нельзя, а повреждение здесь приведет к потере и расположенных на диске файлов, так как операционная система не сможет их найти.

4. Проверяется область данных пользователя на предмет поврежденных секторов. В случае обнаружения таковых в FAT будут занесены соответствующие указания.

DiskEditor

Это редактор содержимого диска, разработанный нашими соотечественниками — компанией ФизТехСофт. Он позволяет просматривать содержимое диска не средствами операционной системы, а "на физическом уровне" — побайтово, то есть смотреть, что записано в каждой электронной ячейке диска, в каждом его секторе. Вот, как, к примеру, выглядит корневой каталог логического диска — смотрите рис. 8.11, или FAT — рис. 8.12. Разобраться в хитросплетении кодов, конечно, сложно… Одно радует — операционная система делает это автоматически, а мы этого даже не замечаем.

Рис. 8.11.Это — корневой каталог диска, отображенный в DiskEditor'е. Именно так он выглядит на уровне дорожек, секторов и битов.

Основное предназначение DiskEditor'а — помощь в восстановлении информации на жестком диске в случае поражения его вирусом или повреждения служебной информации. Поэтому, как вы, наверное, заметили из рисунков, в DiskEditor'е возможны два представления информации — шестнадцатиричный (слева) и текстовый (справа).

Рис. 8.12. Святая святых диска — таблица FAT. Вот что это такое в реальности…

В случае печальной необходимости восстановления винчестера можно запустить DiskEditor с дискеты. Имеется возможность создать загрузочную дискету специально для DiskEditor'а, для чего в комплекте редактора есть специальная программа, инсталлирующая на дискету сокращенную версию операционной системы PTS-DOS, позволяющую загрузиться с этой дискеты и работать с DiskEditor'ом. Шестнадцатиричное представление информации удобно использовать для восстановления программного кода загрузочных секторов диска, ну, а текстовое представление поможет вам все-таки вытащить нужную информацию с диска (рис. 8.13). Правда, только представленную в формате простого текста или HTML и только за один прием из одного кластера (второй по всему диску искать придется), но все же хоть что-то…[25]

Рис. 8.13.Слева — вот файл с так нужными мне данными, который был на погибшем диске. Справа — DiskEditor нашел его на поверхности диска.

О старых BIOS и о больших дисках

Представим себе следующую ситуацию.

Наконец наступил долгожданный день, и компьютер, который у вас уже три года, дождался обновления. Пошли вы на рынок, купили новый большой винчестер. Ставите его в компьютер… и — что это, BIOS его не определяет! Ладно, вручную ставим параметры… но второй диск, новый, большой, свежекупленный, не виден из MS-DOS! Причем FDisk его распознает. Неужели вам продали некачественную вещь?

Несете его к другу, подключаете… Все видно, все форматируется. Ставите себе снова. Из MS-DOS не виден, из Windows виден. Весь.

Итак, диск исправен. Но в чем же причина таких чудес?

В устаревшем BIOS. Старые версии BIOS (выпущенные до 1999 г.) не позволяют работать с винчестерами емкостью больше 8 гигабайт, — о причинах этого рассказано выше. Системы же семейства Windows используют свои программы-драйвера для работы с винчестерами, поэтому ограничение в 8 гигабайт на них не распространяется. Однако сначала они должны загрузиться, а при загрузке волей-неволей приходится использовать средства BIOS для работы с винчестером. А это-то невозможно…

Иногда диски большой емкости на машинах со старым BIOS'ом все же видны, но работать из через BIOS можно только с их первыми 8-ю гигабайтами (именно с такими ситуациями были связаны случаи отказа загрузки WindowsNT, размещенной на логическом диске емкостью больше 8 гигабайт, после очередного обновления системных файлов — они оказывались за пределами восьмигигабайтной зоны и загрузчик NT, работающий с диском через BIOS, не мог тогда их прочитать).

Пути решения описанной проблемы, помимо приобретения новой материнской платы с более совершенным BIOS'ом (а это все платы для Pentium II, III, IV, Celeron, Duron, Athlon, а также платы для Pentium I на чипсетах Ali Aladdin, Via MVP3 и Via MVP4), могут быть такие.

1. Использовать специальные программы работы с большими дисками на компьютерах о старым BIOS'ом. Например, "Ontrack Disk Manager" — она записывает в загрузочную область диска особую программу, подменяющую функции BIOS. В большинстве случаев вы можете найти подобную программу на сайте производителя винчестера (иногда она называется «EZDrive» или как-то еще). Существует универсальный вариант этой программы, по идее подходящий для всех моделей жестких дисков — поищите его на сайте фирмы Ontrack: http://www.ontrack.com.

2. Установить в компьютер (на первый канал IDE как Master) жесткий диск размером до 8 гигабайт и установить на него операционную систему Windows (или Linux). После этого большие диски, устанавливаемые в компьютер дополнительно, будут доступны именно из среды этой операционной системы, так как современные операционные системы используют для работы с жесткими дисками свои программы-драйвера. Из MS-DOS установленные большие диски видны не будут.

3. Перепрошить BIOS материнской платы. О том, как это сделать и какие "подводные камни" могут встретиться на этом пути, рассказано в 25-й главе этой книги. Стоит лишь добавить, что на сайте производителя платы в этом случае следует искать прошивку, в перечне нововведений в которой указано что-то вроде " Support INT13 Extensions".

К сожалению, ваши старания могут и не увенчаться успехом — если ваша материнская плата очень старая и сам контроллер жестких дисков не поддерживает большие их обьемы. Если даже использование дополнительного небольшого жесткого диска с Windows не позволит получить доступ к установленному вместе с ним большому (т. е. обьемом больше 8 гигабайт), то единственный выход — замена материнской платы.

Иногда встречаются и другие ограничения на обьем диска, связанные с особенностями BIOS конкретной модели материнской платы, — например, некоторые старые материнские платы производства Asus (и некоторых других производителей) могут работать лишь с первыми 32 гигабайтами обьема диска. Пути обхода подобных ограничений такие же, как указаны выше — перепрошивка BIOS, программа EZDrive, дополнительный жесткий диск.

Подсчитаем…

Чтобы оценить реальный размер папки согласно количеству занимаемых ее файлами кластеров, а не размер содержащихся в этих файлах собственно данных, в Windows 98/2000/XP можно использовать окно "Свойства папки" (пункт «Свойства» меню правой кнопки мыши выделенной папки). То число, которое стоит перед словом «занято», и показывает этот реальный размер. Однако для оценки величины занимаемого места большим количеством папок использовать это окно не так и просто. Поэтому существуют специальные программы, основное предназначение которых — помочь пользователю оценить реальный размер папок и файлов. Такие программы могут быть весьма полезны, когда необходимо оценить, какие файлы и какие папки действительно занимают больше места на винчестере и станут первыми в очереди на архивацию или удаление. Также они пригодятся в Windows95, где окно "Свойства папки" не предоставляет информации о занимаемом ею месте. Кроме того, эти программы часто имеют еще и дополнительные функции наблюдения за диском, поиска файлов и т. д. Расскажем о некоторых их них.

Сканер диска

Программа «Scanner» (рис. 8.15), написанная немцем Стефаном Герлачем, отображает в виде круговой диаграммы содержимое Вашего жесткого диска, при этом оценивая реально занимаемое файлами место. Так, папка с 300 файлами по 10 килобайт будет отображаться как имеющая размер 9600 килобайт (если у Вас кластер занимает 32 килобайта), то есть занимающая почти 10 мегабайт. Можно оценить, какие файлы у Вас занимают больше места, — чтобы для увеличения свободного пространства на диске архивировать или удалять именно их.

Рис. 8.15. Программа Scanner.

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

Загрузить программу можно с сервера www.freeware.ru или с сайта автора http://www.steffengerlach.de/ freeware. Программа бесплатная.

Folder Size Shell Extensions (DFolder)

Программа Dfolder интегрируется в стандартное окно "Свойства папки" как дополнительная закладка и при своем вызове выводит отчет о занимаемом этой папкой и вложенными в нее папками реальном месте на диске — с учетом всех занятых содержимым папки кластеров (рис. 8.16).

Рис. 8.16. Вся папка — как на ладони. Не правда ли, удобно?

Программа допускает различное представление информации о занимаемом папками месте на диске — от байт до гигабайт. Отчет программы можно вывести в отдельный файл, и тогда для каждой папки еще будет указан процент "потерянного места" — какую долю от обьема реальных данных в папке занимает совокупный обьем незаполненных фрагментов кластеров, в которых эти данные находятся. В итоге можно разобраться, какие папки и файлы занимают места на диске гораздо больше, чем их собственный размер. К примеру, папка Cursors занимает места в 20 раз больше, чем содержит реальных данных. На основании полученной информации можно принять решение о том, какие папки стоит удалять или архивировать для освобождения места на винчестере, а какие — лучше оставить.

Создана эта бесплатная программа французом Лоренцом Бергером, а загрузить ее можно с адреса http://perecod.chat.ru/ dfolder.rar.

Следы на песке

Если вы будете просматривать структуру жесткого диска с помощью программы DiskEditor, то вас наверняка заинтересует, каким образом можно найти на диске тот или иной описанный выше его компонент. Скажем, Master Boot Record или FAT. А сделать это можно, используя сигнатуры — последовательности байт, характерные для того или иного компонента файловой системы.

К примеру, в самом конце Master Boot Record находится сигнатура 55AAh (так в шестнадцатиричном представлении: собственно эта сигнатура занимает два байта). По ней можно найти конец Главной Загрузочной Записи. Строго говоря, в первом секторе винчестера сначала располагается Partition Table, а лишь потом — Master Boot Record. Но это важно лишь при изучении структуры диска с помощью просмотра содержимого магнитных ячеек или при восстановлении данных на жестком диске.

Boot Record каждого логического диска с файловой системой FAT можно найти, ориентируясь на всегда присутствующую в ней строку «MSWIN4» (в текстовом представлении). FAT всегда начинается с последовательности шестнадцатиричных цифр F8 FF FF FF.

Заключение

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

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

Весьма интересной и полезной является тема восстановления информации на жестком диске после вирусной атаки или ошибки операционной системы. Ей посвящено немало публикаций, как в Интернете (например, на сервере www.ixbt.ru), так и в периодической печати. Информация, приведенная в этой главе, поможет вам понимать их.

Да и в любом случае — весьма полезно знать, как работает то, с чем сталкиваешься каждый день…

Глава 10. Порты. Прокси. Файерволл

Когда большинство пользователей компьютерных технологий видят слово «порт», то обычно с ним ассоциируются такие аббревиатуры, как COM, LPT, PS/2. То есть — попросту названия «гнезд», куда можно присоединить какие — либо периферийные устройства вроде сканера, принтера или модема. Разные типы таких портов предоставляют разные возможности и предназначены для работы с различными устройствами, подключаемыми к персональному компьютеру. Но при чтении литературы, описывающей работу в сети Интернет, при работе с программами для этой сети становится ясно, что слово «порт» имеет не только это, привычное всем, значение. Но какое же конкретно? И что, например, означает поле "номер порта", встречающееся почти во всех окнах настройки прокси-серверов (рис. 10.1)?

Рис. 10.1. Номер порта.

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

Представим себе Интернет как большой город, состоящий из домов-компьютеров. Если адресом дома в такой аналогии будет служить IP-адрес, выделяемый компьютеру, то порт будет служить адресом квартиры. Каждый пакет данных имеет в себе адрес дома — IP компьютера, которому он предназначен. По этому адресу происходит маршрутизация пакета при его передаче от компьютера-сервера к компьютеру-получателю. Квартиры в доме-компьютере могут быть заняты (а могут и не быть) различными программами. И внутри этого дома маршрутизация происходит именно по номерам квартир-портов. Заведует этим всем операционная система — выделяет программам порты и распределяет приходящие пакеты по ним. Впрочем, точнее будет сказать, что все запущенные программы, предназначенные для работы с ресурсами Интернета, из всех пакетов данных, приходящих на компьютер, как бы «выбирают» те, которые адресованы именно им.

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

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

Различные порты различаются одним — своим номером. Всего возможных номеров портов весьма много — тысячи. Однако некоторые номера портов традиционно присвоены вполне определенным сервисам. К примеру, программа-web-сервер (то есть программа, которая может отвечать на запросы с удаленного компьютера, выдавая для просмотра документ Html и все файлы, которые из него вызываются) отвечает на запросы с указанием порта 80. Программа — Ftp-сервер, выдающая по запросу пользователя файлы, отвечает на запросы, в которых указано, что они посланы на порт 21. Иными словами, когда, скажем, ваш браузер запрашивает сервер, скажем, www.duel.ru, то он посылает пакет данных на порт 80 компьютера с IP-адресом, соответствующим www.duel.ru, а в пакете указывает номер своего порта, выделенного ему операционной системой. Сервер www.duel.ru, получив пакет, посылает на компьютер с запросившим его браузером пакет данных, адресуя его тому порту, с которого был прислан запрос. Операционная система, увидев по заголовку пакета, какому порту адресован пакет, отдаст его в браузер, который его обработает по собственному усмотрению.

Поэтому пакет данных, предназначенный, скажем, браузеру, не попадает в почтовый клиент, и наоборот.

Какие же выводы следуют из всего вышеизложенного?

На компьютере, основная задача которого — выдавать информацию в Сеть по запросам, может одновременно быть запущено сразу множество программ: web-сервер для выдачи web-страничек, ftp-сервер для скачивания файлов, почтовый сервер и др., причем у этого компьютера будет лишь один IP-адрес, по которому к нему будут обращаться с запросами и на загрузку файлов, и на просмотр сайта, и на работу с почтой. Каждая программа работает с запросами, приходящими к ней, по своему порту: web-сервер — по 80-му, Ftp-сервер — по 21-му и др. Браузерам, Ftp-клиентам вроде CuteFtp, почтовым клиентам номера портов выделяются операционной системой того компьютера, на котором они запущены. Номер порта, по которому работают эти серверы, указывается в их настройках.

Нетрудно понять, что в том случае, если web-сервер будет настроен на работу, скажем, по 81-му порту, то ни один браузер просто так связаться с ним не сможет. В многих программах, предназначенных для работы с ресурсами Интернет, есть возможность задавать номер порта, с которого сервер Интернета будет этой программе отвечать в том случае, если он настроен на работу с другого порта (рис. 10.2).

Рис. 10.2. Здесь настраиваются номера портов в почтовом клиенте The Bat!.

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

Если проводить еще одну аналогию для лучшего восприятия, то можно себе представить порт как некую «радиочастоту», а каждую программу — как приемник для этой частоты. Чтобы программа могла услышать запрос, надо настроиться на ее «радиочастоту» — послать запрос на этой частоте, а в запросе сообщить, на какой частоте она должна выйти на связь с тем, кто ее запросил.

Далее. С системой портов тесно связана такая система защиты, как "файерволл".[26] Файерволлом называется программа, которая обеспечивает санкционированность всей информации, приходящей или уходящей с компьютера. К примеру, при отправке почты используется порт 25, а при получении — порт 110. С этими портами работает почтовая программа. Если же какая-нибудь другая программа, например, вирус-троян,[27] попытается связаться с чем-либо по этому порту, то файерволл не даст ей это сделать. Кроме того, файерволл не позволяет осуществить связь с удаленным компьютером по какому-либо порту, если это не разрешил пользователь. Перед началом использования файерволла производится его настройка — то есть указание номеров портов, через которые может идти обмен данных, и программ, которые с этими портами работают. В современных файерволлах настройка может пройти и автоматически.

Иными словами, если, к примеру, с компьютера собирается отправиться пакет данных, то файерволл посмотрит, какая программа его отправляет, и по какому порту, и на какой порт. И в случае, если эти данные не будут соответствовать указанным в первоначальных настройках файерволла, то он забьет тревогу: либо запретит вообще отправку этого пакета, либо запросит пользователя о возможных действиях (смотря как настроить). Если на компьютер пробралась программа-троян, отсылающая, скажем, пароли пользователя куда бы то ни было, то она не сможет воспользоваться ни одним портом, да и вообще не сможет осуществить отправку данных, так как файерволл ее распознает (так как она, естественно, не будет входить в список разрешенных) и запретит ей доступ к Интернету. Также — и при приходе пакета: пропускаются лишь те пакеты, которые адресованы разрешенным программам — на разрешенные порты. Если же пакет приходит на адрес порта, которого нет в списке разрешенных, то ему в доступе отказывается.

Обеспечение безопасности компьютера от «взлома» извне тоже тесно завязано на управлении системой портов. На компьютере постоянно запущено множество программ. И не исключено, что при обращении к какому-либо порту какая-либо программа возьмет и ответит на запрос, да еще и проигнорировав какую-либо авторизацию доступа. Это — так называемая «дыра» в программе, за что ее авторов нещадно бьют. В другом случае операционная система, воспринимая данные по какому-либо порту, может попросту «повиснуть» — опять-таки из-за ошибки в ее программе. Так, до появления третьего Service Pack к Windows NT приход на компьютер с этой операционной системой пакетов данных, адресованных на 139-й порт, происходила либо перезагрузка Windows NT, либо ее «зависание». ("Дыры" могут быть основаны и на совсем других принципах — не только на системе портов, просто "дыра через порт" — один из многочисленных вариантов "дыр".)

Порты у компьютера можно «прослушать» — то есть послать на него пакеты данных, адресованные на все порты подряд, и ждать ответа хоть от какого-нибудь порта. Если с какого-либо порта придет ответ, то это значит, что с этим портом можно попробовать договориться — попытаться заставить работать программу, заведующую этим портом, в своих целях. Просканировать порты можно, например, с помощью программы Internet Maniac (рис. 10.3).

Рис. 10.3. Вот так сканируются порты. Это пример — а при настоящей хакерской атаке можно было бы и «дыру» отловить, да и самому попасться — зависит от умения обоих сторон.

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

Поскольку любой сложный программный комплекс включает в себя тысячи строк кода и множество функций, многие «дыры» в нем выявляются не сразу. К примеру, в Windows NT изначально «дыр» было предостаточно. Обычно в случае, если в программе выявляется «дыра», ее производитель выпускает специальное обновление, ее закрывающее. Такие обновления распространяются через Интернет. Особенно преуспела в закрытии своих «дыр» компания Microsoft, под обновления систем безопасности ее продуктов отведен целый большой раздел на ее сервере, что, впрочем, неудивительно — уж больно большие и сложные программы она выпускает.

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

* * *

При подключении к Интернету компьютеру выделяется провайдером постоянный или динамический IP-адрес (последний — в случае сеансового подключения, когда при каждом новом сеансе IP-адрес дается новый). Те пакеты данных, которые предназначены этому компьютеру, маршрутизируются в Сети именно по этому IP-адресу.

Но если к Интернету подключен компьютер, который в свою очередь является частью локальной сети, и необходимо обеспечить доступ к Web c остальных ее компьютеров, то возникает проблема. Заключается она в том, что выделенный для компьютера, имеющего доступ в Сеть, а значит, и фактически для всей этой сети IP-адрес — один, а компьютеров много, — и как тогда распределять пришедшие пакеты по компьютерам? Ведь пришедшие пакеты будут иметь одни и те же IP-адреса получателей.

Поэтому используется межсетевой шлюз — такая программа, которая как бы собой «подменяет» Интернет для локальной сети и локальную сеть для Интернета. Получив запрос от одного из компьютеров локальной сети, скажем, на загрузку web-страницы, она запоминает, от какого компьютера пришел этот запрос, и делает запрос в Интернет на загрузку той же страницы, но уже от своего имени и от имени и с IP-адреса того компьютера, на котором установлен прокси-сервер. Когда запрошенная страница загружается межсетевым шлюзом, она передается по локальной сети тому компьютеру, с которого был сделан запрос.

Обмен данными между компьютерами локальной сети и межсетевым шлюзом происходит по тому же протоколу, что и обмен данными во всем Интернете — TCP/IP. Поэтому в локальной сети каждый компьютер имеет свой внутренний IP-адрес, по которому с ним могут общаться другие компьютеры, в том числе и прокси-сервер. Межсетевой шлюз имеет два IP-адреса: для «своих» — тот, который присвоен ему в локальной сети, и для Интернета — тот, который присвоен ему провайдером.

Такой шлюз может быть и между двумя локальными сетями — принцип тот же: у компьютера два адреса — по одному из каждой сети

Внутренние IP-адреса полагается брать из диапазона 192.168.xxx.xxx, — чтобы не было совпадения с каким-либо из существующих в Интернете. Иначе при попытке обратиться к серверу с таким же IP-адресом пользователь будет попадать на компьютер своей же локальной сети. Диапазон 192.168.xxx.xxx специально зарезервирован для использования внутри локальных сетей, и в свободном доступе серверов с адресами из него нет (это невыгодно в первую очередь самим владельцам серверов — ведь иначе на их сервера попасть из любой локальной сети, в которой есть компьютер с таким же IP-адресом, будет невозможно).

Обычно межсетевой шлюз между локальной сетью и Интернетом выполняет еще две важные задачи и называется поэтому прокси-сервером. Во-первых, он кэширует данные — все web-страницы, хоть раз запрошенные с одного из компьютеров локальной сети, на прокси-сервере сохраняются (некоторое время — зависит от настроек прокси-сервера). Поэтому работа с Интернетом через прокси-сервер может идти несколько быстрее, чем без него (при прямом подключении), так как раз загруженные страницы будут грузиться с прокси-сервера, а не из Сети. Также при наличии прокси-сервера затруднено проникновение на компьютеры локальной сети из Интернета по сравнению с той ситуацией, когда каждый компьютер имеет свой IP-адрес для работы в Сети, то есть, во-вторых, прокси-сервер обеспечивает "защиту от взлома". И, с другой стороны, при работе с ресурсами Интернета из такой локальной сети через прокси-сервер «выследить» компьютер будет практически невозможно — максимум, что можно будет узнать, так это адрес прокси-сервера.

Поскольку прокси-сервер в таком случае фактически играет роль "универсального Интернет-сервера" для всех компьютеров локальной сети, то для работы с ним необходимо указать его «координаты» в настройках программ для работы с Интернетом. К примеру, в браузере Microsoft Internet Explorer 5.0 это делается в пункте Сервис — Свойства обозревателя — Подключение — Настройки локальной сети — Прокси-сервер. К прокси-серверу компьютеры должны обращаться по какому-либо порту. По умолчанию для такой работы выделяется порт 80, но тут есть одна особенность — если на компьютере, на котором запущен прокси-сервер, запущен также и web-сервер для обеспечения доступа из Интернета к сайту, расположенном на этом компьютере, то 80-й порт будет использоваться именно для этого web-сервера, и тогда прокси-сервер придется настраивать для работы по другому порту. Соответственно надо будет настроить и программы для работы с ресурсами Интернет.

Строго говоря, для того, чтобы работать через прокси-сервер, не обязательно быть подключенным именно к его локальной сети. Если необходимо использовать возможность кэширования web-страниц или защищаться от взлома (или выслеживания), то можно настроить свой компьютер на работу с каким-нибудь прокси-сервером не из его локальной сети, а из Интернета, просто указав его интернетовский IP-адрес (конечно, если он постоянный). Тогда для прокси-сервера этот компьютер станет как бы частью его локальной сети, и все преимущества работы через прокси-сервер станут доступны. Можно также использовать прокси-сервер лишь для работы с web-страницами (то есть по протоколу HTTP), а по всем остальным протоколам работать без него. Для этого надо опять-таки особым способом настроить браузер — в Microsoft Internet Explorer 5.0 (рис. 10.4) для этого служит вкладка «Дополнительно» окна "Настройки локальной сети" (путь — см. выше). Это имеет смысл, когда прокси-сервер работает недостаточно быстро, и выигрыш в скорости получается лишь для web-страниц за счет их кэширования.

Рис. 10.4. Окно настроек использования прокси-серверов в браузере Microsoft Internet Explorer 5.0.

Разумеется, администратор прокси-сервера может и запретить доступ к нему извне своей локальной сети, если он не заинтересован в такой повышенной нагрузке на него. Обычной является практика, когда провайдер услуг Интернета предоставляет свой прокси-сервер только тем, кто подключается через его доступ (информация о том, через какого провайдера подключился пользователь, может получаться на основе IP-адреса этого пользователя). В этом случае его клиенты имеют возможность выбора — пользоваться прокси-сервером или нет. В Интернете есть и общедоступные прокси-сервера, с которыми могут работать все желающие, но их список часто меняется.

Некоторые пользователи Интернета даже устанавливают прокси-сервер на своем компьютере исключительно из-за хорошей системы кэширования данных. Наиболее известными прокси-серверами для небольших сетей на настоящее время являются программы WinGate и WinProxy, которые можно найти на подавляющем большинстве компакт-дисков, посвященных работе в Интернет.

Полезные советы

· Если вы идете в Интернет-салон и желаете пользоваться там своими «закладками», сделанными вами в вашем браузере, или просто хотите отправить другу содержимое своего «Избранного», то не возитесь с ярлыками из одноименной папки — просто выберите (в Microsoft Internet Explorer 5.x) пункт "Файл"-"Импорт и экспорт" и проследуйте по ряду диалоговых окон. Автоматически будет создана web-страница, в которой поместятся гиперссылки на все сайты, присутствующие в вашем "Избранном".

· Не забывайте об имеющейся во многих почтовых клиентах возможности создавать папки для хранения почтовых сообщений. Никогда не оставляйте сообщения, которые не требуют скорой реакции, в папке входящих писем! Иначе вскоре вы рискуете полностью потерять возможность сколько-нибудь быстро в них ориентироваться. Создайте по папке для писем на каждую тему и после прочтения письма или написания на него ответа перемещайте его в нужную папку. В Outlook Express для создания новой папки нужно выбрать соответствующий пункт из меню правой кнопки мыши, выделив название любой из существующих папок.

· Если вам необходимо пообщаться с кем-либо по Сети в реальном времени, то не используйте программы типа ICQ или IRC, которые имеют очень низкий уровень защиты от внедрения вирусов или целенаправленных атак через Сеть. Лучше заведите гостевую книгу (это web-страница, на которую любой ее посетитель может помещать свой текст, который будет сразу же там отображаться), например, на www.guestbook.ru или www.chat.ru, сообщите собеседнику ее адрес и помещайте сообщения туда. На оперативности обмена сообщениями это не скажется — обновление гостевых книг происходит быстро. Во-первых, безопасность работы возрастет многократно — новые «дыры» в ICQ, позволяющие хакерам получать доступ к компьютерам пользователей этой программы, обнаруживаются едва ли не еженедельно. Во-вторых, все ваши сообщения будут автоматически сохраняться в архиве книги, не занимая к тому же места на жестком диске вашего компьютера. В-третьих, вы не будете связаны необходимостью одновременного выхода на связь — ваш собеседник может оставить свое сообщение в свое время, а вы потом, посетив книгу, его прочтете.

· Если вы желаете создать в Интернете архив своей переписки, чтобы при необходимости иметь возможность найти там нужное письмо, то не занимайтесь копированием ваших банков сообщений в Сеть, тратя на это время и деньги за доступ. Создайте на сервере, бесплатно предоставляющем много места под почтовый ящики (например, www.mailru.com, www.cmail.ru) два ящика — для ваших входящих и исходящих писем. Если сервер, где расположен ваш основной почтовый ящик, допускает перенаправление копий писем на другой адрес (таковыми являются практически все сервера бесплатной почты, подробнее — см. главу 23), то установите в качестве одного из адресов пересылки адрес первого из созданных вами ящиков, позаботившись, чтобы копии сообщений либо оставались на сервере, либо одновременно отправлялись в ящик, с которого вы забираете почту. Кроме того, всегда, отправляя письма, помещайте адрес второго из созданных вами ящиков в поле "Скрытая копия". В результате все входящие и исходящие письма будут копироваться в созданные вами ящики. Как только они будут заполнены, заведите следующие и соответственно измените параметры пересылок.

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

· Чтобы переслать по Интернету какой-либо большой файл, не обязательно использовать систему электронной почты. Лучше зарегистрируйте аккаунт на каком-либо из серверов, предоставляющих бесплатное место под сайт и дающих доступ по FTP — например, www.chat.ru, www.fromru.com, А затем помещайте передаваемые файлы на этот аккаунт и отправляйте адресату ссылку на них. Во-первых, загружаться файлы с сервера будут быстрее, чем сообщение электронной почты, так как в последнем случае присоединенные к письму документы увеличиваются в обьеме за счет кодирования uuencode (подробнее — см. главу 13). Во-вторых, если у адресата плохая связь с Интернетом, то он сможет использовать программы докачки файлов вроде NetVampire или GetRight. И, в-третьих, если он по каким-то причинам потеряет загруженные файлы, то всегда сможет загрузить их снова, не беспокоя вас необходимостью повторной отправки.

Глава 13. дНАПН ОНФЮКНБЮРЭ, или о проблемах понимания русского языка…

Строчки, подобные той, что вас так привлекла в заголовке, наверняка иногда встречались вам в путешествиях по Интернету или при чтении электронной почты. Как вы наверняка знаете, такое возникает из-за неправильно подобранной кодировки для чтения текста, — в Internet Explorer даже есть меню специальное: Вид-Вид кодировки (если использовать пятую версию, а в более старых может быть и в других меню). Вы также наверняка пробовали открывать в программах для Windows файлы с текстом, созданные в старых программах для Dos, например, набранные в Norton Editor, и почти всегда возникало затруднение с их чтением: текст отображался примерно так, как на рис. 13.1, и что-либо понять было просто невозможно.

Рис. 13.1. Файл, набранный в Norton Editor и открытый в Блокноте

В чем же тут дело? Что такое «кодировка»? Почему их столько много, и все они разные? И, наконец, каким образом можно решить их проблему — не запускать же каждый раз Norton Editor, чтобы прочитать и напечатать свои старые файлы?

Кодовая страница

Как вы наверняка знаете, в компьютерных технологиях для записи текстовой информации используется кодирование символов последовательностями из восьми бит — одного байта.[28] Один байт соответствует одному символу. Иными словами, для записи одной буквы, цифры или значка применяется последовательность из восьми нулей и единиц.

Когда компьютерная программа получает из какого-нибудь источника компьютерные же данные, в которых содержится текст (читает текстовый файл с диска, с CD-ROM'а, получает текст из Интернета), то она выделяет из получаемого массива данных последовательности по восемь бит и воспринимает их как байты. Каждому байту, то есть каждой последовательности из восьми нулей и единиц соответствует определенный символ. Какой же конкретно? А вот это узнается программой из так называемой "таблицы символов", которая знакома абсолютно каждой программе, могущей отображать текст и используется программой для такого отображения.

Таблица символов (еще она называется "кодовой страницей") — это набор данных для перевода последовательностей бит в символы. Она может либо храниться в самой программе, либо в компонентах операционной системы и «поставляться» программе при запросе из нее. Получив последовательность из восьми бит, программа смотрит в таблицу символов и определяет из нее, какому символу эта последовательность бит соответствует. После этого программа использует дальше именно этот символ — например, отображает его на экране, чтобы пользователь мог читать текст.

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

Каждая последовательность восьми бит имеет также и свое числовое значение — это ведь фактически число в двоичной системе счисления, которое нетрудно перевести в десятичную. Например, 01010101 в двоичной системе счисления — это 85 в десятичной, а в соответствии с международными стандартами эта последовательность бит кодирует символ «U». Число 85 в данном случае называется кодом символа «U». То есть можно сказать, что при отображении текстовых данных программа, отображающая их, каждую последовательности восьми бит воспринимает как число — код символа, смотрит в таблице символов, кодом какого символа это число является и отображает именно этот символ. Таблицу символов можно отобразить визуально — например, в Windows этой цели служит программа "Таблица символов." При таком отображении символы расставляются по возрастанию их кодов.

Но с помощью восьми бит можно закодировать до 256 символов — в самом деле, каждый бит может иметь значение 0 или 1, то есть одно из двух, следовательно, всего различных восьмибитовых последовательностей может быть 2*2*2*2*2*2*2*2=2^8=256. Английских букв — 26, их же, но заглавных — столько же, цифры и служебные символы вроде запятой, точки займут еще ну, мест 50, если по максимуму. Поэтому для возможности адаптации операционных систем к различным другим алфавитным системам (то есть, в применении к русскому языку, русификации программ[29]) в качестве строгого международного стандарта было принято строгое соответствие отображаемым символам лишь первых 127 последовательностей восьми бит — то есть первой половины кодовой страницы, а вторую половину отдали "на откуп" производителям регионального программного обеспечения и информационных ресурсов — чтобы они размещали в ней свои алфавиты.

Рис. 13.2. Визуальное отображение кодовой страницы — программа "Таблица символов"

Узаконенные международными стандартами коды первых 127 символов кодовых страниц, которые должны быть едиными во всех таких страницах, получили название "стандарта ASCII". Эти символы также могут кодироваться всего семью битами информации. Первые 32 кода (от 0 до 31) были назначены управляющим символам (например, символ с кодом 13 — это символ конца абзаца), остальные кодировали строчные и прописные латинские буквы, цифры, знаки препинания и математических операций. Коды второй половины этой 256-символьной кодовой страницы получили название "расширенного стандарта ASCII". Ими кодировались, как уже было сказано выше, национальные алфавиты, а также символы псевдографики, математические и некоторые другие символы. Первый бит кода символа второй половины кодовой страницы имел значение «1», в то время как для первой половины он равнялся «0». Вы можете легко отобразить на экране символ с желаемым кодом, набрав, например, в Word его код (десятичный на цифровой клавиатуре, с нулем вначале) при удерживаемой клавише Alt.

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

Код такого символа передавался в программу драйвером клавиатуры, когда был включен специальный режим — "переключена раскладка". В таком режиме при нажатии какой-нибудь клавиши с символом драйвер передавал в программу не код собственно нажатой клавиши, а код, соответствующий в региональной кодовой странице тому символу, который был помещен на этой клавише при «локализации» клавиатуры, то есть гравировке или наклейке на ее кнопки символов неанглийского алфавита.

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

Российская особенность

В большинстве стран была создана одна кодовая страница для своего алфавита. Но в России были некоторые особенности.

Изначальные английские версии поставляемых в Россию программ не могли работать с русским алфавитом (это и ясно — в них же не было русской кодовой страницы). Поэтому была создана русская кодовая страница ISO-8859-5, в которой кодам символов, большим 127, соответствовали русские буквы. Так как их всего 33, а с заглавными — 66, то в кодовой странице осталось место для символов псевдографики. Для того, чтобы с этой кодовой страницей можно было работать, имелось три возможности: писать программы, отображающие символы именно в соответствии с ней; создать операционную систему, которая сама будет «заведовать» вводом и выводом текста в соответствии с нужной кодовой страницей, а программы будут лишь использовать готовый результат; создать специальную программу, которая будет работать вместе с операционной системой и обрабатывать ввод и вывод текстовой информации в соответствии с нужной кодовой страницей. Первая возможность из-за своей сложности использовалась мало, третья подразумевала создание и использование специальных программ — русификаторов, которые долгое время использовались, при использовании второй возможности была необходима русификация или локализация операционной системы — то есть внедрение в нее функций отображения символов в соответствии с заданной кодовой страницей. В настоящее время повсеместно применяются локализованные операционные системы, то есть те, в которых кроме внедрения функций работы с русской кодовой страницей еще и переведен интерфейс.

Вариантов русской кодовой страницы было два. Один, вышеупомянутый — ISO-8859-5. Другой, так называемый «альтернативный», отличался от него другим порядком следования русских букв до строчной «р» и имел ту особенность, что символы псевдографики кодировались в нем теми же кодами, что и в исходной английской таблице символов, а следовательно, при принятом в операционой системе этом варианте кодовой страницы можно было использовать нелокализованные версии западных программ, работающих с псевдографикой. Например, западная программа могла из символов псевдографики изобразить таблицу. Она считывала из файла код символа и отображала на экране соответствующий ему значок. Если в системе была установлена «альтернативная» кодовая страница, то это оказывался именно символ псевдографики и рисунок получался. Если же в системе стояла ISO-8859-5, то рисовалась русская буква, и внешний вид рисунка был весьма своеобразным. Поэтому несмотря на то, что в «альтернативной» кодовой странице русские символы шли не подряд, а с разрывом между строчными буквами «п» и «р», именно она впоследствии получила наибольшее распространение. Кодовая страница ISO-8859-5 применялась при русификации компьютерных систем Sun, поставлявшихся в Россию.

Заслуга внедрения русских кодовых страниц принадлежит российской компании «Диалог» и ее ведущему программисту Петру Квитеку. В 1989 году в этой фирме — партнере Microsoft была локализована MS-DOS 4.1, первой среди всех операционных систем. При ее создании в качестве основной кодовой страницы была взята «альтернативная» кодировка, названная Dos(866), — именно из-за того, что программы, использующие ее, корректно отображали символы псевдографики. Это привело к еще более широкому распространению данной кодовой страницы, так как MS-DOS была основной операционной системой для персональных компьютеров.

При создании локализованной версии операционной системы Windows фирма Microsoft решила изменить ставшую общепринятой русскую кодовую страницу Dos(866). В частности, с появлением графического интерфейса отпала необходимость в использовании символов псевдографики, что позволило сделать порядок символов русского алфавита в кодовой странице в соответствии с алфавитной последовательностью, а также разместить в ней различные специальные символы вроде изображения торговой марки — ™. Появилась кодировка Windows-1251, которую создал тот же Петр Квитек. В ней тем символам, что в кодировке Dos(866) соответствовали одни русские буквы, были поставлены в соответствие другие символы. В результате для чтения в Windows русского текста, набранного в Dos, стали требоваться программы-перекодировщики.

Шрифты

"Носителями" кодовых страниц в Windows являются шрифты. Каждый шрифт — это фактически как бы отдельная кодовая страница, в которой записана информация о внешнем виде отображаемых символов, их дизайну, графике и соответствии каждого графического изображения символа определенному коду. С помощью программы Windows "Таблица символов" можно посмотреть первые 256 символов, могущих быть отображенными с помощью данного шрифта. Это могут быть как символы, соответствующие кодовой странице Windows-1251 и применяемые для отображения текста, так и значки для «разукрашивания» текстового документа, хранящиеся в специальных символьных шрифтах или даже математические символы (рис. 13.3).

Рис. 13.3. Шрифт, состоящий из математических символов.

Практически все текстовые редакторы под Windows, кроме разве что Блокнота, дают возможность пользователю выбирать желаемый шрифт для его текста. Текст, набранный с помощью обычного шрифта, например, Ms Serif, будучи оформлен шрифтом символьным вроде Wingdings, превратится в набор символов: "íàáîðñèìâîëîâ", так как в этом шрифте на местах, соответствующих кодам символов русских букв, расположены графические картинки стрелок.

Unicode

В ранних версиях Windows для каждой кодовой страницы должен был иметься свой шрифт, так как в один шрифт — в одну кодовую страницу — нельзя было поместить больше 255 символов. Это имело определенные неудобства, и был придуман и утвержден новый стандарт таблицы символов — Unicode. Согласно этому стандарту каждый символ кодировался не восемью, а шестнадцатью битами информации, что позволяло закодировать до 65536 символов. Эта кодировка также получила название двухбайтовой кодировки. Для совместимости со старыми стандартами первые 256 символов стандарта Unicode соответствовали стандартной кодовой таблице, а на остальных местах можно было разместить все необходимые символы всех языков. Были созданы новые шрифты в стандарте Unicode. Безусловно, использовались в них далеко не все 65 тысяч символов — стандарт имеет большой задел на будущее, и пока в шрифтах, совместимых с этим стандартом, «заняты» только первые сотни мест.

В шрифте Unicode имеется как бы несколько кодовых страниц сразу. Вот, к примеру, состав Unicode-шрифта Times New Roman (рис. 13.4).

Рис. 13.4. Содержимое шрифта Times New Roman, соответствующего стандарту Unicode, в окне Word97 "Вставка символа"

Вы видите в правом углу диалогового окна Word "Вставка символа" список региональных кодовых страниц, представленных в этом шрифте. Для того, чтобы программы, не поддерживающие стандарт Unicode (например, Microsoft Word 6.0), могли работать с такими шрифтами, операционная система осуществляет так называемую "подстановку шрифтов", то есть «раскладывает» шрифт Unicode на отдельные кодовые страницы и выбирает из него ту страницу, которая соответствует установленной в системе. Параметры подстановки прописываются в системном реестре, а в операционных системах Windows9x — и в файле Win.ini (рис. 13.5).

Рис. 13.5. Подстановка шрифтов в файле Win.ini.

Смысл находящихся в системном реестре и в файле win.ini выражений — указание программам на то, где в шрифте искать символы, соответствующие нужной кодовой странице. Так, для шрифта Times New Roman эти символы (кириллица) начинаются с 204-го места, что и указано в Win.ini. Теперь Microsoft Word 6.0 спокойно будет работать с Unicode — шрифтом Times New Roman, воспринимая его как обычный кириллический шрифт. При этом в восприятии этого текстового редактора шрифт Times New Roman окажется как бы «разложенным» на набор шрифтов (Times New Roman Cyr, Times New Roman CE и др.), каждый из которых будет соответствовать определенной кодовой странице, несмотря на то, что все эти «шрифты» хранятся в одном файле.

Иногда встречается ситуация, когда Microsoft Word 97 вполне нормально отображает на экране текст, но на принтер выводится набор квадратиков. Это вот как раз проявляется некорректное взаимодействие программного обеспечения, когда одни компоненты (Word97) поддерживают новый стандарт, а другие (драйвера к принтеру) — нет.[30]

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

Рис. 13.6. Шрифты Unicode — работают везде.

Koi-8

В то время как на рынке операционных систем для персональных компьютеров безоговорочную победу одержала всем нам знакомая MS-DOS, среди операционных систем для сетей дело обстояло не так. Там начинала властвовать Unix — операционная система, построенная на несколько других принципах. Эта система имела открытый исходный код — любой программист мог создать «свою» Unix, настроенную именно на его предпочтения, была очень удобна для программирования. И эта операционная система весьма бурно развивалась в своей отрасли — обьединении компьютеров в единое целое. Понятие о кодовой странице в Unix имело несколько другое значение, но на этом сейчас останавливаться не стоит.

С развитием сетевых технологий возникла тенденция к обьединению не только компьютеров, расположенных в одном месте, в локальные сети, но и самих этих сетей в некое единое целое. Начала зарождаться Всемирная Сеть — Internet. И одной из первых возможностей обьединенной сети стала возможность обмена информацией посредством текстовых сообщений — электронная почта, e-mail.

Для работы с электронной почтой, ее передачи и приема, сортировки и разработки маршрута движения были созданы специальные системы — почтовые сервера. Сам по себе "почтовый сервер" — это программа, постоянно работающая на компьютере и выполняющая задачи по обработке почты, поступающей на компьютер, на котором она запушена, из Сети и отправляющая почту в Сеть. (Однако нередко для работы такой программы выделялся отдельный компьютер.) Чаще всего они работали под управлением операционной системы Unix.

Всемирная Сеть изначально зародилась и начала развиваться в Америке. Поэтому вся система почтовых серверов вначале была предназначена для работы с почтой англоязычных пользователей, пишущих также англоязычным адресатам. Так как использование в текстовых сообщениях, которые составляли тогда единственное содержимое электронной почты, символов псевдографики было отнюдь не обязательно (хватит и простого текста!), то программы, работающие с электронной почтой, как на компьютерах пользователей, так и на почтовых серверах, делались в расчете на первую половину кодовой страницы — на семибитную кодировку.

Ясно, что текстовые сообщения, содержащие символы с кодами, большими 127 и не могущие быть закодированы семью битами, нормально такими серверами обрабатываться не могли. Для того, чтобы такие письма все же как-нибудь проходили через семибитные почтовые серверы, символы сообщений принудительно приводились к семибитному виду — у них обнулялся первый бит, указывающий на половину их кодовой страницы. Например, символ «е» (русская буква е) переходил в «f», символ «ш» — в «y». Дальше шло уже обработанное таким образом письмо.

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

Выходы были. Первый, самый тогда распространенный — писать письмо транслитом, latinskimi bukvami. Некрасиво и плохо читаемо, зато надежно — дойдет в исходном виде всегда. Но, поскольку все же не все почтовые сервера были семибитные, была создана специальная кодировка для электронной почты, которая отличалась тем, что на места, соответствующие кодам символов, большим 127, были поставлены русские символы, похожие по звучанию на английские буквы на местах, соответствующих кодам символов, меньших на 128. Иными словами, в этой новой кодировке коды 225, 226, 227, 228 соответствовали символам «а», «б», «ц», «д», которые при семибитном преобразовании перешли бы в коды 97, 98, 99, 100, соответствующие английским буквам «a», «b», «c», «d». Слово «привет», написанное в новой кодировке, пройдя через семибитный почтовый сервер, перешло бы в слово «PRIWET», что еще хоть как-то читаемо. Ну, а если письму бы повезло и на его пути не встретились бы семибитные сервера, то оно дошло бы в исходном виде.

Новая кодировка была названа KOI-8. Так как системы на основе Unix были в основном рассчитаны на работу с электронной почтой и международными сетями, то она стала стандартом для этой системы. Количество семибитных серверов стало понемногу сокращаться, сейчас их уже почти совсем не осталось в мире, а кодировка уже стала общепринятой, и программы для Unix предназначены для работы именно с ней.

KOI-8 использовалась не только Unix-системами. Так, любой пользователь персонального компьютера под управлением MS-DOS или Windows, имеющий выход к электронной почте, должен был иметь у себя программу для получения и отправки сообщений, умеющую работать с KOI-8. Выход к системе электронной почты был возможен и с компьютеров фирмы Apple — с Макинтошей, однако в операционных системах для этих компьютеров использовалась своя, оригинальная русская кодировка символов, отличающаяся от всех остальных. Для того, чтобы облегчить переписку между пользователями разных типов компьютеров и операционных систем, KOI-8 была принята как универсальная кодировка, и любая почтовая программа была обязана уметь читать и отправлять сообщения в этой кодировке.

Слишком умные серверы

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

Казалось бы, а в чем она могла заключаться? Главное, чтобы серверы могли обрабатывать сообщения в восьмибитных кодировках, и тогда в какой бы кодировке сообщения не пересылались, они всегда могли бы быть прочитаны принимающей стороной с помощью программы, умеющей работать с этой кодировкой. Но, увы, не все оказалось таким простым… В некоторые почтовые серверы их создатели вложили возможность автоматической перекодировки поступающих сообщений — возможно, для некоей «стандартизации»: глупый пользователь, ничего не понимающий в компьютерах, написал и отправил письмо в кодировке Windows-1251, - так надо его письмо перевести в KOI-8, чтобы было, как у нормальных людей, никогда не использующих Windows! Хотя, может быть, у создателей перекодирующих серверов были и иные соображения.

Если на такой перекодирующий сервер поступит сообщение в кодировке Windows-1251, и он его воспримет именно как сообщение в этой кодировке, то письмо преспокойно будет перекодировано в KOI-8 и отправлено дальше. О том, в какой кодировке написано письмо, всегда указывается в его заголовке или тексте. Просмотреть текст сообщения именно в том виде, в каком сообщение передается почтовыми серверами (то есть со всей служебной информацией) можно в любой почтовой программе. Например, в Microsoft Outlook Express 5.0 это можно сделать, щелкнув правой кнопкой мыши на письме, выбрав из контекстного меню пункт «Свойства», а в появившемся окне — вкладку «Подробности». Тогда можно будет просмотреть заголовок сообщения. Нажав на кнопку "Исходное сообщение", вы увидите текст письма так, как он передается по Сети. Кодировка письма указывается в заголовке сообщения (рис. 13.7).

Рис. 13.7. Указание на кодировку письма в заголовке сообщения.

Русская версия Microsoft Outlook Express 5.0 по умолчанию для всех отправляемых сообщений ставит кодировку KOI-8 и сообщения отправляет именно в этой кодировке. Однако некоторые почтовые программы могут делать ошибки — письмо написано, например, в KOI-8, а программа пишет в заголовке письма, в служебной информации, что письмо имеет кодировку Windows-1251. Если такое письмо будет отправлено адресату, то оно сразу не сможет правильно отобразиться в его почтовой программе — на экране будет мешанина символов вроде той, что помещена в заголовке этой главы. Поскольку почти все почтовые программы позволяют просматривать одно и то же письмо в различных кодировках, то получатель письмо прочитать все же сможет, просто выбрав для него правильную кодировку.

Но если такое письмо — с несоответствующим содержанию заголовком — попадет на перекодирующий почтовый сервер, то ситуация резко осложнится. Посмотрев на заголовок письма, сервер решит, что, раз оно написано в Windows-1251, как там указано, то оно должно быть перекодировано в стандартную для Сети (по мнению сервера и его создателей) кодировку KOI-8. К письму будет применено преобразование Windows-1251 — KOI-8: будут заменены соответствующие коды символов. Но письмо-то уже изначально было в KOI-8! И что получается? Автор письма написал в нем "Добро пожаловать". В KOI-8 оно перекодировалось как "дНАПН ОНФЮКНБЮРЭ". А сервер эту фразу снова перекодировал по тем же законам, что и любая перекодировка из Windows-1251 в KOI-8. И получилось: "Дмюом нмтчймачпщ". Понять что-либо уже так просто стало невозможно.

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

Вложенные файлы

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

Безусловно, можно было принудительно разбить последовательность бит в файле на группы из восьми бит и попытаться перевести его в текст (эксперимент может проделать каждый, переименовав какой-либо исполняемый файл или архив в файл с расширением".txt" и загрузив его в Microsoft Word 97 или Microsoft Word 6.0), но в этом случае в таком тексте было бы большое количество символов с кодами меньше 33 и больше 127, из которых со вторыми могла бы возникнуть проблема обрезания старшего бита в семибитных почтовых серверах, описанная выше, а первые могли очень своеобразно отобразиться в почтовой программе. Кроме того, символы с кодами, большими 127, имели шанс подвергнуться перекодировке в российских почтовых серверах. Ясно, что после подобных преобразований вряд ли пересылаемая программа бы заработала, а архив открылся — их код стал бы практически невосстановимо испорченным.

Поэтому были разработаны специальные системы вложений двоичных файлов в почтовые сообщения, основанные на конвертации двоичных данных в набор символов с кодами от 33 до 127, могущий быть впоследствии подвергнутым обратному преобразованию в исходные двоичные данные. Систем такой конвертации было разработано несколько, самые употребительные из них — uuencode, base64, quoted-printable.

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

Вот, к примеру, фрагмент письма с вложением, просматриваемый с помощью функции Microsoft Outlook Express "Свойства-Подробности-Исходное сообщение" (рис. 13.8).

Рис. 13.8. Фрагмент письма с вложением.

Все как на ладони. Указано, что приложено к письму — архив Zip с названием 999.zip, указан способ конвертации вложения — base64, а дальше идет набор символов первой половины кодовой таблицы, за который можно быть уверенным, что он пройдет через любые почтовые серверы неизмененным. Outlook Express при получении такого письма распознает наличие вставки base64, отобразит вложенный файл на панели вложений и позволит сохранить его на жесткий диск или прочитать, подвергнув обратному преобразованию из base64.

Если вложенный файл является текстовым (наиболее частый случай — HTML-вариант письма, который может быть составлен, к примеру, с помощью программы Outlook Express), то для него, помимо способа конвертации (обычно quoted-printable), указывается еще и кодировка исходного текстового файла для того, чтобы почтовая программа получателя, раскодировав его, могла его правильно отобразить (рис. 13.9).

Рис. 13.9. Указание на кодировку текстового вложения. В данном случае текстовое вложение еще подвергнуто преобразованию quoted-printable.

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

Решение проблем

В связи с наличием пяти различных кодовых страниц для русского языка возникает две проблемы:

1. Обеспечить возможность чтения текстов, написанных в соответствии с одной кодовой страницей, в операционных системах с другой кодовой страницей. Например, текстов MS-DOS в Windows9x.

2. Получить возможность расшифровывать неоднократно перекодированные электронные письма.

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

Microsoft Word 97

Да-да, не удивляйтесь — как ни странно, в этом редакторе есть средство открытия файлов в другой кодировке! Правда, поддерживается только возможность открытия и сохранения файлов в кодировке MS-DOS, но и это немаловажно — именно в этой кодировке распространяется большинство книг в "электронных библиотеках", огромное количество документов подготовлено в редакторах под MS-DOS и сохранено в текстовом формате в кодировке MS-DOS. Как же использовать это средство?

Для начала в меню Сервис-Параметры-Общие надо поставить флажок в графе "Подтверждать преобразование при открытии". После этого при открытии с помощью диалогового окна «Открыть» любых файлов с расширением, отличным от".doc", будет выдаваться диалоговое окно (см. слева), где можно будет выбрать нужный формат файла из предложенного списка.

Если вы открываете таким образом текст, представленный в кодировке MS-DOS, то лучше всего выбрать пункт "Текст DOS". Тогда при открытии файла его текст будет просто отображен на экране. Если файл, открытый таким образом, отредактировать и сохранить, то его формат сохранится, — он по-прежнему останется написанным в кодировке MS-DOS. Чтобы сохранить его в Windows-1251, надо воспользоваться пунктом меню "Файл-Сохранить как…" и указать там "Только текст" для сохранения в текстовом файле или другой формат для сохранения в нем.

При выборе в диалоговом окне выбора формата для открытия файла пункта "Текст MS-DOS с форматированием" Word предпримет попытку «отконвертировать» текст в формат Word. При наборе текста в редакторах под MS-DOS в качестве символа конца строки обычно используется символ конца абзаца (то есть клавиша "Enter"), а табуляция и выравнивание по центру или правому краю обозначаются пробелами. Применить к такому тексту методы форматирования (задание нужных полей и отступов, колонок, выравнивания по ширине) не представляется возможным, так как символы конца абзаца на концах строк будут мешать и не позволят тексту свободно перетекать из одной строки в другую, что требуется при подобном форматировании. Встроенный конвертор Word пытается исправить эту ошибку, но, увы, чаще всего делает это неудовлетворительно, и текст потом долго приходится править вручную.

В русской версии Microsoft Office 97 Professional есть специальный встроенный конвертер "Лексикон для DOS", его можно установить, выбрав соответствующий пункт при установке самого Office, но работа этого конвертера, хоть и несравненно лучше первого, все же оставляет желать лучшего.

Существует программа "Конвертор текста MS-DOS", специально предназначенная для обработки и оптимизации текста, набранного в MS-DOS. Разработка представляет собой макрокоманду для Microsoft Word 97 и Microsoft Word 2000 и запускается из Word. Она, кроме удаления лишних символов конца абзаца, также на основе количества пробелов перед первой буквой в строке устанавливает значение выравнивания (по ширине, по центру, по правому краю), заменяет несколько идущих подряд пробелов на один ("Лексикон" для MS-DOS пытается с помощью добавления лишних пробелов передать выравнивание текста по ширине), оптимизирует пробелы вокруг точек, запятых, других знаков препинания — ведь, в самом деле, пробел перед запятой выглядит несколько странно. Имеется возможность обработки сразу большого количества файлов с автоматическим их сохранением. Программа имеет множество настроек, могущих удовлетворить почти всех требовательных пользователей. "Конвертор текста MS-DOS" является частью пакета программ «ВерсткаТекстаКнижкой» и распространяется вместе с ним. Вы всегда можете загрузить этот пакет с адресов: http://antorlov.chat.ru и http://www.newtech.ru/~orlov.

К сожалению, работа с кодировками KOI-8, ISO-8859-5, Macintosh в среде Microsoft Word невозможна. Существуют макросы для перекодирования текста из KOI-8 в загруженном в Word тексте, но они работают медленно и поэтому пользоваться ими нецелесообразно.

В Microsoft Word 2000 и Microsoft WordXP при открытии документа в кодировке MS-DOS производится попытка автоматической его конвертации в читаемый вид, однако она не всегда срабатывает корректно.

WordPad

Если под рукой нет ни Microsoft Office, ни каких-либо других программ для чтения текстов MS-DOS, то можно на крайний случай воспользоваться текстовым редактором WordPad, поставляющийся вместе с Windows9x. В меню этого редактора "Открытие файла" в качестве шаблона для имени файла надо указать пункт "Текстовые документы MS-DOS", и тогда открываемый текстовый файл будет отображен правильно.

TextViewer

С помощью вышеописанных средств — возможностей Word и WordPad — можно иногда выходить из положения, когда срочно надо напечатать или отредактировать файл, набранный в редакторах под MS-DOS, но при большом количестве таких файлов работа с ними станет весьма затруднительной. Однако в настоящее время имеется достаточно большое количество различных бесплатных программ, написанных русскими программистами специально для решения проблем совместимости различных кодировок. Одной из таких разработок является TextViewer Георгия Гуляева (рис. 13.10).

Рис. 13.10. TextViewer.

TextViewer открывает текстовые файлы и файлы в формате Rtf. Слева вверху на панели инструментов программы находятся шесть кнопок — пять из них позволяют просмотреть открытый документ в соответствующей кодировке (Dos-866, Windows-1251, KOI-8, Macintosh, Iso-8859-5), а шестая — просмотреть текстовое содержимое файла в формате Rtf, если таковой будет загружен в TextViewer. Открытый файл можно сохранить в нужной кодировке, выбрав соответствующую опцию в окне "Файл-Сохранить как…". Имеется возможность произвести печать файла, использовать функцию предварительного просмотра перед печатью, поиск в тексте и замену фрагмента. Можно выбрать шрифт для отображения текста, с помощью удобного диалогового окна связать программу TextViewer с различными типами текстовых файлов.

В целом можно сказать, что разработка Георгия Гуляева — превосходная замена стандартному «Блокноту». Возможность работы с различными кодировками, открытие файлов любого размера, возможность замены — все это дает TextViewer'у неоспоримые преимущества перед Notepad'ом. Однако на компьютерах, не оснащенных процессором Pentium, TextViewer весьма медленно запускается, в связи с чем использование его как стандартного редактора текстовых файлов, например, на 486-м процессоре будет затруднительно.

Загрузить TextViewer можно с сайта Георгия Гуляева "http://www.freespeech.org/georgy" или с сервера бесплатных программ "http://www.freeware.ru".

Aditor

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

Чрезвычайно важной и редкой является возможность работать с текстом, написанным на Translit'е — то есть latinskimi bukvami. Иногда только такое письмо имеет шанс быть правильно прочитанным адресатом (например, когда у адресата вообще нет русифицированных программ на компьютере и работа с русскими кодовыми страницами невозможна, а также в случае, когда на пути письма стоит семибитный почтовый сервер). Aditor позволяет легко подготовить такое письмо и при необходимости прочитать текст на Translit'е.

Загрузить Aditor можно с адреса "http://perecod.chat.ru/aditor.rar" или с сервера бесплатных программ "http://www.freeware.ru".

Exclude Symbols

Программа "Exclude Symbols" Вардугина Александра из Кемерова является многофункциональным пакетным обработчиком текстовых файлов. Как видно из рисунка 13.11, программа поддерживает четыре кодировки — Windows-1251, KOI-8, Dos866 и Iso-8859-5, позволяя переводить текстовые файлы из одной кодировки в другую. Допустима обработка до пятнадцати файлов за один раз: файлы обрабатываются последовательно. В программе есть также ряд весьма интересных функций, например, превращения всех символов в файле в заглавные или, наоборот, в строчные, удаления пустых строк из текста, замены групп пробелов табуляцией, замены символов в обрабатываемых файлах.

Рис. 13.11. Exclude Symbols

Обращает на себя внимание интересная возможность автоматического определения кодировки документа. Делается это по довольно очевидному алгоритму. Вот пример. В русском языке есть союзы «и» и «в», но нет ни союзов «Ё» и "ў" (символы кодовой страницы Windows-1251, имеющие такие же коды символов, как и символы «и» и «в» в кодовой странице Dos866), ни союзов «Й» и «Ч» (символы кодовой страницы Windows-1251, имеющие такие же коды символов, как и символы «и» и «в» в кодовой странице KOI-8). Поэтому ясно, что текст, открытый как имеющий кодировку Windows-1251, в котором встречаются одиноко стоящие символы «и» и «в», скорее всего, и принадлежит кодовой странице Windows-1251, если же в нем встречаются одиноко стоящие символы «Ё» и "ў", то это, скорее всего, текст в кодировке MS-DOS, а если в этом тексте есть одинокие символы «Й» и «Ч», то, наверное, текст написан в кодировке KOI-8. На подобных принципах основан и способ автоматического определения кодировки документа в программе "Exclude Symbols". Поэтому можно, указав в качестве обьекта для перекодирования группу файлов, не особенно беспокоиться о кодировке каждого из них — достаточно просто указать ту кодировку, которую нужно получить на выходе, а в качестве исходной поставить значение «auto». Программа сама определит для каждого обрабатываемого файла его исходную кодовую страницу, решит, нужна ли ему конвертация в другую кодировку и при необходимости выполнит такую конвертацию.

Обращает на себя внимание оригинальный и удобный нестандартный интерфейс программы. Загрузить "Exclude Symbols" можно с адреса http://perecod.chat.ru/exsym.rar.

"Штирлиц"

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

Как уже писалось выше, электронное письмо, пройдя через несколько перекодирующих серверов, может стать совершенно нечитаемым. Для его расшифровки необходимо найти ту последовательность перекодировок, которым оно подверглось, и применить к письму обратное преобразование. Именно это делает «Штирлиц», созданный Всеволодом Лукьяниным. Если в него загрузить (например, перенеся с помощью буфера обмена или открыв сохраненный на диске текстовый файл) нечитаемый текст, полученный в качестве письма, то программа после вызова соответствующей функции начнет перебор возможных вариантов перекодирования, пытаясь найти ту последовательность перекодировок, которой подверглось письмо, и применить к нему обратные перекодировки. Пользователю показывается наилучший, по мнению программы, вариант раскодированного письма, — «Штирлиц» анализирует раскодированный текст и, если находит там общеупотребительные слова русского языка, то считает этот вариант раскодировки наилучшим.

Программа отличается большим набором режимов работы и функций. Так, можно подбирать схему перекодировок вручную (если есть для этого какие-нибудь предположения), задавать глубину анализа (то есть сколько раз подряд это письмо могло быть неправильно перекодировано), раскодировать текст, разные фрагменты которого имеют разную кодировку, читать тексты, написанные в Unicode-кодировке, читать тексты, написанные на Translit'е. Имеется подробное руководство пользователя и очень удобная функция деинсталляции, которая может служить примером написания таких программ. «Штирлиц» способна вытаскивать из текста письма фрагменты, закодированные в uuencode, base64 и других подобных системах передачи вложенных файлов, если почтовая программа получателя не распознала их. Для этого в «Штирлице» есть специальная функция. Кроме того, при наличии какого-либо текста в закодированном в uuencode, base64 или другом подобном формате фрагменте письма программа сможет его «вытащить» и показать пользователю.

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

Вместе с тем программа «Штирлиц» не лишена и некоторых недостатков. Так, к сожалению, очень некорректно выполняется перекодировка в кодовую таблицу Dos866 и обратно. Несмотря на то, что при этом письмо остается в какой-то степени читаемым, выглядит оно очень непрезентабельно. Так что использование «Штирлица» в качестве программы для чтения файлов в разных кодировках может сопровождаться некоторыми затруднениями. Поэтому лучшее применение, несомненно, превосходного творения Всеволода Лукьянина — «спасение» неправильно перекодированных почтовых сообщений.

Загрузить «Штирлиц» можно с адреса http://perecod.chat.ru/shtirlz.rar.

"Декодер почты в неверной кодировке"

Эта программа Покровского А.В. - простое, но очень хорошо работающее средство для раскодирования писем, прошедших через несколько перекодирующих почтовых серверов. Она просто анализирует текст и преобразует его в читаемый вид. Несмотря на отсутствие сложных настроек и дополнительных возможностей, функцию свою «Декодер» (рис. 13.12) выполняет просто превосходно.

Рис. 13.12. Декодер почты в неверной кодировке

Для раскодирования текста надо просто вставить его в окно программы и нажать кнопку «Расшифровать». «Декодер» имеет просто превосходный интерфейс, который среди всех программ, описанный в этой главе, без сомнения, заслуживает наибольших похвал. Видно, что автор программы подумал об эргономике, удобстве пользователя, легкости и простоте работы. Это, к сожалению, редкая ситуация, и даже у лучших программ других авторов интерфейс и средства управления программой оставляют желать лучшего. Всем потенциальным авторам программ настоятельно рекомендуется ознакомиться с творением А.Покровского и, по возможности, последовать его примеру в области разработки пользовательского интерфейса. Без сомнения, эта маленькая, но мощная и очень удобная программа достойна того, чтобы занять почетное место на жестком диске каждого пользователя, работающего с электронной почтой и хотя бы изредка сталкивающегося с проблемой восстановления неправильно перекодированных почтовых сообщений.

Загрузить программу можно с сайта разработчика www.postman.ru/~a12/decoder.

TCode

Программа TСode Алекса Бойко (рис. 13.13) — пожалуй, самый мощный инструмент для восстановления многократно перекодированных файлов. Ей подвластна практически любая комбинация перекодирующих серверов. Кроме того, она умеет работать с системами конвертации вложенных файлов base64 и quoted-printable. TCode по своему действию похожа на предыдущую описанную программу, только позволяет проводить также и ручную перекодировку.

Рис. 13.13. TCode — ни одно письмо перед ней не устоит.

Кроме того, TCode позволяет проводить и обычную конвертацию текста из одной кодировки в другую, что иногда может пригодиться при подготовке web-страниц. Надо только в меню в окне программы отказаться от использования автоопределения кодировки.

При испытаниях TCode справилась даже с такой нетривиальной задачей, как раскодирование письма, пять раз неправильно перекодированного (для этого письмо сохранялось как KOI-8, а открывалось как Windows-1251 в виде мешанины символов, и опять сохранялось как ISO-8859-5, и так пять раз). На расшифровку такого письма размером в полкилобайта с помощью TCode ушло около 10 минут на Pentium-166, причем результат был вполне читаем, хотя и не совсем полностью правилен.

Загрузить TCode можно с адреса http://perecod.chat.ru/tcode.rar или с сайта автора http://alexboiko.da.ru. Не забудьте отказаться в меню Settings от автоматического перекодирования буфера обмена, а то во время работы TCode вы не сможете с ним работать в других программах.

* * *

Что касается личного предпочтения автора, то у меня в качестве заменителя Notepad'а стоит TextViewer Георгия Гуляева, для восстановления почтовых сообщений (которое благодаря усилиям разработчиков программного обеспечения требуется все реже и реже) используется программа А.Покровского (одно удовольствие с ней работать — уж больно хорошо спроектирована и написана), а для массовой перекодировки файлов, если такая необходимость возникает, я использую Exclude Symbols. Для конвертации текста, набранного в редакторах для MS-DOS, в формат, допускающий свободное его редактирование (то есть изменение отступов, выравнивания) я применяю "Конвертор текста MS-DOS", поскольку он отличается множеством полезных настроек и позволяет обрабатывать документы в пакетном режиме. Если же возникает необходимость написать или расшифровать текст на Translit'е, то дается работа Aditor'у.

Если же "Декодер почты" не справляется со своей задачей (а такое случается крайне редко), то приходит черед TCode, перед которой не устоит ни одно письмо, если оно, конечно, в принципе может быть прочитано.

Будем надеяться, что в будущем проблема различных кодировок как-нибудь будет решена. Может быть, наилучшим решением было бы принятие всеми какой-либо кодировки как стандарта. Но это уже зависит от воли производителей программного обеспечения.

Полезные советы

· Если вас не устраивает максимально допустимое в Microsoft Paint увеличение рисунка, равное восьми крат, то вы можете использовать скрытую возможность этого графического редактора. Нажмите кнопку с изображением линзы, а затем кликните левой кнопкой мыши на нижней границе поля, в котором показываются возможные степени увеличения. Рисунок будет увеличен в десять раз.

· Чтобы при загрузке Windows9x при необходимости проверки диска срабатывала альтернативная программа проверки диска, нужно в подпапку Command той папки, куда установлена Windows, поместить ее исполняемый файл, переименовав его в "scandisk.alt".

· Для того, чтобы поместить в буфер обмена изображение экрана, воспользуйтесь клавишей PrintScreen. Комбинация клавиш Alt+PrintScreen поместит в буфер обмена изображение активного окна.

· Если компьютер будет эксплуатироваться в условиях повышенной вибрации или на одном столе с ним располагается матричный принтер, то положите под системный блок поролоновый коврик толщиной 2–3 см. Позаботьтесь о своих жестких дисках — вибрация для них вредна.

· Если вам нужно перенести с помощью дискет с одного компьютера на другой файл, который по размеру больше емкости дискеты, то не ищите специальных программ для «нарезки» файлов. Возьмите архиватор Rar или WinRar. В нем есть превосходная функция "создания многотомных архивов". Задайте в диалоговом окне установки параметров архива размер тома, равный размеру дискеты, а потом перепишите на дискеты созданные тома — на каждую по одному. Если на том компьютере, куда необходимо перенести файл, не установлен Rar, то создайте самораскрывающийся (SFX) — архив, — в этом случае архив будет представлять из себя программу, которая сама извлечет из себя свое содержимое. Обязательно отметьте пункт добавления "информации для восстановления" при архивации — тогда небольшие повреждения архива не скажутся на его содержимом, а лучше копируйте каждый том архива сразу на две отдельные дискеты — в этом случае вероятность одновременного неустранимого повреждения обоих томов будет минимальной.

Глава 14. Секреты системного реестра

Системный реестр Windows — это большая база данных, в которой записаны настройки как самой операционной системы, так и приложений, в ней установленных. Параметры устройств, сканеров, принтеров, плат расширений, находящихся в компьютере, информация о связях файлов с программами, настройки программ, расположение значков на Рабочем столе и в папках, цветовые схемы Windows, информация об открытых окнах, параметры соединений удаленного доступа и учетных записей почты, параметры сети и Интернета, информация об установленных шрифтах и многое другое, — все это хранят в себе глубины реестра. Без реестра операционная система неработоспособна. Многие компоненты реестра изменяются самостоятельно по приказам операционной системы или программ, некоторые можно настроить с помощью диалоговых окон (скажем, вроде назначения цветовой или звуковой схемы), но большая часть их недоступна для изменения из "стандартных средств" Windows.

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

В качестве обьекта исследования взят системный реестр операционной системы Windows95/98 как устроенный более просто, чем реестр систем на платформе NT — Windows 2000 и Windows XP. Кроме того, в настоящее время в России наиболее распространенной операционной системой остается Windows98 как сочетающая в себе умеренные требования к ресурсам компьютера и удовлетворительные сервисные функции и надежность, так что нижеприведенное описание сможет пригодиться максимальному числу пользователей именно в том случае, если его обьектом станет именно Windows 95/98. Однако о реестре Windows 2000/XP упоминания в главе тоже имеются, но приводятся они лишь "для общей информации" и руководствоваться ими при непосредственных действиях по изменению параметров системного реестра не стоит.

В операционных системах Windows9x физически реестр располагается в двух файлах в каталоге Windows (далее именно так будет обозначаться папка, в которую установлена операционная система — название этого каталога на вашем компьютере может быть другим) — System.dat и User.dat. Файлы System.da0 и User.da0 (на конце — цифра ноль) являются резервными копиями реестра первой очереди, которые создаются каждый раз после успешной загрузки компьютера, а в случае неудачи при загрузке могут быть помещены на место поврежденных файлов реестра. В Windows Me к указанным файлам добавился еще и файл classes.dat, являющийся тем самым третьей частью системного реестра.

Сам системный реестр состоит из двух частей. Первая — файл System.dat — содержит информацию, общую для всех пользователей данного компьютера: информацию о наличии устройств, их параметры, настройки некоторых программ и др. Вторая же часть — User.dat — является специфичной для каждого пользователя, храня его настройки. Оба файла имеют атрибут «Скрытый».

Если на компьютере зарегистрировано несколько пользователей, то в папке Windows\Profiles хранятся в отдельных каталогах «личные» файлы каждого: содержимое рабочего стола, главное меню и т. д… а также часть User.dat системного реестра. В папке Windows тоже хранится файл User.dat, содержащий настройки системы по умолчанию.[31] При загрузке компьютера после ввода имени пользователя файл User.dat из каталога этого пользователя вместе с System.dat и User.dat из каталога Windows загружается в память и «склеивается» с ними в единое целое.

В операционных системах Windows 2000/XP файлы системного реестра хранятся в подпапке System32/Config каталога с файлами Windows.

Перед тем, как начать изучение внутреннего устройства системного реестра, неплохо было бы обезопасить свою систему от крушения вследствие его возможного повреждения. Вопреки распространенному мнению, если регулярно проводить резервное копирование системного реестра, то его повреждение не нанесет существенного вреда системе.[32]

Меры предосторожности

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

В Windows98 резервное копирование реестра совершается автоматически. Каждый раз при успешном запуске Windows запускается программа scanregw.exe, которая копирует файлы реестра в папку Windows\Sysbckup, заархивировав их в файл типа. cab (что уменьшает их обьем раза в четыре). Кроме того, в архив с реестром помещаются файлы win.ini и system.ini, также содержащие важные настройки системы. Для восстановления реестра используется программа scanreg.exe, работающая в Режиме MS-DOS.

Если на вашем компьютере установлена именно Windows98, то в случае катастрофы системы, когда при загрузке компьютера вы видите сообщение "Системный реестр поврежден" или "невозможно загрузить драйвер…" или что-нибудь еще, действия должны быть следующими:

1. Перезагрузить компьютер кнопкой Reset.

2. При загрузке компьютера держите нажатой клавишу Ctrl. В появившемся меню выберите пункт Command Prompt Only и дождитесь появления приглашения MS-DOS. Если вызвать меню загрузки таким образом не удается, то вставьте в дисковод загрузочную дискету и загрузитесь с нее. Дождитесь вывода на экран приглашения MS-DOS.

3. Введите команду scanreg /restore. Запустится программа восстановления системного реестра. Выберите желаемую копию (лучше всего наиболее позднюю, что можно определить по дате) и следуйте дальнейшим указаниям программы.

4. Перезагрузите компьютер. Все должно заработать.

По умолчанию программой scanregw.exe сохраняется 5 копий реестра — от пяти последних запусков Windows. Можно сделать так, что сохраняться будет не 5, а больше (до 100) или меньше копий реестра. Для этого создайте файл scanreg.ini в каталоге с утилитами scanreg.exe и scanregw.exe и укажите там параметр MaxBackupCopies со значением, равным числу желаемых резервов (просто написав в первой строчке файла scanreg.ini строку MaxBackupCopies=число_резервов). Также можно заставить операционную систему сохранять в архивах с копиями реестра и другие файлы — просто добавьте в scanreg.ini строки Files=полный путь к файлу.

Если с реестром вы экспериментируете часто и желаете отменить автоматическое резервирование реестра (чтобы не удалять наиболее старые его копии, которые могут потребоваться для его восстановления), то уберите вызов программы scanregw.exe из раздела автозагружаемых программ системного реестра (о том, где он находится — смотрите ниже), и впоследствии выполняйте ее запуск вручную.

Если у вас установлена Windows95, но вы желаете воспользоваться этими утилитами, то извлеките с помощью программы WinZip 7.0 или WinRar 2.50 и выше файлы scanregw.exe и scanreg.exe из файлов. cab дистрибутива Windows98[33] и поместите туда, куда сочтете нужным. Эти программы прекрасно работают и в этой операционной системе.

При работе в Windows95 и отсутствии возможности установки утилит резервирования реестра для его архивации в Режиме MS-DOS просто скопируйте файлы реестра в какую-либо папку вне каталога Windows, а для его восстановления произведите обратную операцию, скопировав заранее зарезервированные файлы поверх испорченных в каталоге Windows.

Если даже после восстановления системного реестра Windows не загрузилась — то увы, ее переустановка неизбежна. По всей видимости, в таком случае повредился какой-то системный файл, не реестр. (В этом случае ваши эксперименты над реестром не были причиной сбоя.) Вытаскивайте из папки Program Files и каталога с операционной системой все мало-мальски для вас ценное (не забудьте эвакуировать все нужное из папки "Рабочий стол", или «Desktop» в английской версии, — там находится все содержимое вашего рабочего стола, а также из каталога Profiles, если таковой существует — чтобы спасти файлы остальных пользователей, и из папки Applications Data в каталоге с Windows — там находятся папки с почтой Outlook Express, а также шаблоны Word2000), стирайте их (не забудьте предварительно снять со всех файлов в них атрибут "Только чтение", или придется подтверждать каждое удаление), удалите папку Recycled и запускайте setup.exe из каталога с дистрибутивом Windows. После установки системы и всех программ не забудьте сделать новые копии реестра.

Весьма желательно после установки Windows скопировать ее дистрибутив на жесткий диск и сделать загрузочную дискету. В любом случае восстановление Windows придется вести из Режима MS-DOS, а в таком случае доступ к CD-Rom'у будет невозможен, если не загрузить драйвера для него. Последнее же сделать не всегда возможно, так что надежнее будет иметь дистрибутив Windows на жестком диске.

Если вы отключите авторезервирование реестра в Windows98 или работаете с Windows95, то время от времени резервирование реестра рекомендуется повторять. Делать это надо в следующих случаях.

1. Когда вы установили новую большую программу и убедились, что она работает. Большие программные пакеты, например, Microsoft Office или Intermet Explorer, делают в реестре при своей установке большое количество записей, и могут отказаться работать, если впоследствии их не обнаружат. Если вы выполните переустановку реестра в таком случае, то вам придется переустановить и все эти программы.

2. Когда вы проводите нужное вам редактирование реестра, и оно оказывается успешным.

3. Когда вы добавляете новые учетные записи в Outlook Express, The Bat! в ftp-менеджеры и почтовые клиенты, и эти записи вам крайне необходимы. Они хранятся в системном реестре и в случае его замены — пропадут.

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

5. Когда вы внесли в конфигурацию Windows какое-нибудь важное вам изменение вроде настройки цветовой гаммы окон или звуковых схем и не хотели бы его потерять.

6. Когда вы установили новое устройство.

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

Кроме утилиты scanregw.exe из дистрибутива Windows98, фирмой Microsoft также создано несколько утилит, которые делают то же, что и эта, но несколько более красиво. К ним относятся программы Cfgback.exe и ERU (находятся на лицензионном компакт-диске Windows). Последняя сохраняет еще и все файлы настроек и автозапуска (win.ini, system.ini, msdos.sys, autoexec.bat, config.sys). Утилиты резервирования и восстановления реестра есть и почти в любом пакете дисковых утилит вроде Nuts&Bolts.

Для создания резервной копии системного реестра в Windows2000/XP необходимо загрузить компьютер с системной дискеты MS-DOS или в какой-нибудь другой операционной системе, установленной на нем (если таковая присутствует) и скопировать в отдельную папку все файлы, содержащиеся в подкаталоге system32/config той папки, куда Windows установлена. Произвести копирования файлов реестра этой операционной системы при работе в ней невозможно.

Редактор реестра

Сами по себе файлы реестра являются двоичными. В этом может убедиться каждый, открыв копию, скажем, User.dat в текстовом редакторе вроде Microsoft Word 6.0. Но в составе Windows есть специальная программа — Редактор реестра, которая представляет системный реестр в виде, удобном для восприятия. Это — файл regedit.exe из папки Windows. При установке операционной системы ярлык на этот файл в меню кнопки «Пуск» не появляется, так что создать его там нужно самому.

При запуске программы regedit.exe (рис. 14.1) перед пользователем предстает иерархическая структура системного реестра, несколько похожая на Проводник. В левой части окна программы расположено дерево разделов реестра, а в правой отображаются параметры (другое название — "ключи") и их значения, если они присутствуют в разделе. Все разделы реестра являются подразделами пиктограммы "Моего компьютера" в окне реестра, так как при работе в сети на основе Windows есть возможность редактировать реестры на удаленных компьютерах, и если бы с помощью меню «Реестр» к данному редактору реестра был бы подключен еще и сетевой реестр, то он бы отображался в качестве подраздела пиктограмы своего компьютера.

Рис. 14.1. Программа Редактор реестра.

Вся навигация по реестру в Редакторе реестра аналогична таковой в «Проводнике». Единственное отличие — в правой части окна редактора реестра никогда не появляются пиктограммы разделов. Нажатиями на знак "+" или двойными кликами на пиктограммах разделов можно добраться до любого раздела и параметра. Чтобы переименовать раздел или параметр, нужно выбрать соответствующий пункт из контекстного меню или нажать F2. Изучить возможности Редактора реестра по редактированию не составит труда. В Редакторе реестра также есть возможность поиска названия раздела, параметра или значения.

В Редакторе реестра имеется возможность записать всю древовидную структуру реестра в текстовый файл (с расширением. reg), например, чтобы потом ее изучить или сравнить с другой. Для этого служит команда "Экспорт файла реестра" из меню «Реестр». Есть возможность записать в текстовый файл лишь выделенный раздел, для этого нужно отметить специальный пункт в окне экспорта реестра.

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

Если вы хотите посмотреть, что меняется в системном реестре под действием той или иной программы, то воспользуйтесь программой RegSnap с сайта http://webdon.com[34] ]. Она экспортирует реестр в текстовые файлы до и после действия исследуемой программы, а потом сравнит эти два файла и выяснит, какие ключи были добавлены, удалены, изменены.

Обзор системного реестра

Все записи в реестре подразделяются на три типа. Это разделы — некое подобие папок «Проводника»: они могут содержать в себе другие разделы и параметры. Это параметры — то, что может содержаться в разделе. Они могут быть трех типов: строковые — обычная текстовая строка, двоичные — число в двоичной системе счисления,[35] и типа Dword — число в десятичной или шестнадцатиричной системе (вводить можно в любой — во вторую систему число преобразуется автоматически). Ну, и у параметра может быть (а может и не быть) значение — только того типа, какой допускает параметр.

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

На самом деле реестр состоит всего из двух разделов — HKEY_LOCAL_MACHINE (содержится в файле System.dat) и HKEY_USERS (содержится в загруженных файлах User.dat). И именно их вы увидите, если экспортируете весь реестр в текстовый файл и его просмотрите. Так как сам реестр содержит в себе лишь два раздела, а его разложение на шесть производится исключительно в редакторе реестра (как бы "виртуальное представление" для удобства работы) то все изменения, сделанные в одном из дублированных разделов, автоматически будут сделаны и в другом — не из-за действий редактора реестра по синхронизации, а из-за того, что и тот, и другой — один и тот же раздел, просто два раза отображенный.

Но — все по порядку.

Сокровищница имен

Раздел HKEY_CLASSES_ROOT является точной копией раздела HKEY_LOCAL_MACHINE\SOFTWARE\Classes и содержит в себе информацию о всех зарегистрированных в системе типах файлов. Именно из этого раздела берется информация для представления в окне "Типы файлов" (рис. 14.2). Но хранится информация о зарегистрированных расширениях весьма своеобразно и сложно. Вначале в разделе HKEY_CLASSES_ROOT идет список всех расширений (с точками вначале!), зарегистрированных в системе, каждое из которых является названием раздела реестра. В каждом таком разделе обязательно есть параметр "По умолчанию". В нем записано как бы «внутреннее» название расширения, которое "в ходу" у системы (рис. 14.3, слева).

Рис. 14.3. Слева показано, где можно узнать «внутреннее» имя типа файлов или задать его. Ну, а справа показано, где расположено «официальное» название типа файлов. Посмотрите его также и на рис. 14.2.

В разделе HKEY_CLASSES_ROOT также присутствует раздел с именем этого «внутреннего» названия расширения (расположенный ниже в окне редактора реестра), в котором находятся параметры, определяющие меню правой кнопки мыши для этого расширения. В параметре "По умолчанию" этого раздела записано «официальное» название типа файлов с таким расширением, которое, например, присутствует в списке окна "Типы файлов" (рис. 14.3, справа, также см. рис. 14.2).

Рис. 14.2. Сюда поступает информация из раздела HKEY_CLASSES_ROOT

В разделе, имя которое соответствует расширению с точкой вначале, также могут находиться различные параметры, определяющие интеграцию данного типа файлов в «Проводник». В частности, если создать в этом здесь раздел с именем, соответствующим внутреннему названию расширения, там — раздел с именем ShellNew, а в нем — строковый параметр NullFile (рис. 14.4, слева), то в выпадающий список "Создать файл" будет помещено «официальное» название типа файлов (рис. 14.4, справа). Так будет только в случае, если «официальное» название типа файлов присутствует в реестре, и указана программа, который этот файл открывает (см. ниже).

Рис. 14.4.Создайте параметр NullFile, как показано слева, и любуйтесь на новый пункт в меню Создать, как показано справа.

При выборе в этом списке этого типа файлов будет создан пустой файл с расширением, соответствующим этому «официальному» названию, и с таким же именем, что и «официальное» название. Если в папку Windows\ShellNew поместить файл с этим расширением, а в разделе ShellNew создать не параметр NullFile, а параметр FileName, и в его значении указать имя этого файла, то при выборе этого типа файлов в списке "Создать…" в текущей папке будет создана копия файла, помещенного в папку Windows\ShellNew.

Кроме того, в разделе ShellNew могут также быть параметры Data и Command. В первом случае значением параметра Data должен быть набор двоичных данных, которые будут помещены в пустой файл при его создании из меню «Создать». А во втором в параметре Command может быть указан путь к какому-либо исполняемому файлу с такими параметрами командной строки, которые приводят к созданию нового файла этой программы. Так, например, создаются ярлыки из меню «Создать».

Поэтому для того, чтобы почистить меню «Создать», придется потратить немало времени. Надо с помощью функции «Поиск» Редактора реестра найти в разделе HKEY_CLASSES_ROOT все разделы ShellNew, а в них — параметры «NullFile», «FileName», «Data» и «Command» и оставить среди них только нужные.

Если в раздел ShellNew поместить несколько разных полей для создания файла, то выполняться их указания будут согласно приоритету в последовательности «NullFile», «FileName», «Data», "Command".

В разделе (рис. 14.4, справа) с именем «внутреннего» названия расширения могут находиться разделы DefaultIcon, параметр "По умолчанию" которого определяет иконку этого типа файлов,[36] а также раздел «shell», в котором располагаются команды контекстного меню правой кнопки мыши данного типа файлов.

Название действия, которое отображается в меню правой кнопки мыши над файлом данного типа, может быть либо названием одного из подразделов раздела shell, либо значением параметра "По умолчанию" этого подраздела (в последнем случае название самого подраздела не имеет значения[37]). В подразделе с именем команды контекстного меню располагается подраздел command, в параметре "По умолчанию" которого указан полный путь к программе, которая должна выполнить данное действие (рис. 14.5).

Рис. 14.5. Вот место, где указывается программа, открывающая файл

Если для какого-либо типа файлов параметр Default Icon не указан, то в качестве иконки для него используется стандартная иконка документа. Если же в системном реестре вообще нет указания на такой тип файлов, то для него берется иконка с изображением логотипа Windows.

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

Во-первых — теперь вы можете свободно редактировать выпадающее меню "Создать…". Для удаления лишних пунктов оттуда надо просто провести поиск по словам FileName, NullFile и др. и удалить параметры ShellNew в тех найденных разделах, которые не нужны.

Вы можете удивиться, найдя весьма много параметров FileName и NullFile, причем в разделах типов файлов, которые не присутствуют в меню "Создать…". Это чаще всего «обломки» предыдущих инсталляций программ. Дело в том, что для того, чтобы название типа файлов появилось в меню "Создать…", нужно правильное оформление всех разделов реестра, посвященных данному типу: и раздел с «внутренним» именем, и раздел shell, и в нем обязательно — раздел с именем open и т. д.

Для добавления какого-либо пункта в меню "Создать…" нужно найти раздел с именем нужного расширения и добавить в него подразделы с его «внутренним» именем и именем ShellNew, а там — указать параметр NullFile (или FileName с именем файла). Ну и, естественно, проверить наличие и правильность оформления раздела с «внутренним» именем этого расширения.

"Обломки" инсталляций — разделы с именами типов файлов могут, к примеру, образоваться так. Программа Microsoft Photo Editor при своей установке поместила в реестр записи о том, что файл с расширением. gif имеет «внутреннее» имя «giffile», создала под него в реестре два раздела —.gif и giffile, прописав там все, что нужно. При установке программы ACDSee она в разделе. gif заменила «внутреннее» имя этого типа на свое — ACDSee.GIF и создала под него раздел с именем "ACDSee.GIF", куда и разместила свои команды. А прежний-то раздел, «giffile», остался! Но он теперь уже не соответствует никакому типу файлов, так как ни у одного расширения нет такого «внутреннего» имени. После длительной эксплуатации системы таких обломков накапливается достаточно много. Поэтому поиск нужного раздела надо начинать именно со списка расширений, а потом уже переходить к списку «внутренних» имен, узнав нужное.

В некоторых разделах, посвященных типам файлов, можно найти еще и другие разделы. Например, раздел «ddeexec» в подразделе с именем команды раздела shell какого-либо типа файлов содержит те команды DDE, которые должны использоваться. (Некоторые программы способны воспринимать команды операционной системы при открытии того или иного типа файлов и, к примеру, открывать их не в новом окне, а в своем подокне. Это называется Dynamic Data Exchange, DDE — динамический обмен данными.)

В некоторых разделах встречаются параметры Content-Type. Это — указания Интернет-браузеру на тот случай, если он встретит подобный файл в Интернете. Существуют и другие возможные виды разделов, но подробное их описание выходит за рамки данной книги.

Некоторые типы файлов могут быть зарегистрированы в реестре по упрощенной схеме. При ее использовании «внутреннее» имя типа файлов не указывается, а те параметры, которые должны были бы присутствовать в разделе с «внутренним» именем, находятся в разделе с именем расширения файла. Такая схема тоже работает, но все же является не совсем корректной.

Каталог имеет только два «внутренних» имени и тем самым два подраздела — Folder и Directory, соответствующие его пустому и непустому состояниям. В каждом из этих подразделов содержатся команды, применяемые ко всему каталогу. В подразделе с именем "*" находятся команды, применяемые ко всем типам файлов, а в подразделе Unknown — к файлам, которые в реестре не зарегистрированы (то есть в нем нет подразделов с именами, соответствующими их расширениям). Подраздел с именем Drive соответствует логическому диску.

В подразделе с «внутренним» именем типа файла может содержаться также параметр EditFlag. В зависимости от его значения запрещаются те или иные параметры редактирования действий с этим типом файлов с помощью окна Вид-Параметры-Типы файлов, вызываемого из «Проводника». Вы, наверное, замечали, что редактировать через это окно действия с каталогом или логическим диском нельзя? Так вот это именно из-за значения параметра EditFlag.[38]

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

Обьектами в операционной системе может стать все, что угодно — программы, папки, компоненты программ и др. Строго говоря, обьект в программистском понимании — это все, что имеет имя и к чему можно обращаться, как к единому целому.

Этой возможностью пользуются разработчики программ, интегрирующихся в систему. Служебные папки, такие, как Панель управления, Удаленный доступ к сети, Принтеры, которые вы наверняка в свое время безуспешно искали на жестком диске, являются именно такими обьектами и имеют свои идентификаторы. Идентификаторы также имеют и реальные папки, выполняющие в системе какие-либо функции, например, Рабочий стол, Корзина. Вы можете даже дать такой идентификатор какой-либо из своих папок (тогда ее, в частности, можно будет включить в окно "Мой компьютер", как показано на рисунке).

Совет. Вот как это можно сделать

1. Откройте раздел реестра HKEY_CLASSES_ROOT\CLSID и добавьте туда раздел с именем {FD4DF9E0-E3DE-11CE-BFCF-….любые 12 цифр и букв…}. Тем самым вы создадите еще один идентификатор обьекта Windows. (Вообще говоря, и остальные цифры могут быть произвольными. Важно лишь, чтобы в реестре не оказалось двух одинаковых идентификаторов.)

2. Добавьте в этот раздел параметр По умолчанию = "Название папки". Здесь введите то имя, под которым вы хотите, чтобы папка отображалась в окне "Мой компьютер".

3. Добавьте в этот раздел подразделы с параметрами:

— DefaultIcon и параметр по умолчанию там — путь к желаемой иконке папки.

— InProcServer32 и параметр по умолчанию там — "shell32.dll", а также параметр «ThreadingModel» со значением «Apartment».

— Shell, в нем подраздел с именем, соответствующим желаемому названию команды по умолчанию для папки (например, "Открыть"), а в нем подраздел Command (то есть так же, как и для любого обычного типа файлов). Введите строку "c: \windows\explorer /n / root…путь к нужной папке…" в качестве значения параметра по умолчанию в подразделе Command. Можете добавить в раздел Shell и другие команды в таком же виде.

— ShellEx, в нем подраздел PropertySheetHandler, а в нем — подраздел с именем, равным имени всего раздела, который вы создали для своей папки (то есть {FD4DF9E0-E3DE-11CE-BFCF-….любые 12 цифр и букв…}). Это, впрочем, не обязательно, но желательно.

— ShellFolder, а в нем — параметр Attributes со значением 0.

Теперь ваша папка стала системным обьектом — таким же, как, скажем, и "Удаленный доступ к сети", «Принтеры». У нее есть свой идентификатор — это длинное выражение в фигурных скобках. Если вы добавите его в качестве имени подраздела в раздел HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\mycomputer\NameSpace, то она появится в окне "Мой компьютер" (имя у нее там будет то, которое вы задали на шаге 2). А чтобы разместить ее на Рабочем столе, добавьте ее идентификатор рядом в раздел Desktop\NameSpace раздела Explorer.

А если вместо строки "c: \windows\explorer…" указать путь к какой-нибудь программе, то тогда получится, что ярлык этой программы вы поместите в окно "Мой компьютер" и сможете запускать ее прямо оттуда!

Некоторые обьекты операционной системы, кроме идентификаторов, имеют еще и словесные имена. В этом случае эти имена отображаются в качестве имен разделов в той же части HKEY_CLASSES_ROOT, что и «внутренние» имена типов файлов и содержат в себе данные об идентификаторе в одном из своих параметров. Их остальные параметры могут хранить различную служебную информацию.

Совет

Для того, чтобы изменить параметры (внешний вид и имя, в частности) системных иконок, найдите разделы с именами, соответствующим их идентификаторам в разделе HKEY_CLASSES_ROOT\CLSID и поменяйте нужные вам параметры в них. Вот идентификаторы некоторых из системных иконок:

{20D04FE0-3AEA-1069-A2D8-08002B30309D} — "Мой компьютеp"

{645FF040-5081-101B-9F08-00AA002F954E} — «Коpзина»

{208D2C60-3AEA-1069-A2D7-08002B30309D} — "Сетевое окpужение"

{FF393560-C2A7-11CF-BFF4-444553540000} — "History"

{992CFFA0-F557-101A-88EC-00DD01 °CCC48} — "Удаленный доступ к сети"

{21EC2020-3AEA-1069-A2DD-08002B30309D} — "Панель управления"

{2227A280-3AEA-1069-A2DE-08002B30309D} — "Принтеры"

Если в «Проводнике» вы создадите папку с именем Имя. Идентификатор, то она превратится в соответствующую папку (верно не для всех идентификаторов, скажем, новый "Мой компьютер" вам так создать не удастся). А добавив параметр InfoTip с строкой в качестве значения в один из таких разделов, можно организовать всплывающую подсказку для соответствующей папки. Добавив некоторые подобные папки в "Главное меню", можно получить весьма интересные результаты.

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

В каждом подразделе раздела CLSID с именем, соответствующем тому или иному идентификатору, находится подраздел InprocServer или InprocServer32, в параметре "По умолчанию" которого указана библиотека,[39] содержащая программы работы с этим обьектом.

С помощью идентификаторов можно редактировать контекстное меню правой кнопки мыши различных файлов, добавляя туда команды работы с этими файлами. Так, к примеру, происходит при установке программы WinZip, после которой в контекстном меню каждого файла и папки появляется пункт "Add to Zip". Многие антивирусные программы, например, Antiviral Toolkit Pro, позволяют вызывать их из контекстного меню какого-либо файла для проверки именно его, помещая команду своего вызова в это меню.

Чтобы добавить возможность вызова программы из какой-либо библиотеки для работы с тем или иным типом файлов, в разделе CLSID создается подраздел вида {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} и как-нибудь именуется в его параметре "По умолчанию". Затем в этом подразделе создается подраздел InprocServer, а уже в его параметре "По умолчанию" указывается путь к библиотеке, в которой располагаются программы для работы с нужным типом файлов.

Далее в подразделе с именем, равным «внутреннему» имени нужного типа файла или его расширению, создается подраздел ShellEx. В нем могут располагаться так называемые «обработчики» — подразделы с именами PropertySheetHandler, DropHandler и т. д., предназначенные для задания различных способов вызова программ для работы с файлами этого типа. И уже именно в них помещаются разделы (с произвольными именами, обычно отражающими названия программ, для которых они предназначены), в параметрах "По умолчанию" которых указываются соответствующие номера идентификаторов.

Идентификаторы, которые указаны в параметрах "По умолчанию" подразделов раздела ContextMenuHandler, добавляют команды связанных с ними библиотек в контекстное меню правой кнопки мыши. Если добавить идентификатор в подраздел раздела DragAndDropHandler (естественно, предварительно создав сам этот раздел), то команда, соответствующая этому идентификатору, будет вызвана, когда файл того типа, для которого все это расписывается, переносится в какую-либо папку при нажатой правой клавише мыши. То, что указано в разделе DropHandler, срабатывает, когда что-либо переносится мышью на сам файл, — например, когда WinRar добавляет файл в архив при его перетаскивании на иконку архива.

Если в разделе ShellEx раздела реестра с именем, соответствующим «внутреннему» имени какого-либо типа файла или его расширению, создать подраздел PropertySheetHandler, а в нем — подраздел с идентификатором в параметре "По умолчанию", то команда из библиотеки, на которую указывает этот идентификатор, выполняется при вызове пункта «Свойства» контекстного меню правой кнопки мыши файла этого типа и позволяет добавлять к окну свойств файла дополнительные вкладки. Например, так поступает программа DFolder (о ней рассказано в следующей главе), присоединяя к окну свойств папок вкладку с указанием занимаемого файлами этой папки физического места на жестком диске (рис. 14.5).

Рис. 14.5. Возможность появления в меню «Свойства» каждой папки такого окна, как справа, дана параметром в разделе PropertySheetHandler, показанном слева

Именно благодаря возможности использования подобных обработчиков ContextMenuHandler, PropertySheetHandler и др. программы могут изменять меню правой кнопки мыши как им необходимо. К примеру, добавлять в окно свойств окна для быстрого просмотра изображений. Причем такое окно появляется не для всех типов файлов, а только для тех, в подразделе ShellEx которых присутствует обработчик PropertySheetHandler, а в его подразделе указан нужный идентификатор, — то есть только для файлов картинок.

Параметры и разделы, изменяющие контекстное меню, вносятся программами в реестр при их инсталляции или из диалоговых окон самих программ.

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

В операционных системах Windows 2000 и Windows XP данный раздел реестра устроен практически так же, как описано выше.

Краткий вывод. Каждый тип файлов, зарегистрированный в системе, представлен в разделе HKEY_CLASSES_ROOT системного реестра в двух местах:

1. В начале раздела, в подразделе с именем расширения этого типа файлов с точкой вначале. Здесь приводится «внутреннее» имя этог типа файлов, а также информация о включении данного типа в меню "Создать…".

2. В подразделе с именем, соответствующим «внутреннему» имени. Здесь указывается «официальное» имя этого типа файлов, а также указывается его иконка и определяются пункты контекстного меню правой кнопки мыши для него.

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

Пользовательский модуль

Следующий раздел системного реестра, если идти по порядку — HKEY_CURRENT_USER. Это — информация, которая меняется от пользователя к пользователю. При входе в операционную систему под другим именем эта часть реестра будет другая. Он состоит из большого количества подразделов.

В разделе AppEvents записана информация о звуковых схемах и назначенных звуках в системе. Именно здесь хранятся те данные, что вы вводите в диалоге Звук Панели управления.

Раздел Clock, как нетрудно понять, посвящен часам — именно тем, что торчат в углу панели задач. Здесь — все их параметры.

Раздел Control Panel содержит в себе информацию о настройках внешнего вида операционной системы. Это, пожалуй, один из самых интересных разделов реестра, так как именно здесь настраиваются разного рода «красивости» интерфейса Windows. Подраздел Appearance содержит в себе информацию о всех возможных цветовых схемах Windows. Эти схемы закладываются в реестр при его создании и именно отсюда берутся данные для окна Свойства экрана — Оформление (рис. 14.6).

Рис. 14.6. А вот и схемы оформления…

В подразделе Colors расположена информация об оформлении стандартных элементов интерфейса Windows — границ окон, поверхности кнопок и их краев, полос заголовка окна и прокрутки и т. д. Все цвета представлены в виде трех чисел — интенсивности их красного, зеленого и синего компонентов. Некоторые из этих параметров могут быть заданы при создании цветовой схемы, а некоторые — изменены только в реестре. Если хотите, можете немного поиграть с интерфейсом вашей системы.

В подразделе Cursors хранится информация о выбранном наборе изображений курсора и о всех стандартных наборах таких изображений.

Подраздел Desktop и его подразделы посвящены оформлению рабочего стола. Информация о шрифтах окон и меню, отображении полос прокрутки находится здесь. Однако большую часть параметров этого подраздела крайне желательно изменять не из редактора реестра, а из стандартных диалоговых окон, так как, в частности, запись используемых шрифтов здесь ведется в своем особом формате. Некоторые параметры вполне могут корректироваться и впрямую в реестре — скажем, если вы хотите удалить пароль скринсейвера, поставьте значение параметра ScreenSaveUsePassword в 0 (сам пароль хранится в параметре ScreenSave_Data).

Другие подразделы раздела Control Panel имеют чисто служебное значение. Там могут храниться данные о назначении кнопок мыши и т. д.

Раздел Identities, если он у вас есть, используется почтовой программой Outlook Express для хранения информации об имеющихся идентификационных записях (попросту — своих пользователях). Здесь расположены настройки Outlook Express для каждого из пользователей, каждому из которых отведен свой подраздел. Например, в одном из многочисленных подразделов раздела Identities можно найти параметр WindowTitle (а можно и не найти). Именно в нем записана та строка, которая отображается в заголовке Outlook Express, на самой верхней синей полосе окна. Также в этом разделе хранится информация о всех учетных записях почты и новостей всех пользователей Outlook Express, за исключением активного — того, на которого Outlook Express была настроена при последнем выходе из этой программы.

Раздел Keyboard layout посвящен раскладкам клавиатуры, а InstallLocationsMRU — путям к некоторым драйверам. Оба раздела — чисто служебные и особого интереса не представляют. В разделе Network находятся параметры локальной сети, если компьютер к ней подключен. Изменять параметры всех этих разделов из редактора реестра не стоит.

В разделе RemoteAccess записаны параметры соединений удаленного доступа: имена соединений, телефоны и некоторые настройки. Однако паролей, столь часто интересующих хакеров, тут нет — они хранятся в файлах. pwl в папке Windows в зашифрованном виде.

В HKEY_CURRENT_USER могут быть и другие разделы, созданные разными установленными программами.

И, наконец, последний и наиболее обширный раздел — это раздел Software. Параметры установленных программ — в том числе и самой Windows! Однако свои параметры в этот раздел пишут не все программы, а лишь те, которые поддерживают многопользовательский режим, то есть допускают различные свои настройки для разных пользователей Windows. (Остальные размещают свои данные в аналогичном разделе ключа HKEY_LOCAL_MACHINE.) В самом разделе Software полагается помещать не подразделы с названиями программ, а подразделы с названиями их фирм-производителей, а уже лишь в них — названия программ. (Это, впрочем, не обязательно для соблюдения программистами.)

В подразделе Microsoft расположены настройки установленных на компьютере программ, выпущенных этой фирмой. В его подразделе Internet Account Manager находятся настройки учетных записей текущего пользователя программы Outlook Express. Рядом с ним можно видеть подраздел с именем этой программы, тоже полный всяческих настроек.

При смене текущего пользователя Outlook Express содержимое этих разделов заменяется на соответствующее из раздела HKEY_CURRENT_USER\ Identities. Рядом — раздел Internet Explorer: чьи настройки там находятся, думается, ясно.

Для того, чтобы через целый лес из имен программ и фирм добраться до настроек вашей операционной системы, найдите в разделе Software подраздел Microsoft, а в нем — подраздел Windows. Там откройте подраздел CurrentVersion (обычно он один). И вот — перед вами еще один блок настроек операционной системы! Количество подразделов здесь может варьировать — в зависимости от «навороченности» вашей Windows: и Internet Explorer, и MS Office могут добавить сюда пару компонентов.

В подразделе Applets

(ключа HKEY_CURRENT_USER\Software\ Microsoft\Windows\CurrentVersion, если вы еще не забыли) расположены настройки стандартных программ Windows. Тут и старые знакомые Defrag и FreeCell, Hearts и Paint, и System Monitor с Media Player'ом. Иногда вы можете найти параметры с названиями вроде «WindowOriginY» или просто «Y» или «X». Это — записано местоположение окна программы при последнем выходе из нее, чтобы при следующем запуске оно располагалось на том же самом месте, что и в прошлый раз. (А вас никогда эта способность Windows не удивляла?).

В подразделе Internet Settings вы также встретите некоторые настройки браузера Internet Explorer. С ними особо разбираться не следует — все равно все можно настроить через диалоговые окна самого браузера.

В подразделе Policies можно запретить интерфейсу Windows отображать определенные свои компоненты. Установив параметр NoNetHood раздела Explorer в 1, вы скроете пиктограмму Сетевого окружения с Рабочего стола. А установив параметр NoDispScrSavPage раздела System в 1, вы запретите отображать вкладку установки скринсейвера в Свойствах экрана, тем самым в определенной степени предотвратив чью-нибудь злую шутку по установке пароля на скринсейвер в ваше отсутствие. В принципе названия почти всех параметров в этом разделе вполне понятны. Только не ставьте параметр DisableRegistryTools в 1 — после этого вы больше regedit.exe запустить не сможете. Придется восстанавливать реестр как после краха системы или писать специальный. reg — файл для удаления этого параметра. Или искать другие редакторы реестра, созданные не Microsoft.

Подраздел Run — это то место, которое вам надо посещать как можно чаще. Это — одно из двух мест в системном реестре, где прописаны пути к автозагружаемым программам. Указав здесь путь к программе, вы добьетесь того, что она будет загружаться каждый раз при запуске Windows. Этим местом часто пользуются троянские программы (те которые выполняют какие-либо вредоносные функции по отправке информации на удаленный компьютер, например, паролей для доступа в Интернет) для своего автоматического запуска при загрузке компьютера (чтобы, скажем, при установлении соединения с Интернет отправить своему создателю ветвь HKEY_CURRENT_USER\RemoteAccess вашего реестра). Поэтому если вы здесь обнаруживаете запись, ведущую на подозрительный файл — смело удаляйте или хотя бы попробуйте выяснить, откуда эта программа и что она делает. Однако это не единственное место автозапуска программ — аналогичный раздел есть и в HKEY_LOCAL_MACHINE.

В составе Windows98 есть программа msconfig.exe (рис. 14.7). Она работает и в Windows95. С помощью этой программы можно просмотреть список автозагружаемых программ и удалить явно лишние.

Рис. 14.7. Программа Msconfig даст вам возможность редактировать разделы Run, не запуская Редактор реестра.

Расположенный рядом подраздел RunOnce отличается от подраздела Run тем, что программы, пути к которым записаны в нем, запустятся всего лишь один раз, после чего их имена отсюда будут выкинуты. Этим ключом часто пользуются деинсталляторы, — вы ведь наверняка видели сообщение деинсталлятора, что "для завершения деинсталяции требуется перезагрузка компьютера"? При этом деинсталлятор прописывает сюда код для удаления оставшихся файлов, которые до перезагрузки использовались операционной системой и потому удалены быть не могли. Трояны могут прописываться и здесь, так что регулярно просматривать этот подраздел — дело полезное.

Подраздел Explorer — самый большой из всех подразделов подраздела CurrentVersion. Это — параметры, пожалуй, самой используемой программы из поставки Windows, кроме нее самой — «Проводника». В нескольких его подразделах размещается информация, местонахождение которой вы наверняка давным-давно хотели узнать. Итак — вот она.

Вас никогда не интересовало, каким образом Windows сохраняет информацию о расположении значков на Рабочем столе и в папках, которые вы оставили открытыми, выходя из Windows? Если интересовало — то загляните в подраздел Streams. Видите там 200 подразделов? Это — заготовки для сохранения информации о расположении значков. В некоторых из подразделов можно найти параметр ViewView. Здесь такая информация уже запомнена. Открыв этот параметр двойным щелчком мыши, можно увидеть длинное шестнадцатиричное число, а справа — его «перевод» на обычный символьный язык. И среди мешанины символов будут видны (конечно, не у всех таких параметров) имена ваших файлов, находящихся в какой-то одной папке. Значит, именно в этом разделе хранится информация о расположении значков в ней. Вы можете найти раздел с параметром ViewView, содержащим имена файлов на вашем Рабочем столе, экспортировать его в файл реестра и затем импортировать обратно при необходимости восстановить расположение иконок на экране. Но такой экспорт надо будет производить после каждого важного изменения расположения или состава значков Рабочего стола.

В подразделах RunMRU и Doc Find Spec MRU содержится то, что вы когда-либо вводили в окна "Выполнить…" и "Найти…" (рис. 14.8). Почистите эти разделы или, наоборот, дополните их согласно вашей необходимости, если желаете.

Рис. 14.8. А вот где находится содержимое окна Пуск-Выполнить.

В подразделах Shell Folders и User Shell Folders содержится информация о расположении служебных папок Windows, например, Cookies или History. Если вы пожелаете переместить их в другое место или переименовать, то внесите сюда изменения.

Остальные подразделы и параметры подраздела Explorer настраивают мелкие особенности «Проводника».

Большинство других подразделов подраздела CurrentVersion являются чисто служебными и особого интереса не представляют. Там записаны некоторые параметры некоторых программ из поставки Windows — и не более того. Хотя не забудьте глянуть в ProfileReconciliation, если будете через реестр менять расположение папок Cookies и History.

В разделе HKEY_CURRENT_USER\Software\VB and VBA Program Settings по умолчанию располагаются настройки для всех программ, написанных на языках Visual Basic и VBA. Поэтому загляните и сюда, если вы не нашли имени интересующей вас программы в остальной части раздела Software.

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

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

Системный блок

Следующий раздел реестра — HKEY_LOCAL_MACHINE, хранилище информации о вашем компьютере и о независимых от наличия различных пользователей настройках программ. Он — самый крупный и самый важный из всех разделов реестра. При этом он содержит в себе, в одном из своих подразделов и весь раздел HKEY_CLASSES_ROOT, который вынесен в отдельный ключ реестра лишь для удобства редактирования, и все возможные варианты содержимого раздела HKEY_CURRENT_CONFIG, в который помещается информация из HKEY_LOCAL_MACHINE в зависимости от текущей аппаратной конфигурации. Как HKEY_LOCAL_MACHINE в Редакторе реестра отображается файл System.dat, то есть вся информация HKEY_LOCAL_MACHINE физически содержится именно в этом файле.

Таким образом, HKEY_LOCAL_MACHINE — первый из описанных «реальный» раздел реестра, то есть имеющий под собой "физическую природу" — файл System.dat. (HKEY_CLASSES_ROOT и HKEY_ CURRENT_CONFIG — его подразделы, а HKEY_CURRENT_USER — подраздел HKEY_USERS, второго «реального» раздела реестра).

Подраздел Config содержит в себе данные о зарегистрированных в системе аппаратных конфигурациях. Windows позволяет при регулярных изменениях состава устройств в компьютере (например, при работе с ноутбуком, который имеет «док» — присоединяемую часть с CD-ROM, модемом и др.) не устанавливать и удалять каждый раз драйверы для всех этих устройств, а создать фиксированный набор драйверов для каждого из этих составов устройств и менять эти наборы при необходимости. Такой набор называется аппаратной конфигурацией и устанавливается через окно Панель управления — Система — Конфигурации.

В настоящее время в связи с развитием новых технологий USB и др. устройств "горячего подключения" необходимость в различных аппаратных конфигурациях почти отпала, но их поддержка в Windows присутствует.[40]

В ключе Config под своими номерами располагаются записи о всех созданных конфигурациях, а при загрузке компьютера или изменении конфигурации соответствующий раздел «отражается» в реестре под видом раздела HKEY_CURRENT_CONFIG. Если аппаратная конфигурация одна, то и в разделе Config есть только один подраздел, совпадающий с ключом HKEY_CURRENT_CONFIG.[41]

В разделе HKEY_LOCAL_MACHINE\Config находятся и некоторые настройки операционной системы. Например, в ключе Сonfig\0001 (номер конфигурации)\display\settings указываются шрифты, используемые Windows по умолчанию, например, в «Блокноте». А в параметре Resolution этого раздела расположено указание на экранное разрешение. (Можете его поменять на любые цифры, хоть на 1000*200, и, если ваша видеокарта позволит, то именно такое разрешение экрана и будет.)

Подраздел DesktopManagement посвящен работе системы с библиотекой deskmgmt.dll из каталога Windows\System, отвечающей за работу операционной системы с процессором, памятью и другими устройствами материнской платы компьютера. Здесь записаны команды, обратившись с которыми из другой программы к этой библиотеке, можно получить соответствующие данные.

Подраздел Enum содержит информацию о распознанных операционной системой устройствах компьютера.

В Windows 9x есть несколько важных программных компонентов, отвечающих за обнаружение устройств и предоставление их для работы другим компонентам системы. Основными среди них являются два — диспетчер конфигурации и энумератор. При загрузке компьютера диспетчер конфигурации опрашивает BIOS и получает от него информацию о всех устройствах, не поддерживающих стандарт Plug&Play, а затем заносит ее в реестр, в этот самый раздел Enum. Затем в дело вступает программа-энумератор, которая считывает из реестра информацию о не-Plug&Play устройствах, а затем опрашивает имеющиеся в компьютере Plug&Play-устройства и составляет список всех имеющихся устройств, назначив каждому единственный идентификатор — так называемый HardwareID.

Затем основная роль вновь переходит к диспетчеру конфигурации, который на основании предоставляемой энумератором информации о наличии устройств и их характеристике (Plug&Play или нет) распределяет между устройствами прерывания, адреса ввода-вывода и другие ресурсы системы. В этом ему помогают специальные подпрограммы — «арбитры», которые изменяют выделяемые ресурсы так, чтобы не было ресурсов, используемых одновременно двумя устройствами.

Вначале распределяются ресурсы между не-Plug&Play устройствами (информация о которых пришла еще из BIOS), а затем — между Plug&Play, так как последние умеют работать с разными настройками распределения ресурсов без изменения своей аппаратной части, и переназначить им, например, прерывания можно программно. Все внесенные изменения фиксируются в разделе Enum, а также в разделе HKEY_LOCAL_MACHINE\System\CurrentControlSet\ Services\Class, содержащем совокупность информации о распознанных устройствах, а также о загруженных для них драйверах, на подразделы с данными о которых в разделе Enum имеются ссылки.

Подраздел HKEY_LOCAL_MACHINE\Hardware, несмотря на многообещающее название, хранит в себе немного информации о имеющихся последовательных портах и установленных на них модемах.

Подразделы Network и Security содержат малозначащие параметры сети Microsoft Network (интересно, в России кто-нибудь хоть когда-нибудь ей пользовался?).

И вот, наконец, — второй подраздел Software, на этот раз уже состоящий из универсальной для всех пользователей данного компьютера информации. Как и ранее, он состоит из разделов с именами компаний-производителей с подразделами внутри них, посвященных отдельным программам. В разделе HKEY_LOCAL_MACHINE\Software\Microsoft расположены настройки самой Windows и ее компонентов, а также всех программ Microsoft. Например, в подразделе Active Setup этого раздела находятся параметры системы установки компонентов Windows через Internet — Active Setup. В его подразделе Installed Components вы увидите все компоненты Internet Explorer, которые вы выбирали (или нет) при установке этого браузера. В подразделе Shared Tools раздела HKEY_LOCAL_MACHINE\Software\Microsoft находится список программ и библиотек пакета MS Office, которыми могут пользоваться другие компоненты этого пакета (скажем, "галерея клипов", которая может быть вызвана из любого приложения MS Office), с указанием пути к каждому из них.

Но, конечно, как и в прошлый раз, самым интересным местом здесь будет подраздел Windows\CurrentVersion, относящийся к операционной системе. В самом CurrentVersion, даже не в его подразделах, есть весьма полезные параметры. Скажем, именно здесь находится информация, отображающаяся в верхней части окна Панель управления — Система — Общие.

Подраздел AppPaths раздела CurrentVersion — это Windows'ский аналог параметра Path из файла autoexec.bat. Можно еще назвать его реестровым собранием ярлыков программ. Здесь можно указать пути к различным программам и имена для их запуска, а затем набирать эти имена в окне «Выполнить» для вызова этих программ, не заботясь об указании пути к ним (рис. 14.9).

Рис. 14.9.Укажите в этом разделе имя для запуска программы и путь к ней и не заботьтесь о задании правильного пути в окне "Выполнить"

Подраздел Explorer опять-таки посвящен программе «Проводник», но уже — ее общим настройкам. В подразделах Desktop\NameSpace и Mycomputer\NameSpace находятся идентификаторы тех обьектов, которые должны быть расположены на Рабочем столе и в папке "Мой компьютер", например, «Корзина» или "Удаленный доступ к сети". Вы можете удалить отсюда ненужные обьекты или, наоборот, добавить сюда желаемые, создав вначале для них идентификаторы в разделе HKEY_CLASSES_ROOT, как описано выше.

В параметрах подразделов LastCheck и LastOptimize (подраздела Explorer подраздела CurrentVersion) содержится информация о последнем моменте дефрагментации или проверки жестких дисков компьютера.

В подразделе Tips вы найдете все советы, отображающиеся при первом запуске компьютера с Windows (рис. 14.10). Их можно просмотреть и с помощью программы welcome.exe из каталога Windows.

Рис. 14.10. Склад полезных советов для окна "Добро пожаловать в Windows". (Когда вы, кстати, видели это окно в последний раз?)

Подраздел Fonts хранит в себе информацию об именах шрифтов и их соответствии названиям файлов. Вы, кстати, никогда не удивлялись, почему в «Проводнике» и в Norton Commander содержимое папки Windows\Fonts выглядит по-разному (рис. 14.11)? Да потому, что Norton Commander берет информацию об именах файлов в этой папке из каталога, а «Проводник» — вот из этого раздела реестра. Почему копирование шрифтов в папку Fonts длится значительно дольше, чем в любую другую папку? Да потому, что еще в реестре их все надо прописать, да еще перед этим из каждого извлечь полное имя! Еще бы не дольше было…

Рис. 14.11. Сравните окна слева внизу и справа внизу. В чем причина разницы? В окне сверху.

В подразделе MS-DOS Emulation, в его подразделе AppCompat находится список программ MS-DOS, которые могут работать только в "Режиме MS-DOS", а не в окне "Сеанса MS-DOS" и требуют выгрузки Windows для своей работы (рис. 14.12).

Рис. 14.12. Имя этой программы было прописано здесь в реестре — и вот что вышло из попытки ее запуска. (А вы небось думали, что Windows как-то программы анализирует и думает, «пойдет» она под ней или нет? Как же…)

Из следующего подраздела реестра, MS-DOS Options, берутся параметры для диалоговых окон при настройке ярлыков программ MS-DOS для особой конфигурации "Режима MS-DOS". Именно с помощью этих параметров можно удобно настроить файлы autoexec.bat и config.sys для каждого ярлыка программы, работающей в "Режиме MS-DOS". Только настраивать их, разумеется, лучше все же через Свойства ярлыка.

Подразделы Run, RunServices, RunOnce, RunOnceEx, RunServicesOnce содержат в себе указания на программы, которые должны запуститься автоматически при запуске Windows. Выше уже рассказывалось про аналогичный раздел в ключе HKEY_CURRENT_USER, программы в котором запускались при начале сеанса работы данного пользователя, ну, а программы, указанные здесь, запустятся в любом случае. Почаще навещайте этот раздел — здесь могут прятаться трояны! (Три последних подраздела из перечисленных запустят указанную в них программу лишь один раз.) Именно здесь, в подразделе Run находится команда вызова программы резервирования реестра scanregw.exe.

В разделе HKEY_LOCAL_MACHINE\ SOFTWARE\Microsoft\Windows\Current Version\Policies, в его подразделе Ratings есть параметр Key. Сотрите его, если вы случайно в процессе исследования Microsoft Internet Explorer задали пароль на ограничение доступа к отдельным ресурсам Интернета (Свойства обозревателя — Содержание — Ограничение доступа) и благополучно забыли его.

Если вы хотите изменить путь к установочным файлам Windows (например, если вы поставили Windows с компакт-диска, а затем поместили ее дистрибутив на винчестер и желаете, чтобы при любой установке драйверов или своих компонентов она обращалась именно туда), то введите в параметр SourcePath раздела HKEY_LOCAL_MACHINE\ SOFTWARE\Microsoft\Windows\Current Version\Setup нужный путь.

В подразделе Time Zones приведен список настроек всех возможных часовых зон из меню настройки местного времени. (Параметры же установленной временной зоны размещаются ниже, в разделе HKEY_LOCAL_MACHINE\ System\CurrentControlSet\control\TimeZoneInformation.)

Подраздел Uninstall (подраздела Explorer подраздела CurrentVersion) содержит в себе пути и параметры деинсталляторов для всех программ, которые допускают такую возможность. Именно отсюда берется информация для представления в окне Панель управления — Установка и удаление программ. Параметр DisplayName определяет название программы, которое в этом окне будет отображаться.

Если вы хотите напугать какого-нибудь любителя "Color Lines" или «Сапера», кто включит ваш компьютер без вашего ведома, вставьте в раздел HKEY_LOCAL_MACHINE\SOFTWARE\ Microsoft\Windows\ CurrentVersion\Winlogon параметры LegalNoticeCaption и LegalNoticeText с каким-нибудь текстом. Тогда при загрузке Windows будет отображаться окошко с этими данными (рис. 14.13).

Рис. 14.13. Любителя без спросу поиграть на вашем компьютере в «Сапера» подобная надпись может здорово напугать

Ну, а теперь закончим описание раздела HKEY_LOCAL_ MACHINE\Software\Microsoft\Windows\ CurrentVersion и перейдем к самому последнему подразделу ключа HKEY_LOCAL_MACHINE — System, к его единственному подразделу CurrentControlSet. В этом подразделе содержатся два ключа: Сontrol и Services. Параметры этой части реестра не менее важны, чем, скажем, подраздела Enum, так как содержат в себе многие настройки системы. Но большая их часть — чисто служебная и изменять их через редактор реестра не стоит. Впрочем, можно слегка пробежаться по наиболее интересным разделам.

В подразделе FileSystem записаны некоторые параметры работы операционной системы с носителями информации с другой файловой системой вроде CD-ROM.

Подраздел Keyboard layouts содержит список возможных раскладок клавиатуры и имена соответствующих им файлов с раскладками (установлены могут быть отнюдь не все эти файлы).

Подраздел Nls посвящен кодовым страницам, которые поддерживаются системой. В его подразделе Codepage каждому номеру кодовой страницы (например, «1251» — кодировка Windows-1251) поставлен в соответствие файл, содержащий информацию об этой кодовой странице, а в подразделе Locale — имена этих кодовых страниц. Иногда проблемы с отображением русских символов в некоторых программах вроде AdobePhotoshop можно устранить, поставив значение параметра «1252» в разделе HKEY_LOCAL_MACHINE\System\ CurrentControlSet\control\Nls\Codepage в "CP_1251.nls".

Подраздел PerfStats посвящен состоянию системы и несколько подробнее описан ниже.

Подраздел SessionManager посвящен старым приложениям MS-DOS. В подразделе CheckBadApps содержится список программ MS-DOS, которые могут быть несовместимы с Windows. Наверное, вы пробовали из-под Windows запустить Norton Commander для MS-DOS и получали сообщение, что программа некорректно работает в этой операционной системе? Так вот для каждой программы MS-DOS, при попытке запуска которой выдается такое сообщение, есть свой подраздел с именем ее запускающего файла в подразделе CheckBadApps, а в нем — параметр с именем запускающего файла (рис. 14.14), в котором указано число. Это число — указатель на номер справочного раздела в файле Apps.hlp из папки Windows\Help, в котором рассказано, почему данная программа некорректно работает в Windows.

Рис. 14.14. Для любой программы MS-DOS можно создать здесь раздел, и тогда при попытке ее запуска будет выводиться подобное предупреждение.

Подраздел CheckBadApps400 имеет то же самое предназначение, что и предыдущий, но в нем размещены имена программ для Windows 3.х, а не для MS-DOS.

Подразделы подраздела SessionManager с буквами «DLL» в имени хранят в себе имена системных библиотек, с которыми работает Windows, в зависимости от имени раздела — 16-ти или 32-х — разрядных. А в подразделе WarnVerDLLs приводятся имена библиотек, совместимость которых с Windows вызывает у нее "подозрения".

Подраздел TimeZoneInformation (подраздела System\Current ControlSet\control) хранит в себе информацию о текущей временной зоне.

В следующем большом подразделе HKEY_LOCAL_MACHINE\ System\CurrentControlSet\Services содержится в основном служебная системная информация. Некоторые из его подразделов очень важны для операционной системы.

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

Подраздел Class перекликается по своему содержанию с описанным выше разделом HKEY_LOCAL_MACHINE\Enum, частично беря свои данные из него, и содержит в себе информацию об установленных и распознанных устройствах. Именно из него берется информация для отображения в окне Панель управления — Система — Устройства (рис. 14.15).

Рис. 14.15.Основа основ компьютера — раздел устройств. Все окно «Устройства» — здесь. И даже разбиение списка устройств на ветки в этом окне такое же, как и ключей в реестре

Таким образом, этот подраздел фактически является "реестром в реестре" — базой данных по устройствам, «железу», установленным в компьютере. В него включена информация, поставляемая энумератором и диспетчером конфигурации и записанная в разделе HKEY_LOCAL_MACHINE\Enum, а также данные о загруженных драйверах устройств и их параметрах (к примеру, строка инициализации модема помещается в ключе Class\Modem\0000\Init). Вспомните, кстати, что в Enum'е были ссылки на драйвера устройств вида Driver = DiskDrive\0001. Так вот это были ссылки именно на подразделы этого раздела Class, в чем нетрудно убедиться.

То есть — раздел HKEY_LOCAL_MACHINE\System\Current ControlSet\ Services\Class является основным держателем информации об устройствах компьютера, назначенных им ресурсах и загруженных для них драйверах. Именно он поставляет информацию в окно Панель управления — Система — Устройства. Раздел HKEY_LOCAL_ MACHINE\Enum тесно связан с этим разделом и хранит «технические» данные для каждого устройства. В разделе HKEY_DYN_DATA располагаются данные о текущем состоянии каждого из устройств.

В разделах HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\ Class и HKEY_LOCAL_MACHINE\Enum размещается информация лишь об имеющихся устройствах, об их характеристиках и назначенных ресурсах. Информация же о конкретной работе устройств, о том, исправны они или нет, находится в разделе реестра HKEY_DYN_DATA, который постоянно находится в оперативной памяти.

Остальная часть раздела HKEY_LOCAL_MACHINE\System\CurrentControl Set\Services содержит данные некоторых программ и особого интереса для пользователя не представляет.

В системном реестре Windows 2000/XP по сравнению с реестром Windows 9х похожую структуру имеет лишь подраздел HKEY_LOCAL_MACHINE\Software, однако настройки операционной системы, в частности, таблица соответствия имен шрифтов и их файлов, находятся не только в его подразделе Microsoft\Windows, но и в подразделе Microsoft\WindowsNT. Остальные подразделы имеют другую структуру и другое предназначение. Кроме того, к перечисленным выше местам реестра, указанные в которых программы запускаются автоматически при старте Windows, в Windows 2000/XP добавились еще параметры Userinit раздела HKEY_LOCAL_MACHINE\ Software\Microsoft\Windows NT\CurrentVersion\Winlogon и Load раздела HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows.

Общий модуль

HKEY_USERS — второй «реальный» раздел реестра. Он состоит из одного или двух больших подразделов. В любом случае один из них называется. Default и является разделом HKEY_CURRENT_USER для конфигурации пользователя Windows по умолчанию (если в Windows зарегистрировано несколько пользователей, то ее можно загрузить, нажав Esc при запросе пароля на входе в Windows). Если в Windows зарегистрирован один пользователь, то раздел. Default будет единственным и совпадать с HKEY_CURRENT_USER, а если нет, то в HKEY_USERS будет еще один раздел, чье имя будет совпадать с именем текущего пользователя, и именно этот раздел будет отражен в реестре еще раз под именем HKEY_CURRENT_USER.

В системном реестре Windows 2000/XP раздел HKEY_USERS тоже присутствует и выполняет ту же функцию — хранит в себе варианты раздела HKEY_CURRENT_USER для каждого из пользователей, зарегистрированных в операционной системе.

Ключи конфигурации

HKEY_CURRENT_CONFIG — это описание текущей конфигурации оборудования компьютера. Этот раздел является отражением одной из ветвей раздела HKEY_LOCAL_MACHINE\Config, в котором описаны все созданные в системе конфигурации оборудования. Сами эти конфигурации создаются с помощью диалогового окна Панель управления — Система — Конфигурации. Когда конфигурация меняется, меняется и содержимое раздела HKEY_ CURRENT_CONFIG — он начинает «отражать» уже другую ветвь раздела HKEY_LOCAL_MACHINE\ Config.

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

В системном реестре Windows 2000/XP этот раздел устроен совершенно по-другому, хоть и выполняет похожую функцию.

Железный ключ

HKEY_DYN_DATA — пожалуй, самый недокументированный раздел реестра. Отчасти это обьясняется тем, что данные в этом разделе создаются и корректируются автоматически. Любое вмешательство пользователя может лишь нарушить работу компьютера, — здесь нет ничего такого, что требовало бы необходимости редактирования через Редактор реестра. Интерес этот раздел представлял, скорее всего, лишь для разработчиков самой Windows на стадии ее отладки, а также, может быть, для разработчиков драйверов различных устройств компьютера. Но, так как уж он присутствует в системном реестре, то и программа regedit.exe его отображает.

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

В разделе HKEY_ DYN_DATA находятся два подраздела. Первый из них, HKEY_DYN_ DATA\Config Manager\ Enum посвящен состоянию «железа» компьютера. Если в разделе HKEY_LOCAL_MACHINE\System\CurrentControlSet\ Services\Class расположена информация о том, какие устройства установлены в компьютере, то в этом разделе — данные об их функционировании, о том, как они работают — исправно или нет. Информация в окне Панель управления — Система — Устройства формируется из содержимого обоих этих разделов.

Второй же раздел, PerfStats — это раздел статистики. Он связан (но не является «отражением», как, скажем, HKEY_CLASSES_ROOT) с разделом HKEY_LOCAL_MACHINE\System\CurrentControlSet\control\Perf Stats (рис. 14.16) и содержит статистическую информацию по параметрам этого раздела. Можно сказать, что в HKEY_LOCAL_ MACHINE\System\CurrentControlSet\Control\ PerfStats перечислены параметры статистики системы, а в HKEY_DYN_DATA\ PerfStats — их значения. Именно отсюда берет свои данные программа Системный монитор.

Рис. 14.16. Статистический центр системы. Хотите посмотреть эти данные? Не лазьте в реестр — запустите Системный монитор, и увидите то же самое

Назначение раздела HKEY_DYN_DATA — постоянно находиться в оперативной памяти и поставлять системе информацию о состоянии устройств компьютера по первому ее требованию. Чтобы в этом случае не пришлось ничего загружать в память, а все там уже было. Можно было бы, конечно, перенести всю эту информацию в раздел HKEY_ LOCAL_MACHINE, в соответствующие ключи, но тогда быстродействие системы бы серьезно замедлилось. А так — раздел не очень большой и не содержит в себе ничего, кроме данных для системы, — ни названий, ни пояснений. Чисто служебная информация.

В системном реестре Windows 2000/XP данный раздел отсутствует.

* * *

Возможно, конечно, что Ваш реестр в деталях несколько отличается от структуры, которая была здесь описана. Это вполне естественно, так как содержимое реестра во многом зависит от набора программ, установленных на компьютере, да и от самой операционной системы. Наличие или отсутствие установленных Microsoft Internet Explorer и Microsoft Office сильно влияют на состав реестровых ключей и параметров. Но общий план — всегда одинаков.

Куски реестра в файлах

При экспортировании фрагмента реестра или его всего на жестком диске создается обычный текстовый файл с расширением. reg. Файл реестра имеет жестко регламентированную структуру. На рис. 14.17 показан пример раздела реестра и он же, экспортированный в текстовый файл — обратите внимание на структуру этого файла.

Рис. 14.17. Фрагмент реестра, экспортированный в текстовый файл.

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

(Некоторые файлы с расширением. reg, содержащиеся, к примеру, в дистрибутивах каких-либо программ, могут содержать не очень корректные данные и тем самым испортить ваш реестр при внесении своего содержимого в него. Поэтому настоятельно рекомендуется в меню Вид — Параметры — Типы файлов (любой папки) найти пункт "Файл реестра" и назначить ему в качестве действия по умолчанию не обьединение с реестром, а открытие, скажем, Блокнотом. При этом опасность порчи реестра при случайном двойном клике на таком файле будет предотвращена.)

Ниже команды Regedit4 находятся ключи, вносимые в реестр. Для каждого вносимого в реестр имени раздела должна быть выделена отдельная строка. Полное имя раздела (сокращения не допускаются) помещается в квадратные скобки. Имена параметров этого раздела приводятся по одному на строке, начиная за следующей сразу за именем раздела, в кавычках, рядом на той же строке — их значения. Значения строковых параметров должны приводиться в кавычках, значения параметров типа Dword — в виде шестнадцатиричной строки dword:00000000 (без кавычек), значения двоичных параметров — в шестнадцатиричной системе в виде строки hex:14,00,00,00 (без кавычек).

Если в значении строкового параметра встречается символ "\", то он заменяется (в экспортированном файле реестра) на пару таких символов. Сам символ "\" используется для переноса слишком длинных строк. Имя каждого раздела или подраздела, вносимого в реестр, независимо от его иерархического расположения, должно писаться полностью и на отдельной строке. Между описаниями каждого из разделов и в конце файла должно находиться по одной пустой строке. Символ "@" соответствует параметру "По умолчанию".

С помощью такого файла можно также и удалять записи из системного реестра. Для этого нужно перед именем раздела поставить знак «-»: "[-HKEY_LOCAL_MACHINE\……..]".

Если хотите более подробно поисследовать формат файлов. reg — экспортируйте большой раздел в такой файл и посмотрите, что у вас получилось.

Немного полезных советов

1. Если вы используете браузер Microsoft Internet Explorer, то наверняка знакомы с эмблемой Microsoft в правом верхнем углу окна браузера. Во время загрузки страницы эта эмблема вращается. Если хотите, можете заменить эмблему Windows на свой собственный символ. Создайте два bmp-файла — 38*1520 и 24*960 пикселов. В каждом из них нарисуйте последовательность кадров размером 38*38 и 24*24 пикселов, как, скажем, на рисунке:

Также сделайте отдельные bmp-файлы с картинками размером в 38*38 и 24*24 пикселов. А затем пропишите пути к первым двум файлам в параметрах BrandBitmap и SmBrandBitmap раздела HKEY_CURRENT _USER\Software\ Microsoft\Internet Explorer\Toolbar, а ко вторым — в параметрах BigBitmap и SmallBitmap раздела HKEY _LOCAL_MACHINE\SOFTWARE\ Microsoft\Internet Explorer\Main. После перезагрузки браузера изображения из файлов с последовательностью кадров будут выводится в момент путешествия по Интернет, а из файлов с отдельными кадрами — при полностью загруженной web-странице.

2. В процессе работы системный реестр из-за особенностей действий с ним операционной системы обрастает лишними двоичными данными. Они не имеют никакого значения для программ, обращающихся к реестру, но занимают место. Для того, чтобы избавиться от них, загрузитесь в Режиме MS-DOS и из командной строки запустите команду regedit /e file.reg, а когда она закончит работу — команду regedit /с file.reg. При этом реестр будет экспортирован в текстовый файл, а потом загружен обратно. Все лишние двоичные данные исчезнут, а размер реестра станет меньше. Данный прием работает исключительно в среде Windows9x.

Заключение. Смело — вперед!

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

А ведь между тем у вас есть все инструменты для того, чтобы системный реестр открывал перед вами все новые свои тайны. Этот инструмент — ваши глаза и руки, ваш разум и память. Наблюдайте, исследуйте, делайте выводы, экспериментируйте (естественно, приняв все меры предосторожности!), — и тогда вы не на чьих-то словах, а на собственном опыте узнаете многие и откроете новые секреты этого недокументированного сердца Windows — системного реестра.

Глава 15. Экраны на жидких кристаллах

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

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

Называются эти экраны жидкокристаллическими — по основному их компоненту. По-английски это название звучит как Liquid Crystal Display, или сокращенно LCD. А действует он так.

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

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

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

А теперь представьте себе «бутерброд» из двух поляризационных фильтров с плоскостями поляризации, перпендикулярными друг другу, а между ними — слой жидких кристаллов. Если эта конструкция находится вне электростатического поля, то свет проходит через первый фильтр, поляризуется, поворачивает свою плоскость поляризации на 90 градусов в слое кристаллов и свободно проходит через второй фильтр.

Но если на слой жидких кристаллов подать электростатическое поле, то плоскость поляризации проходящего через них света не повернется на 90 градусов и не пройдет через второй фильтр! Получится «затвор» для света — со стороны будет видно, как внезапно трехслойная конструкция стала темной, непрозрачной.

Более того — если изменять напряженность электростатического поля, то прозрачность слоя из фильтров и кристаллов будет постепенно изменяться! То есть при малой напряженности поля трехслойная конструкция будет лишь слегка замутненной, при средней — достаточно темной, а при сильном поле — полностью непрозрачной. Это и понятно — ведь чем мощнее поле, тем сильнее изменяется структура кристаллов и тем большее количество молекул кристаллов изменяют свою конфигурацию.

В LCD-мониторах используется именно этот эффект. Делается матрица из множества мелких жидкокристаллических ячеек. Каждые несколько (обычно три) стоящих вокруг одного центра ячеек соответствуют одному пикселу изображения. За матрицей и перед ней помещаются поляризационные фильтры с перпендикулярными направлениями поляризации. А к одному из этих фильтров прикрепляется сетка из красных, зеленых и синих светофильтров, каждый из которых точно совмещается с соответствующей ячейкой матрицы. К каждой ячейке матрицы подводится микроэлектрод для создания электростатического поля. А за всем этим сооружением размещается лампа для подсветки (рис. 15.1).

Рис. 15.1. Один элемент жидкокристаллического экрана

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

Для просмотра изображения на жидкокристаллическом экране не обязательно иметь подсветку. Можно использовать и отраженный свет. Только в этом случае дальний от экрана поляризационный фильтр следует заменить зеркалом. В этом случае вне действия электростатического поля свет пройдет через наружный фильтр, повернется в слое жидких кристаллов на 90 градусов, отразится от зеркала и снова пройдет через кристаллы, и в результате развернется на 180 градусов, что позволит ему вновь пройти через наружный фильтр. А при наличии на кристаллах электростатического поля этого не произойдет.

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

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

Нетрудно понять все трудности при разработке и производстве жидкокристаллических дисплеев. Во-первых, сделать матрицу с миллионами ячеек с одинаковым качеством нелегко — ведь экран с разрешением 1024*768 точек имеет 786432 точки-пиксела, каждый из которых состоит из трех единиц — красного, зеленого и синего субпикселов. То есть всего в экране такого разрешения должно быть 2359296 (т. е. больше двух миллионов!) жидкокристаллических ячеек. Добиться, чтобы они все полноценно работали, очень трудно — наверняка некоторые из ячеек окажутся дефектными и не будут пропускать свет. Поэтому жидкокристаллические мониторы с большим размером экрана делают из двух-трех отдельных матриц, соединяя их вместе.

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

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

Перспективы

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

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

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

Разработчики считают, что с помощью технологии Gyricon можно достичь такого же качества отображения текста на экране, как и на распечатке лазерного принтера (т. е. 400*600 точек на дюйм). Преимущества такой технологии очевидны — внешний вид текста ничем не будет отличаться от обычного листа бумаги, контрастность будет зависеть всего лишь от насыщенности окраски шариков. Кроме того, дисплей можно сделать гибким. Вместе с тем наличие большого количества движущихся частиц вызывает опасения за долговечность такого монитора — несмотря на масляное заполнение пространства между шариками вполне возможно нарушение их взаиморасположения. Будем надеяться, что исследователям Xerox удастся справиться со всеми этими трудностями.

· Компании E Inc и Bell Labs, подразделения корпорации Lucent Technologies, в своих лабораториях разработали оригинальный способ создания изображения с помощью электрофореза. Общий принцип этой технологии таков. При электрофорезе (который, в частности, давно и успешно применяется в медицинских лабораториях для исследования белкового состава крови) на какой-либо носитель, к примеру, гель или фильтровальную бумагу, помещается смесь солей органических веществ с крупными, но разными размерами молекул, и добавляется растворитель — обычно вода. При этом соли будут диссоциировать — то есть разделяться на неорганический ион и органическую крупную молекулу. Скажем, натриевая соль какого-либо белка разделится на положительно заряженный ион натрия и отрицательно заряженный ион этого белка. Если подать на этот носитель электростатическое поле, то ионы натрия отправятся к отрицательному электроду, а ионы белков — к положительному.

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

Отсюда вытекает и тот способ формирования изображения, который предложили компании E Inc и Bell Labs. На бумагу, ткань, пластик или металл помещается множество прозрачных микрокапсул со смесью солей двух белков в растворителе. Причем один из этих белков имеет большую молекулу и черный цвет, а другой — маленькую молекулу и белый цвет. Если подать на капсулу электростатическое поле, то белый белок передвинется в капсуле к тому ее концу, который окажется заряжен положительно. Скажем, если положительный заряд был подан на поверхность экрана из таких микрокапсул, то в этом месте на экране возникнет белая точка, а если на подложку — то черная.

В настоящее время достигнуто разрешение 600 точек на дюйм, что соответствует распечатке неплохого струйного принтера.

Преимуществами этой технологии является возможность создания контрастного и четкого изображения, а недостатком — малая скорость его обновления — около 10 кадров в секунду. В отличие от описанной выше технологии Gyricon капсулы жестко закреплены и могут располагаться на любом носителе, что повышает надежность экрана, созданного по этой «электрофорезной» технологии. (Представьте себе утреннюю газету на полотенце.) Кроме того, если создать белковые молекулы других цветов, то можно разработать и цветной дисплей — скажем, добавив на носитель капсулы со смесью пурпурного и белого, желтого и белого, голубого и белого цветов.[42]

· Ученые английской компании Cambridge Display Technology обнаружили, что вещество полифениленвинилен может светиться желто-зеленым цветом, если его разместить между парой электродов. Ну, а от такого открытия недалеко и до разработки дисплея на основе ячеек из полифениленвинилена. Уже создан опытный образец с диагональю в 5 см. Такой дисплей светится сам и, в отличие от описанных выше двух технологий, допускает сколь угодно быструю смену кадров. То есть на электронной книге, созданной на основе полифениленвинилена, можно будет без проблем даже поиграть в Quake!

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

Из мира Интернета

· Воздушные сражения с "летающими крепостями" и битвы ракетных установок с «фантомами»… Первая Русско-Израильская война, "звездная баталия" 1982 года и постановка плазменных «облаков» в космосе… Русский «нефтеград» в море юго-восточнее Сайгона и настоящий Китеж в скальных толщах Красноярска… Космические «часовые» страны и генераторы, которые делают невидимыми наши ракеты и истребители… Атаки крылатых роботов в долине Бекаа и убийственный огонь установок «Куб»… Все это не фантастика, а совершенно реальная история нашей родной страны. История Великого противостояния с Западом, длившегося почти полвека. О ней рассказывается в книге Максима Калашникова "Битва за Небеса", представленной на сайте http://sw.rus-idea.com. Вы узнаете о том, какими должны были стать воздушно-космические силы Империи 2000 года и прочтете о русских крылатых ракетах А-101, посрамителях Запада. Вы познакомитесь с планом построения страны-сверхкорпорации, которую так боялись США, услышите подробный рассказ о русской авиации 20 века. На этом сайте вы сможете прочитать главы книги, загрузить ее в архиве, приобрести в Интернет-магазине.

Глава 16. Компьютерная социология

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

С компьютерами работают люди. И, несомненно, такая работа не является однонаправленной: человек, у которого основным рабочим инструментом является компьютер, в определенной степени отличается от остальных. Вследствие этого в среде «компьютерщиков» иногда возникали стихийные течения, оформляющиеся в устойчивые сообщества на основе какой-либо компьютерной профессии, увлечения или даже просто — принципов мировоззрения. Такие сообщества, достигнув большой численности, становились довольно известными. Эта статья посвящена исследованию нескольких наиболее заметных таких сообществ. Как всегда происходит в мире, разумеется, найдется многое, что в небольшой статье отражено не будет. Возможно, некоторые выводы покажутся спорными даже тем, кто сам состоит в описываемых группах. Но… не стоит возмущаться. Здесь вы найдете всего лишь возможный взгляд на весьма интересные явления в компьютерном мире. И не более.

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

Фидошники

Когда-то давно, в те годы, когда сеть Интернет была чисто специальной, военной и очень даже коммерческой, а получить доступ к ней было весьма дорого, Том Дженнингс из Лос-Анджелеса с другом Джоном Мэдиллом из Балтимора разработали весьма интересную систему маршрутизации почты, не требующую для обмена ею наличия постоянных физических соединений между компьютерами. Так возникла Fido — компьютерная сеть, отличительной чертой которой было то, что каждый входящий в нее компьютер в один момент времени мог быть соединен не более чем еще с одним таким же (об этом вы можете более подробно узнать в главе 12). Кроме того, эта сеть была некоммерческой и функционировала исключительно благодаря добросовестности и бескорыстию своих пользователей.

Вследствие особенностей строения FidoNet к ее составляющим предьявлялись особые требования, которые все входящие в эту сеть добровольно выполняли беспрекословно — иначе бы функционирование FidoNet прервалось. Так, отказ узла пересылки почты влек за собой отрезание от остальной сети той части FidoNet, которая этим узлом пользовалась. Отправка в «файл-эху» (т. е. распространяемый по FidoNet набор файлов с полезными данными и программами) каким-либо неразумным пользователем многомегабайтной программы мог привести к большим проблемам у тех узлов, через которые файл этой программы бы прошел (вследствие больших затрат времени на передачу файла по модемной связи). Поэтому весьма важной чертой «фидошника», т. е. пользователя компьютера, входящего в сеть FidoNet, стала высокая ответственность за свои действия, причем обусловленная не материально, а чисто морально. Так как все связи между узлами FidoNet держались на взаимном доверии, то между «фидошниками» завязывались тесные дружеские отношения. Необходимость не совсем тривиальной настройки программ для работы в FidoNet отсеивала лиц с низким уровнем интеллекта и высоким уровнем лени.

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

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

Вы наверняка встретите в Сети немало высказываний о том, каким должен быть настоящий «фидошник». Например, узнаете, что "обязательный атрибут фидошника — борода", что «фидошник» без пива жить не может, а изьясняется лишь фразами типа "отдаю фреки только на зухеле" или "коннект суксь, ретрейн за ретрейном, ни одного фрека не сдаунлоадишь…" Такие, разумеется, тоже встречаются — ведь мир «фидошников» очень большой, и персоналии в нем встречаются самые разные. Однако есть немало «фидошников», не удовлетворяющих этим критериям, но в то же время являющихся полноценными составляющими этой сети.

Рис. 16.1.В FidoNet можно даже поиграть… Во всяком случае, хотя бы отчасти представите себе, как вы будете там жить.

Если вы хотите хотя бы приблизительно посмотреть, каково это — быть «фидошником», поиграйте в превосходную игру Юрия Нестеренко, которая так и называется — «Fido». Свежую версию вы можете скачать с сайта http://yun.complife.net, а если он окажется недоступен, то предыдущая версия лежит на http://perecod.chat.ru/fido.rar. В Интернете есть сайты, на которых можно найти полиси FidoNet (договоренности составляющих этой сети, согласно которым они работают), статьи о Fido, юмор и словари «фидошного» диалекта. Конференции Fidonet (основное средство «фидошного» массового общения) доступны и через Всемирную Сеть — например, с сайта http://www.fido-online.com.

Хакеры

"Ученику выдается компьютер и некоторое количество программных средств, с которыми ему в дальнейшем придется работать. Описаний к этим программам либо не выдается совсем, либо выдается минимальный набор. Если происходит обучение какому-либо языку программирования, в качестве руководства желательно использовать литературу на языке, заведомо незнакомом обучающемуся.

Когда будет замечено, что ученик работает с программой (языком программирования) довольно сносно, можно предложить ему для изучения исчерпывающие руководства. Они будут прочитаны как захватывающий детектив. Затем, после небольшого периода переваривания полученных знаний, программист готов к активной деятельности."

Приведенные выше слова Н.Родионова, написанные в 1990 году, как нельзя лучше подходят для характеристики подхода хакеров к окружающему миру вообще и к компьютерному в частности. В последнее время под «хакерами» часто понимают тех, кто получает несанкционированный доступ к банковским системам, взламывает web-сайты и ведет прочую разрушительную деятельность либо ради добычи денег, либо для демонстрации всем своей «крутости». К настоящим хакерам таковые не имеют никакого отношения.

Путь хакера — это путь Мага. Мага, основной целью которого является Познание мира, людей, себя. Познавать мир весьма трудно в одиночку — поэтому он высоко ценит дружбу. Можно сказать, что «хакер» — это тот, кто высшей целью своей жизни ставит постижение тайн того, что он видит вокруг себя и распространение полученных знаний в мире своих собратьев. Для хакера мир полон пленительных загадок, разгадывать которые, при этом совершенствуя свои навыки и знания — для него высшее удовольствие. Вообще говоря, для этого не обязательно быть «компьютерщиком»: все настоящие ученые в какой-то мере хакеры. Хотя правильнее было бы сказать, что хакеры — это "ученые в мире компьютеров". Они точно так же постигают тайны компьютерного мира без каких-либо руководств (вернее, умеют это делать — если руководства найдутся, то хакер в целях экономии своего времени ими воспользуется, но их наличие для него необязательно), точно так же могут делать выводы и обобщения. К примеру, новый язык программирования, абсолютно незнакомый хакеру, он изучит за считанные дни — просто потому, что ранее он уже понял основные принципы устройства любого языка программирования, причем понял самостоятельно.

Хакер широко использует информацию, программы, сделанные другими людьми, в том числе и в тех случаях, когда те отнюдь не желают эту информацию кому-либо предоставлять. Но делает он так не из-за стремления к взлому, разрушению, а по одной простой причине — хакер весьма высоко ценит ресурсы человеческого мозга. И поэтому повторять то, что уже сделано другими, для хакера — абсолютно противоестественный процесс. В самом деле — если кто-то написал программу, затратил свои силы, нашел решения проблем, то зачем же другим проходить опять-таки по тому же пути еще раз? Деньги за продукт своего труда хакер, разумеется, требовать может — но эти деньги для него не является самоцелью и нужны ему только для обеспечения жизни. Чтобы были пища, кров и компьютер для дальнейшего исследования окружающего мира. Хакер презирает тех, кто ставит в качестве главной цели своей жизни накопление богатства, гонку за прибылью или карьерой и считает таковых глубоко несчастными и сумасшедшими. Ведь, в самом деле, они меняют красоту мира и высоту творческого полета на копошение в грязи низких человеческих страстей и грызню с себе подобными…

И поэтому хакеры — люди внутренне свободные. Они, возможно, не знают цену разных вещей — но они знают их истинную ценность. Да, хакер может и «взломать» какую-нибудь программу или удаленную систему, — но исключительно для того, чтобы обеспечить свободу распространения информации, которая, как он считает, так должна распространяться. Хакер постарается позаботиться о том, чтобы тот, кто затратил силы и время на создание информации, был достойно вознагражден, но никогда не будет способствовать "деланию бизнеса" на информации, получению из нее наживы. Хакеры не взирают на общественное положение, чины и награды людей, встречаемых ими, — ведь для них ценность человека определяется его умом и совокупностью сделанных им дел, пошедших на пользу остальным.

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

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

Весьма красивую и полную статью о том, кто такой хакер на самом деле, вы можете найти на сайте Антона Секачева — http://www.sekachev.ru, далее — по ссылкам. А принадлежит она перу Эрика Реймонда, человека, довольно известного в мире хакеров. Возможно, прочитав ее, вы вдруг обнаружите, что всю свою жизнь подсознательно следовали принципам хакеров и ваше выработанное в трудных схватках с судьбой мировоззрение поразительно похоже на то, что описано в этой статье. Что ж — в этом случае остается только вас поздравить: возможно, скоро вы найдете тех, с кем сможете вместе идти дальше по долгому и трудному пути совместного бескорыстного познания окружающего мира.

Крутые Специалисты

О, этих трогать опасно! Они, те, кто получил компьютерное образование, вложил немало денег в свое обучение на различных курсах и получение разнообразных сертификатов (в основном о владении программными продуктами различных фирм — на курсах, этими же самыми фирмами и организованными), кто привык тщательно воплощать чужие идеи, будучи заинтересованными лишь в получении за это крупных сумм денег, — крайне плохо относятся к тем, кто живет по иным принципам, чем они сами. Особенно не любят они тех, кто, не будучи выпускником престижного ВУЗа и не отдав ни копейки и ни цента в качестве вложения в свою будущую карьеру, самостоятельно, лишь своими мозгами и своим умением и тяжким трудом исследовал секреты компьютерных технологий и сравнялся, а то и превзошел этих "Крутых Специалистов" в умении и знаниях. Вот ведь — эти антиобщественные элементы труд свой продавать не хотят, рассматривают свою работу как искусство…

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

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

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

Линуксоиды

Если вдуматься — не правда ли, странное название? Операционная система Linux является очень хорошим средством для решения определенного круга задач — обеспечения работы сетевых служб, научных расчетов, как база для Интернет-технологий — но разве можно быть столь горячим ее приверженцем, что даже получить наименование «линуксопоклонников»? Особенно если не самому совершенствовать Linux и предназначенные для этой ОС программы (это почти всегда возможно — программы для Linux и она сама должны распространяться с исходным кодом), а просто ими пользоваться?

Оказывается — можно! Можно абсолютно все свои задачи решать с помощью Linux'а, как те, для которых эта операционная система предназначена, так и нет, путешествовать по Интернет-форумам и ругать последними словами всех тех, кто не разделяет такую горячую любовь к Linux, презрительно смотреть на тех, кто использует другие операционые системы — особенно Windows. Можно. Но… по одной простой причине. Потому что в мире существует корпорация Microsoft и созданные ею программы.

Среди тех, кто любит работать с операционной системой Linux, есть те, кто одной из важных целей своей жизни сделал доказательство превосходства Linux над операционными системами Windows. Обычно таковые бывают не самыми компетентными в работе с Linux, но весьма крикливыми на Интернет-форумах и гостевых книгах. Скажем, когда на форумах www.ixbt.com обсуждается тема тонкой настройки Windows, в ней обязательно попадется пара-тройка сообщений типа "Windows — суксь, Linux — рулезь", "Кончай юзать мастдай, переходи на Linux", или даже с не совсем приличными словами.

Можно спросить: а откуда, собственно, взялись «линуксоиды»? Почему бы им просто не работать с действительно неплохой и весьма грамотно спроектированной и реализованной ОС Linux и никого не критиковать за выбор другой ОС?

Ответ на этот вопрос перекликается с большой темой, которая уже навязла в зубах у многих завсегдатаев сетевого общения — "Почему не любят Microsoft". В самом деле — какие серьезные претензии есть у «линуксоидов» к корпорации, которая является не самым сильным конкурентом Linux среди сетевых операционных систем и чьи руководители дальше словесных порицаний в адрес принципа открытости кода в Linux не шли?

А основные претензии две. В определенной степени они перекликаются с принципами двух предыдущих описанных групп — «хакеров» и "крутых спецов". Итак, первая — это недостаточная продуманность программ от Microsoft. В то время как Linux спроектирована очень грамотно, "менеджеры среднего звена" (т. е. те, кто сам код не пишет, а занимается разработкой общих алгоритмов и отдельных элементов интерфейса) в Microsoft вместо реального удобства пользователя зачастую больше думали о коммерческом успехе и громких рекламных фразах, что не могло не привести к неудобству и неэффективности внешне эффектных компонентов ОС. (К примеру, у мыслящего лишь рекламными слоганами маркетолога могла возникнуть идея сделать «Проводник» на движке Internet Explorer. Скорость работы «Проводника» уменьшилась на порядок, количество «глюков» возросло на порядок, — зато можно так писать в проспектах и листовках "теперь ваш компьютер является частью Интернет!", Хорошо еще, можно использовать Windows95 — так нет, официально Microsoft больше эту ОС не поддерживает.) К тому же код Windows закрытый — то есть внести исправления в эти ОС могут только в корпорации-разработчике. Тем, кто работает с Linux, операционной системой, разработанной не для успешных продаж, а для быстрого и полноценного решения реальных задач, вследствие этого весьма досадно видеть, как Windows победными шагами идет по компьютерному миру. Ведь, в самом деле, если бы хотя бы часть тех ресурсов, которые сейчас тратятся на разработку новых версий Windows (на тех же «коммерческих» принципах!), была бы потрачена на совершенствование Linux, возможно, мы бы сейчас имели удобную, быструю и весьма хорошо спроектированную операционную систему.

Есть и вторая причина ненависти к Windows и Microsoft, — о ней, правда, мало кто упоминает. В основном именно она вызывала массовую критику первых версий «виндов» со стороны «специалистов» компьютерного сообщества. В настоящее время данная причина во многом ушла в прошлое, хотя отголоски ее нередко можно встретить на "чисто технических" форумах. Какая это причина? А простая — "Microsoft пустила к компьютеру дилетантов". В самом деле — ранее, в «до-виндовскую» эру, работа с компьютером для непосвященного выглядела во многом чародейством. Ввод непонятных команд, настройка конфигурационных файлов (даже в MS-DOS — config.sys, к примеру), сочетания клавиш в программах и особенности командных строк, — все это узнать человеку, впервые приобретшему компьютер, было очень непросто. Большинству приходилось либо приобретать множество книг и их читать и изучать, — либо обращаться за помощью к «специалистам». Те за признание их авторитета, ящик пива или сумму в твердой валюте настраивали autoexec.bat, меню Нортона или почтовую программу. Но с появлением Windows и графического интерфейса ситуация изменилась. Любой человек, даже совершенно ранее незнакомый с компьютером, получил возможность абсолютно самостоятельно его исследовать и научиться с ним работать, — разумеется, если он умел думать и исследовать. В результате необходимость обращаться к «специалистам» по настройке Нортона или автозапуска почти отпала. Более того — Windows даже без какой-либо настройки стала доступна для выполнения нужной работы, — скажем, напечатать текст и вывести его на принтер в большинстве случаев было можно даже без установки дополнительных программ, всего лишь с помощью WordPad'а. Естественно, тех, кто не мыслил свою жизнь без конфигурационных файлов и командной строки, такая ситуация устроить не могла, — "как же так, я столько времени потратил на изучение родного MS-DOS'а, прежде чем полноценно стал с ним работать, а тут какой-то «ламер» сразу сел за «мастдай» и стал работать, не прибегнув к моим услугам!" Многие быстро освоили "новую технику" и стали специалистами уже, например, по настройке Windows. А те, кто не сумел перестроиться — стали эту ОС всячески ругать в форумах, переписке, личном общении. Linux для таких стала настоящим подарком — и мощная (действительно ведь так!), и сложная, и, самое главное, — труднонастраиваемая. Теперь можно агитировать за переход на нее всех, даже тех, кому компьютер нужен как печатная машинка, — исключительно для того, чтобы те могли обращаться к «специалистам» за необходимыми консультациями.

К счастью, тех, кто "не любит Microsoft" по второй описанной причине, осталось мало. В мире компьютеров не очень разумные люди не приживаются. Поэтому основной претензией к Microsoft от «линуксоидов» является все же именно недовольство принципами построения и разработки операционных систем Windows, а также распространенностью этих ОС и количеством вложенных в них средств.

Сайты «линуксоидов» довольно часто можно встретить в Сети, если производить целенаправленный поиск документации по Linux или программного обеспечения для этой ОС. Зачастую на них находится немало полезной информации, однако дух противления Microsoft присутствует почти всегда.

* * *

Четыре описанных устойчивые группы хотя и не определяют мировоззрения большей части компьютерного сообщества, все же довольно распространены. Они являются довольно устойчивыми течениями, так как их структура, принципы во многом вызваны условиями, в которых они формировались. Так, если бы FidoNet могла функционировать даже в тех условиях, когда, скажем, половина ее составляющих свои бы обязанности выполнять перестала, то вряд ли дружеские отношения среди «фидошников» были бы столь серьезными. Если бы операционные системы от Microsoft были бы рассчитаны на удовлетворение реальных потребностей пользователей, а не на "наилучшую продажу", если бы нужные пользователям функции не приносились бы в них в жертву внешнему блеску и удобству для не очень умных покупателей, то, возможно, «линуксоиды» были бы не агрессивными ненавистниками Windows, а просто хорошими специалистами в своем деле.

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

Небольшое дополнение. Это не общественное течение, но все же…"Яблочники"

Если наш, российский «компьютерщик» приедет в США, то его наверняка поразит одна вещь. В то время как в России гонка процессоров идет между Intel и Amd, операционных систем — между Linux и Windows, то, придя в американский университет, вы в 30 % случаев обнаружите на столах интернет-классов компьютеры, в которых зачастую нельзя даже засунуть принесенные вами дискеты, а если окажется можно, то все равно они работать не будут. Еще эти компьютеры разрабатываются только одной фирмой во всем мире, а на каждом из них виднеется эмблема с надкушенным красочным яблоком. Это Macintosh — компьютер, который, по мысли своих создателей, является настоящим другом и помощником человеку и умеет разговаривать с ним на понятном языке.

В России Macintosh'и не прижились. И даже не столько из-за запрета на их экспорт в СССР вначале и дороговизны в дальнейшем, сколько из-за несоответствия их архитектуры русскому менталитету. Ну не потерпят наши люди систему, где все комплектующие надо покупать у одного производителя, а для их установки в большинстве случаев ехать в сервис-центр. Да еще и ОС устанавливается только одна.

Однако есть в нашем мире люди, которые не мыслят свою жизнь без Macintosh'ей — как мы не мыслим свою без PC. Они, конечно, не являются чем-то вроде секты или поклонников культа, но представляют из себя довольно сплоченное общество. Во многом с Macintosh'ами работают те, кто занят в издательском деле (для таких случаев это просто идеальный компьютер), но есть и просто — любители. Их нередко можно встретить в web-конференциях, где они не дают покоя ни любителям Unix, ни любителям Windows…

Хотите — прогуляйтесь по сайтам для поклонников Macintosh'ей. Это — и "Все для Macintosh" — http://www.mymac.ru, и Мак-почта — http://macbox.ru, и даже раздел «MacOS» на www.freeware.ru. Если хотите услышать Macintosh'еманов в реальном времени — посетите Форум Macintosh на том же http://www.mymac.ru, только учтите, что иной раз баталии там разгораются нешуточные.

Часть III. ПРАКТИКУМ

Третья часть книги, как видно из ее названия, посвящена практической работе с компьютером.

Первые шесть глав рассказывают о создании Интернет-сайтов. Из них вы узнаете основы языков HTML, PHP и Javascript, познакомитесь с таблицами стилей и Dynamic HTML. В главе 18 описывается удобный инструмент сайтостроения — Script Editor из пакета Microsoft Office, а в главе 22 приводится подборка интересных приемов web-дизайна, делающих сайт красивее и удобнее.

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

Из мира Интернета

· Сайт "Песни Русского Сопротивления", расположенный по адресу www.harchikov.ru — первый в RuNet'е крупный музыкальный проект патриотической направленности. На нем представлены:

1. Альбомы Александра Харчикова — известного исполнителя патриотических песен, композитора и поэта, неоднократного лауреата конкурса "Песни Сопротивления".

2. Песни в исполнении Ивана Баранова, победителя конкурса "Песни Сопротивления" в 1999 и 2001 годах.

3. Альбом "Посторонним вход запрещен" группы "28 панфиловцев". Основные темы альбома — Родина, Долг, Воинская честь.

Все песни — в высококачественной оцифровке формата MP3 и доступны для свободного скачивания. Среди произведений — как известные, например, "Наша родина — Советский Союз", "Русский не сдается", так и малознакомые широкому кругу слушателей.

· На сайте "Портал советской музыки", расположенном по адресу http://sovmusic.narod.ru, представлены MP3-записи песен советского времени, в основном 30-40-х годов. Встречаются раритетные записи, например, первая версия гимна СССР, составленная в 1938 году.

Полезный совет

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

Глава 17. Сайтостроение

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

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

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

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

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

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

С чего начать?

Первое, о чем должен задуматься тот, кто собрался создавать свое представительство в Интернет, это вопрос: а что, собственно, я могу поместить в Сеть? Что я дам тем самым пользователям? К сожалению, в последнее время стало появляться немало сайтов, не содержащих действительно полезной информации. На них размещается, к примеру, фотография автора сайта, пара слов о том, что он любит из еды, музыки и видеофильмов и ссылки на два-три общеизвестных ресурса.[43] Ясно, что никому из пользователей Сети такой «источник» не нужен, — там ведь обычно нет даже резюме со списком професиональных качеств автора. Причем сами авторы обычно бывают весьма активными и с непонятными целями регистрируют свои «творения» во многих поисковых системах.

Желающим последовать примеру авторов этих "домашних web-страничек" следует помнить, что своей цели — "прославления имени" владельца сайта — они не достигают. Пользователь Сети, попавший на такую страничку в поисках нужной ему информации, будет очень раздражен, найдя вместо того, чего он желает, фотографию Васи Пупкина и рассказ о том, как тот любит пепси-колу и мультики. Вряд ли после этого имя Васи станет вызывать положительные эмоции. А вот вред эти сайты приносят значительный — они фактически засоряют Сеть, так как, во-первых, занимают места в поисковых системах, скрывая под своей массой ссылки на действительно нужные ресурсы, а, во-вторых, занимают хорошие имена ресурсов. Безусловно, вряд ли автор такого сайта раскошелится на платный хостинг и доменное имя второго уровня, но вот в системах бесплатного размещения сайтов эти авторы занимают весьма привлекательные имена, по сути не давая ничего пользователям. А те, кто собирается поместить в Сеть то, что нужно очень многим, увы, уже не могут создать сайт с красивым именем. Поэтому "сайты Васи Пупкина" пользуются заслуженным отвращением у большинства пользователей, и те их авторы, которые рассчитывают на поток предложений о работе, признаний в уважении и так далее, желаемого не получат никогда.

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

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

* * *

Основа Интернета, те «кирпичики», из которых состоит все информационное наполнение Сети — это web-страницы. Возникает закономерный вопрос: а что же это такое — web-страница, чем она отличается от любого другого документа вроде файла в формате Word или Rtf? Web-страница — это файл в особом формате — HTML (что переводится как HyperText Markup Language, то есть язык гипертекстовой разметки).[44] Подобный файл характеризуется тем, что его содержимое представляет собой текст, шрифт, размер, расположение, поведение которого определяется специальными управляющими комендами — тэгами. Кроме того, в этом формате допустима такая вещь, как гиперссылки — указатели на другие документы для быстрого перехода к ним, кроме того, возможно размещение на web-странице графических обьектов.

Слово «site» означает «место». Место в сети Интернет. Сайтом называется набор web-страниц, связанных между собой перекрестными ссылками и расположенный под одним общим корневым именем. Например, http://antorlov.chat.ru. На этом сайте расположены web-страницы: verstka.htm, urls.htm, имеющие соответственно адреса http://antorlov.chat.ru/verstka.htm и http://antorlov.chat.ru/urls.htm. Но если говорить по сути, то страницы сайта обьединяет не столько единство места или имени, сколько единство содержания и возможность перехода с одной его страницы на другую. Сайт — это прежде всего информационный ресурс, и основное обьединяющее его начало — информация, находящаяся на нем.

Язык Интернета

Для просмотра документов в сети Интернет необходима специальная программа — браузер (browser, в переводе с английского — обозреватель). Эта программа считывает из Сети нужный документ и отображает его на экране в соответствии с расположением тэгов в документе. То есть тэги — это как бы директивы браузеру о том, как нужно отображать документ. Все современные браузеры поддерживают стандартный набор тэгов, входящий в утвержденный международными соглашениями документ — спецификацию языка HTML.

В настоящее время исходный язык HTML очень серьезно усовершенствован. Кроме того, появились технологии, дающие новые возможности, такие, как JavaScript, VBScript, Dynamic HTML, каскадные таблицы стилей и др. Но основа осталась та же — стандартные тэги, которые присутствуют на всех web-страницах. Поэтому для начала стоит посвятить несколько страниц книги основам языка Интернета, а потом уже рассказать и о новых технологиях.

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

Все тэги HTML заключаются в угловые скобки: "<тэг>". Это и есть признак тэга — браузер интерпретирует то, что заключено в угловые скобки, как директивы отображения страницы, если это возможно, и не отображает их самих на экране.[45] Регистр букв в наименовании тэга значения не имеет.

Практически все тэги являются парными. Это означает, что каждый тэг имеет свою "зону действия", в пределах которой он определяет вид документа. Конец зоны действия тэга обозначается им же, но без параметров и с прибавлением перед тэгом обратного слэша "/", — закрывающим тэгом. Кроме того, для тэгов, обозначающих элементы web-страницы, закрывающий тэг показывает их границы. Например, абзац текста должен иметь вид "<p>…текст…</p>".

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

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

Служебные тэги без параметров

Тэг Значение

<HTML> — Начало Web-страницы.

<HEAD> — Различная служебная информация.

<TITLE> — Заголовок страницы, отображающийся в верхней строке браузера

[4] В тексте, находящемся вне этих тэгов, символы конца абзаца, разрыва строк, группы пробелов, табуляция при отображении игнорируются.

Для того, чтобы какой-либо элемент формы мог принимать участие в передаче данных (например, чтобы его значение могло быть послано по почте), он должен иметь свое уникальное имя — в его тэге долен быть параметр "name="Имя"". Если такого параметра нет, то информация данного элемента формы никуда передана быть не может. Пример использования формы для передачи данных смотрите в главах 19 и 22.

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

Неплохие подборки книг по компьютерным технологиям, в частности, по HTML и разработке web-сайтов можно найти в специальных электронных библиотеках, например, по адресам http://rusdoc.df.ru, http://infocity.kiev.ua.

Скрипты

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

Сценарии, исполняющиеся на клиентском компьютере, встраиваются в загружаемые web-страницы их разработчиками и выполняются браузером клиентского компьютера. Для того, чтобы они могли быть выполнены, браузер должен уметь их интерпретировать и выполнять — поддерживать язык, на котором скрипты написаны.

На настоящее время существуют два языка для написания таких сценариев — JavaScript и VBScript (от Visual Basic Script), причем первый из них поддерживается практически всеми современными моделами браузеров — Microsoft Internet Explorer, Netscape Navigator, Opera, Ariadna, а второй — только Microsoft Internet Explorer (начиная с версии 4.0). Поэтому использование JavaScript предпочтительнее, но этот язык несколько сложнее по своему синтаксису и не позволяет реализовывать некоторые возможности, которые доступны VBScript. Однако, поскольку доля пользователей браузера Microsoft Internet Explorer сейчас составляет порядка восьмидесяти-девяноста процентов от всех пользователей сети Интернет, то VBScript можно широко использовать, а для пользователей браузеров, не поддерживающих этот язык, сделать специальный, упрощенный вариант сайта.

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

Наиболее общие и основные понятия JavaScript и VBScript таковы. Скрипт, располагаемый на странице, заключается в тэги "<script>" и "</script>" — без этого он будет интерпретирован как простой текст и отображен таким в браузере. Для того, чтобы скрыть текст скрипта от браузеров, не понимающих тэг "<script>", после него, но перед началом текста скрипта, можно встроить тэг комментария: "<!-", закрыв его перед тэгом "</script>" тэгом "->". Тогда браузер, поддерживающий скрипты, скрипт выполнит, а не поддерживающий — полностью проигнорирует.

Если скрипт написан на языке VBScript, то в его тэге должно стоять указание на это вида "<SCRIPT ID=clientEventHandlersVBS LANGUAGE=vbscript>". То же рекомендуется делать и для скриптов на JavaScript: "<SCRIPT language=JavaScript>", однако это не обязательно.

Текст скрипта может находиться не на странице, а в отдельном файле с расширением. js (для сценариев на JavaScript) или. vbs (для сценариев на VBScript), что может облегчить труд по обновлению сайта, если обновляемой частью являются именно скрипты. К сожалению, увеличить скорость загрузки страницы путем вынесения скриптов в отдельные файлы не удастся — они все равно будут загружены не при их вызове, а при загрузке страницы. Для такого включения текста скрипта из отдельного файла следует использовать тэги "<SCRIPT language=JavaScript src="Имя_файла. js"></SCRIPT>" или "<SCRIPT language=VBScript src="Имя_файла. vbs"></SCRIPT>".

Сценарии на JavaScript и VBScript могут исполняться как автоматически во время загрузки страницы, так и при каких-либо действиях пользователя. Конкретный способ выполнения зависит от текста скрипта. Сценарий, выполняемый автоматически, состоит из простого набора команд, без каких-либо заголовков и окончаний. Например, сценарий

<SCRIPT language="JavaScript">

if (navigator.appName == "Microsoft Internet Explorer")

document.write ("<p>Вы используете Microsoft Internet Explorer</p>");

</SCRIPT>

будет выполнен сразу после загрузки, и в результате его выполнения в загружаемом документе в том месте страницы, где располагается текст этого скрипта, появится строка "Вы используете Microsoft Internet Explorer". Если необходимо, чтобы скрипт был выполнен до загрузки страницы, рекомендуется поместить его в раздел "<head>", однако тогда функции работы с текстом страницы скрипту будут недоступны — ведь он будет выполняться до того, как браузер его получит с сервера.

Для того, чтобы сценарий выполнялся при наступлении определенных условий (нажатии пользователя на кнопку, окончании загрузки страницы и др.), необходимо оформить его как функцию. Это значит, что тогда у скрипта должен появиться заголовок и окончание. Для JavaScript заголовком является оператор "function имя_скрипта()", а весь текст скрипта заключается в фигурные скобки:

<script Language=JavaScript>

function skript()

{

…Команды сценария…

}

</script>

В VBScript заголовок — фраза "Sub имя_скрипта()", а после текста скрипта должна следовать команда "End Sub":

<SCRIPT ID=clientEventHandlersVBS LANGUAGE=vbscript>

Sub runscr()

…Команды сценария…

End Sub

</SCRIPT>

Сценарий, оформленный таким образом, имеет имя — то, что стоит после слов "function" или "Sub". По этому имени его можно вызывать из любого места страницы.

Вызов скрипта — это просто команда его выполнить.

Например, при нажатии кнопки "<input type="button" value="Готово" onClick="startskript()">" будет выполнен скрипт с именем "startskript. Вызываемый скрипт может находиться в любом месте страницы, однако настоятельно рекомендуется, чтобы он располагался выше места его вызова, — иначе при неполностью загруженной странице может быть неприятная ситуация, когда при вызове незагруженного скрипта браузер выдаст ошибку.

Сценарий может вызываться при происхождении какого-либо события. Следующий пример показывает, как вызвать скрипт на языке Javascript при полной загрузке страницы:

<SCRIPT FOR=window EVENT=onload LANGUAGE="JScript">

…Команды скрипта…

</SCRIPT>

В языке VBScript подобный вызов делается несколько по-другому:

<SCRIPT ID=clientEventHandlersVBS LANGUAGE=vbscript>

Sub window_onload()

…Команды скрипта…

End Sub

</SCRIPT>

"Onload" — это событие, возникающее при окончании загрузки страницы. Существуют и другие события для обьекта "window" (то есть — окна открытой web-страницы). Например, "onresize" — при изменении размеров окна. Полные списки событий и стандартных обьектов (то есть имеющихся на всех страницах) можно найти в специальной литературе по программированию для Web.

Другой тип скриптов, о котором говорилось в начале этого раздела — это сценарии, выполняющиеся на сервере (так называемые CGI-скрипты). CGI (что расшифровывается как Common Gateway Interface: общий способ обмена данными) — это не язык, а принцип действия таких скриптов: при их выполнении берутся данные от браузера пользователя и обрабатываются на сервере. С помощью CGI-скриптов можно решить самые разнообразные задачи: осуществление поиска по сайту, работу с базами данных, динамическую генерацию страниц с нужным пользователю содержанием.

Примером CGI-сценариев являются программы на языке PHP, общей характеристике и основам синтаксиса которого посвящена глава 19 этой книги.

В web-программировании иногда используются еще и такие структуры, как Java-апплеты. Java — это специальный язык программирования, отличающийся тем, что программы, написанные на нем, могут выполняться на компьютерах любых платформ: как на IBM PC, так и на Macintosh, и на других системах. По своему синтаксису он похож на Cи. Java-апплет — это программа на языке Java, переведенная в так называемый «пи-код», то есть в двоичный код, могущий быть выполненным специальным интерпретатором (так называемой "виртуальной машиной Java"). Для различных платформ компьютеров существуют свои версии интерпретаторов Java, а сам язык Java одинаков для всех платформ. Поэтому один и тот же Java-апплет может работать на любом типе компьютеров, для которого создана "виртуальная машина".

Java-апплет может быть вставлен в web-страницу. Создаются апплеты с помощью специальных программных пакетов, таких, например, как Java Developer Kit. С помощью Java-апплетов можно добиться интересных визуальных эффектов на странице. Но следует помнить, что их загрузка и выполнение очень сильно замедляют работу компьютера посетителя сайта с апплетами. Поэтому Java-апплеты стоит использовать лишь в очень редких случаях, например, для внедрения в страницу сложного калькулятора научных расчетов. Во всех остальных случаях рекомендуется воздерживаться от их применения. Большинство возможностей Java-апплетов может быть реализовано средствами JavaScript и VBScript, а также Dynamic HTML.[46]

Таблицы стилей

С помощью стандартных тэгов HTML "<font…>", "<b>" и.т.д. можно задавать тексту web-страницы определенное оформление. Эти тэги поддерживаются всеми существующими в настоящее время браузерами. У тэга "<font…>" могут иметься параметры: size, color, face. Однако в случае, когда на странице имеется большое количество таких тэгов, то ее размер серьезно возрастает. Кроме того, становится сложным процесс изменения дизайна страницы: так, для того, чтобы заменить один цвет шрифта на другой, приходится просматривать весь документ и заменять значение параметра color во всем тексте. Если несколько страниц сайта были обьединены единым дизайном текста, то при попытке изменить хотя бы один параметр придется перерабатывать все эти страницы.

Возникает закономерное предложение: а почему бы не отделить описание форматирования текста от самого текста? Чтобы информация о внешнем виде, свойствах всех тэгов одного типа находилась в каком-то одном месте. А еще лучше — чтобы она могла быть доступной не с одной web-страницы, а сразу с нескольких, чтобы не было проблем с единообразным оформлением сайта. Для реализации такой идеи были придуманы так называемые "каскадные таблицы стилей" — CSS.

Каскадные таблицы стилей — это определенный способ записи информации об оформлении web-страницы, как бы некий отдельный язык разметки web-документов. Все современные браузеры его поддерживают, начиная с четвертых версий Microsoft Internet Explorer и Netscape Navigator.

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

Свойства, то есть указания об оформлении, при использовании CSS можно задавать любым обьектам страницы — абзацам, ссылкам, ячейкам таблицы, а также произвольным фрагментам страницы. Для этого в тэги всех таких обьектов помещается специальный параметр — class. Все обьекты web-страницы, имеющие одинаковое значение параметра class, считаются принадлежащими к одному и тому же классу оформления.

Под «классом» в программировании вообще и в CSS в частности понимается определенный тип данных или обьектов. Классы могут создаваться программистом самостоятельно. Например, можно выделить на web-странице различные фрагменты текста и обьявить с помощью указания параметра class, что все они должны иметь одни и те же определенные создателем web-страницы свойства. Стандартные обьекты web-страницы, такие, как абзацы, ссылки тоже могут принадлежать к какому-либо определенному классу, созданному автором web-страницы. Подробнее понятие класса разбиралось в первой части книги.

Оформление каждого класса и типа стандартных обьектов описывается в начале страницы в тэге "<style>". Содержимое этого тэга и называется "таблицей стилей", и именно в нем располагается информация об оформлении различных элементов web-страницы. Желательно, чтобы таблица стилей помещалась в разделе "<head>" web-страницы, хотя она может находиться и после тэга "<body>" в любом месте web-страницы.

Вот пример таблицы стилей:

<STYLE type="text/css">

P{text-align: justify; color: "#000000"}

A: link {font-family: Arial; color: "#2f4f4f"}

A: visited {font-family: Arial; color: "#717171"}

A: active {font-family: Arial; color: "#d4aa00"}

A: hover {font-family: Arial; color: "#c39100"}

text1 {color: #113311; font-size: 12 px; font-weight: bold}

text2 {font-size: 12 px; font-weight: bold}

risun {height: 10; width: 20}

</STYLE>

В ней задано оформление двум стандартным тэгам HTML — "<a>" и "<p>" и трем классам обьектов — с именами text1, text2 и risun.

Если такую таблицу поместить на web-страницу, то весь текст, содержащийся в тэгах "<p>", будет выровнен по ширинеи окрашен в черный цвет (которому и соответствует указанный в таблице стилей номер #000000).

Для того, чтобы обеспечить такое же оформление страницы без использования таблицы стилей, пришлось бы в каждом тэге "<p>" указывать параметр align=justify, а после тэга перед текстом ставить указание на цвет шрифта: "<font color=#000000>". Помимо увеличения размера страницы и затруднения написания ее кода это привело бы еще и к невозможности быстро поменять цвет или выравнивание всех абзацев — пришлось бы править каждый тэг.

Запись о параметрах оформления стандартного тэга, содержащаяся в таблице стилей, при отображении страницы полностью эквивалентна указанию этих параметров именно в этом тэге. Поэтому если на странице, содержащей приведенную выше таблицу стилей, поставить тэг "<center>" перед тэгом "<p>", то текст, оформленный тэгом "<p>", останется выровненным по ширине (так как такое сочетание будет эквивалентно записи "<center><p align=justify>"), а если после — "<p><center>" — то он будет выровнен по центру.

Тэг "<a>" (то есть гиперссылка) допускает четыре состояния: просто расположенная на странице — link, активная (то есть нажимаемая в данный момент) — active, посещенная — visited и "готовящаяся стать активной" (состояние при наведении курсора на ссылку) — hover. Все эти состояния можно описать по-отдельности в таблице стилей, как это и показано выше — например, обычная ссылка зеленого цвета, а при подведении к ней курсора становится желтой.

В вышеприведенной таблице описано еще три класса обьектов — text1, text2 и risun. Для того, чтобы использовать эти описания для обьектов на web-странице, необходимо указать принадлежность того или иного обьекта к определенному классу с помощью включения параметра class в тэг этого обьекта. Например, указание "<td class=text1>"приведет к оформлению текста, содержащегося в данной ячейке таблицы, в соответствии с условиями, указанными в таблице стилей — в данном случае он будет иметь высоту в 12 пикселов, оформлен жирным шрифтом и т. д…

Для оформления как класса произвольных фрагментов страницы необходимо использовать тэг "<div>": "<div class=text1>", окружая им эти фрагменты. У тэга "<div>" нет каких-либо свойств, имеющихся по умолчанию, вроде отступов спереди и сзади у тэга "<p>", поэтому его использование никак не повлияет на остальные параметры вида страницы, кроме тех, что определяются заданным в этом тэге классом.

Допустимо задание свойств не только тексту, но и изображениям — например, если в странице с приведенной выше таблицей стилей присвоить класс risun изображению: "<img src="d.gif" class=risun>", то оно будет иметь размеры, указанные в таблице (то есть здесь — высота в 10 пикселов и ширина в 20 пикселов).

Если необходимо задать определенные свойства всего лишь одному элементу страницы, то необязательно выделять его в отдельный класс или создавать ради него таблицу стилей. Можно просто указать нужное свойство в тэге этого элемента с помощью параметра style, например, <p style="margin-top: 140px"> задает отступ сверху в 140 пикселей только для абзаца, в тэге которого указано это свойство.

Параметр style, указанный непосредственно в тэге, имеет приоритет перед параметрами в таблице стилей. Так, текст, содержащийся в тэге "<p style="text-align: center">", будет выровнен по центру независимо от того, какое выравнивание было задано в таблице стилей для тэга "<p>".

Способ задания размера шрифта в таблице стилей несколько отличается от употребляемого в тэге "<font…>". Если в качестве значения параметра "size" тэга "<font…>" может указываться число от 1 до 7, соответствующее размеру шрифта от самого маленького до самого большого, то в таблице стилей, в параметре "font-size" какого-либо элемента, допускающего его задание для себя, может быть указан либо фиксированный размер шрифта в пикселах (например, "font-size: 12 px"), который при отображении в браузере увеличить или уменьшить будет нельзя (в Microsoft Internet Explorer 5.0 это можно сделать в меню "Вид-Размер Шрифта"), либо процентное значение ("font-size: 120 %"), которое задаст размер шрифта относительно установленного в браузере (с помощью вышеуказанного меню) по умолчанию. Первый способ стоит использовать при необходимости строго задать размер букв надписи (скажем, при их размещении в ограниченной по ширине ячейке таблицы), а второй — во всех остальных случаях. Злоупотреблять первым способом указания размера шрифта — в пикселах — не стоит, так как многие пользователи предпочитают настраивать просмотр web-страниц, в том числе и размеры шрифтов, исходя из своих предпочтений, а указание размера шрифта в пикселах не даст им этого сделать.

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

Параметры, могущие быть заданными для каждого типа обьектов, весьма многообразны. Полный их перечень приводится в специальной литературе по таблицам стилей. Кроме того, с ним можно ознакомиться с помощью программы Microsoft Script Editor, описанной в следующей главе.

Таблицу стилей можно использовать одну на несколько web-страниц. Можно даже брать ее с другого сайта. Для этого надо сохранить таблицу стилей (от тэга "<style>" до тэга "</style>" без самих этих тэгов) в текстовом файле с расширением. css и поместить этот файл на сервер, желательно в ту же самую директорию, где будут находиться сами web-страницы. В раздел "<head>" каждой страницы надо поместить тэг "<link rel=stylesheet type="text/css" href="url">", где вместо Url поставить имя файла с таблицей стилей или путь к нему, если он находится не в той же самой директории, что и web-страницы. В этом случае при загрузке web-страницы таблица тоже будет загружена. При изменении описаний тэгов и классов в такой таблице стилей изменится внешний вид всех страниц, на которых она используется.

Следует помнить, что при таком использовании таблицы стилей при сохранении пользователем web-страницы на жестком диске локального компьютера без использования функций сохранения страниц со всеми компонентами, имеющихся в последних версиях браузеров Microsoft Internet Explorer или Netscape Navigator, сохраненная web-страница полностью потеряет заданное в таблице форматирование. Это и понятно — сама же таблица тогда не будет сохранена.

С помощью таблиц стилей можно задать обьектам страницы огромное количество свойств — гораздо большее, чем позволяют стандартные тэги HTML. Например, можно указать для фрагмента текста отступы от остального текста, причем эти отступы могут быть и отрицательными, что позволяет добиваться весьма оригинального вида web-страницы — c наложением фрагментов текста друг на друга. Можно сделать страницу с "водяными знаками" на заднем плане, причем без использования сложной графики в качестве фона.

Пример подобной web-страницы — на рис. 17.1. Ее HTML-текст имеет следующий вид:

Рис. 17.1. Пример Web-страницы, сделанной с использованием таблицы стилей.

<HTML><HEAD>

<STYLE type="text/css">

x1 {color: green; font-size: 40pt}

x2 {color: navy; font-size: 50pt; margin-top: -10px;}

x3 {color: silver; font-size: 80pt; margin-top: -140px}

</STYLE>

</HEAD><BODY><CENTER>

<DIV class="x1">Первая строка</DIV>

<DIV class="x2">Вторая строка</DIV>

<DIV class="x3">Третья строка</DIV>

</CENTER></BODY></HTML>

Как легко видеть, свойство margin-top определяет отступ текста сверху от предыдущего элемента web-страницы. Задав его значение отрицательным, можно получить наложение текста на предыдущий элемент.

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

Вот, к примеру на рис. 17.2 представлена web-страница, созданная без использования тэгов "<table>", всего с одним рисунком. Подчеркнутый адрес является ссылкой. Как видите, возможности таблиц стилей позволяют сделать web-страницу похожей на красочный полиграфически изданный буклет, причем без использования сложной и медленно загружающейся графики.

Рис. 17.2. На этой странице нет таблиц и есть лишь один рисунок.

К слову, текстовые редакторы Microsoft Word 2000 и Microsoft Word XP потому и могут сохранять в web-странице все форматирование, доступное им, что при сохранении документа в формате HTML широко используют таблицы стилей и тэг style.

В какой-то мере принцип таблицы стилей похож на принцип стилевого оформления текста в Word. Точно так же — в Word можно задать изначально параметры текста для каждого стиля, а потом устанавливать для фрагментов текста оформление определенным стилем. При этом все фрагменты текста, оформленные одним и тем же стилем, будут выглядеть одинаково и в соответствии с установленными для этого стиля параметрами текста. Ну, а при необходимости произвести мелкие изменения внешнего вида текста в каком-либо фрагменте нет необходимости создавать новый стиль — достаточно непосредственно изменить оформление этого фрагмента. Замените в этом описании работы в Word слово «стиль» словом «класс», и оно будет относиться уже к таблицам стилей.

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

Dynamic HTML

Dynamic HTML — это не какой-то новый язык, отличный от стандартного HTML, а набор определенных команд и способ их использования, позволяющий динамически управлять web-страницей.

Внешний вид страницы, написанной на стандартном HTML, после загрузки страницы изменен быть не может. Для того, чтобы сделать страницу на чистом HTML после ее полной загрузки хотя бы немного по-другому выглядящей, требуется ее полная перезагрузка. То есть — страница не может быть интерактивной: не может изменяться, реагируя на действия посетителя. Для возможности изменять внешний вид web-страницы без ее перезагрузки, в ответ на определенные действия пользователя, и был придуман Dynamic HTML.

Чтобы возможности Dynamic HTML могли быть использованы, web-страница должна просматриваться в браузере, способном обрабатывать команды Dynamic HTML. На сегодняшний день все последние версии браузеров Microsoft Internet Explorer (начиная с версии 4.0) и Netscape Navigator Dynamic HTML поддерживают.[47]

Принцип Dynamic HTML прост. Каждому элементу страницы может быть присвоено имя — идентификатор id. По этому идентификатору к элементу можно обращаться с помощью скриптов или команд Dynamic HTML, изменяя свойства этого элемента. Изменения сразу же вступят в силу, и внешний вид страницы станет другим. Перезагрузка страницы не потребуется.

Более того — с помощью команд Dynamic HTML можно обращаться не только к поименованным с помощью идентификаторов обьектам, но и вообще — к любым обьектам на странице. Можно, например, сделать так, что при определенном действии пользователя изменится стиль (цвет, шрифт, размер) всех заголовков на странице или всех гиперссылок. Скажем, была страница оформлена в зеленых тонах, а теперь стала оформлена в синих. Причем для этого не нужны громоздкие долго загружающиеся конструкции — достаточно небольшого скрипта, использующего возможности Dynamic HTML.

В Dynamic HTML существует возможность изменять не только свойства элементов страницы, но и ее содержание. К примеру, проводить замену одного текста на странице другим. Можно менять не только текст на странице, но и элементы ее оформления, например, фон, рисунки или заглавие страницы (отображающееся в заголовке окна браузера).

Команды Dynamic HTML построены так же, как и команды любого современного обьектно-ориентированного языка программирования: вначале пишется имя обьекта, над которым выполняется действие или свойство которого нужно узнать, а затем, через точку — его подобьекты или свойства. Они могут быть использованы как в отдельно взятом виде, так и в составе скрипта на VBScript или JavaScript. В первом случае они выполняются при происхождении какого-либо события, в описании которого и помещаются команды. Во втором случае выполнение команд происходит при выполнении скрипта.

Для изменения какого-либо элемента web-страницы нужно присвоить этому элементу идентификатор (попросту включить в его тэг параметр "id="оригинальное имя""), и затем с помощью команды изменить какое-либо свойство этого элемента. К примеру, для замены какого-либо рисунка web-страницы на другой нужно в тэг рисунка включить идентификатор — например, "<img src="picture1.jpg" id=pict>", а затем в скрипт или описание события элемента — команду: "pict.src="picture2.jpg""(то есть установить значение свойства «источник» — src — элемента pict как picture2.jpg). При выполнении этой команды исходный рисунок picture1.jpg будет замещен новым — picture2.jpg. Как можно видеть, такая возможность отrрывает очень широкие перспективы перед web-дизайнерами. Можно, к примеру, организовать «галерею»: посетитель нажимает название картины и ему тут же, без перехода на другую страницу, показывается эта картина.

Все элементы web-страницы, как именованные, так и неименованные, связаны для браузера, поддерживающего Dynamic HTML, в разветвленную иерархическую структуру. Скрипты, использующие возможности Dynamic HTML, могут обращаться к различным элементам в этой структуре, учитывая его расположение в ней. Однотипные элементы (например, все изображения, все формы и.т.д.) обьединяются в группы — так называемые "коллекции". Существуют встроенные коллекции — то есть группы элементов, которые обьединены в коллекции по умолчанию, и к элементам этих групп можно обращаться из скриптов без специальных команд, например, коллекция всех изображений на странице.

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

Set abzaci=document.all.tags("p")

abzaci(0). align="right"

Эти две строки создают коллекцию всех тэгов абзацев и обращаются ко второму ее элементу — второму абзацу, присваивая значение "right" параметру "align" его тэга "<p>". Нумерация элементов всех коллекций начинается с нуля.

Следует помнить, что при присваивании элементам страницы каких-либо свойств можно использовать лишь доступные свойства. Нельзя, например, непосредственно присвоить тэгу "<p>" или "<div>" свойство color. Для этого нужно изменить свойство style элемента "<p…>", например, командой "имя_элемента. style.color="red"", так как сами тэги "<p>" и "<div>" свойство color не поддерживают.

Для изменения текста на web-странице следует использовать специальное свойство обьектов, могущих содержать текст — innerHTML. Например, следующая команда заменит текст тэга "<div id=asdf>Старый текст</div>" новым текстом: "asdf.innerHTML="<b>Новый текст</b>"". При этом новый текст может содержать тэги HTML, как, например, здесь — "<b>", они будут интерпретироваться так же, как если бы были в документе изначально.

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

"<img src="picture.jpg"

onmouseover=(asdf.innerHTML="<b>Новый текст</b>")>".

Пример использования возможностей Dynamic HTML для создания удобной и красивой web-страницы приведен в главе 22. Подробнее об использовании Dynamic HTML можно узнать из литературы по web-программированию.

VBScripts и JavaScripts, таблицы стилей, Dynamic HTML — все это не что иное, как "языки общения" сайта с посетителем, призванные сделать web-страницу удобной и красивой. В то же время в основе любой web-страницы, даже самой сложной, лежит стандартный язык HTML. Таблицы стилей, скрипты — это лишь надстройки к нему и без HTML использоваться не могут. Поэтому не стоит пренебрегать и изучением основ.

Согласно статистике, собираемой с многих сайтов Интернета, более 99 процентов пользователей Всемирной Сети используют современные браузеры, поддерживающие языки скриптов и таблицы стилей. Поэтому использование новых технологий создания web-страниц, таких, как Dynamic HTML, VBScripts и JavaScripts и CSS, вполне оправдано. Для тех же посетителей, которые не пользуются современными браузерами, можно при желании сделать отдельный вариант сайта с использованием только стандартных средств HTML.

Графика

В самом документе HTML не может быть графических обьектов, так как язык HTML — язык оформления текста, что следует даже из его названия (HyperText Markup Language). Но графические обьекты могут быть вставлены в документ с помощью тэга "<img src="…">", и тогда они будут отображаться при просмотре web-страницы через браузер. Кроме того, несложные графические файлы могут быть конвертированы в специальный формат VML и вставлены в web-страницу, однако VML способен воспринимать только браузер Microsoft Internet Explorer версии 5.0 и выше, как, впрочем, и web-архивы — файлы, в которых с помощью использования стандарта MIME обьединяются в один файл web-страница и все размещенные на ней рисунки и другие обьекты.

В качестве графики могут выступать только файлы в формате Gif и Jpeg, и, для самых новых моделей браузеров — Png. Файлы остальных типов через браузер не могут быть просмотрены.

Для помещения картинки на web-страницу необходимо указать в тэге "<img src="…">" путь к ее файлу. Если графический обьект располагается в той же директории, что и web-страница, на которой он размещен, то в его тэге "<img src="…">" достаточно указать только название файла. Если он расположен в одной из папок сайта, на котором находится web-страница, то можно указать относительный путь к нему — типа "<img src="images/ris.gif">". Если же рисунок, включаемый в web-страницу, располагается на другом сайте, то этом случае в тэге "<img src="…">" должен быть указан полный адрес рисунка — вида "<img src="http://www.site.ru/images/ris.gif">". При просмотре страницы браузер сам загрузит нужную графику с указанного адреса. Полный адрес рисунка можно указывать и в двух других случаях.

Графические обьекты также могут выступать в качестве фона к web-странице и ее некоторым элементам, например, ячейкам таблиц. В этом случае путь к ним должен быть указан в параметре background соответствующего тэга.

Для создания графических обьектов можно использовать любой редактор графики — от Adobe Photoshop до MS Paint. Если редактор не поддерживает форматы Gif и Jpeg, то можно воспользоваться конвертирующими программами или функциями конвертации других программ — вроде MS Photo Editor, открыв в нем файл, сделанный в редакторе, и сохранив в формате Gif или Jpeg. Весьма неплохие возможности по конвертации графических файлов предоставляет программа ACDSee.

Формат Gif рекомендуется применять для рисунков, имеющих много областей, залитых одним цветом (наподобие рисунков из коллекции Clipart пакета Microsoft Office). В файле в формате Gif происходит сжатие информации о рисунке путем замены в последовательности одинаковых точек изображения информации о каждой точке информацией о виде точки и о их количестве. К примеру, вместо указания "красная точка, красная точка, красная точка, красная точка" будет использовано указание "четыре красные точки". Такое сжатие происходит только со строго горизонтальными линиями изображения.

Кроме того, в файле в формате Gif цвет каждой точки может быть описан не более чем одним байтом — то есть быть максимум одним из 256 цветов. Однако в файл формата Gif можно поместить так называемую «палитру» — описание используемых в файле цветов. Тогда цвет каждой точки можно будет описать просто номером этого цвета в палитре, а уж цвета самой палитры описывать в ней полностью. Это позволит, скажем, создать файл в формате Gif, в котором будет использоваться лишь 16 цветов, причем цвет каждой точки будет описываться не восемью битами, а всего четырьмя. В палитре же этого файла будут полностью описаны все цвета, используемые в рисунке. Таким образом достигается сжатие файла — уменьшение его размера.

Некоторые цвета в изображении формата Gif могут быть обьявлены «прозрачными». Это значит, что при вставлении такого рисунка в web-страницу на месте областей, закрашенных этим цветом, будет виден фон страницы. Чтобы сделать в файле Gif какой-либо цвет прозрачным, достаточно воспользоваться входящим в состав Microsoft Office графическим редактором PhotoEditor. Там есть такая функция, вызывающаяся иконкой с изображением карандаша со стрелочкой на панели инструментов "Стандартная".

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

Формат Gif очень хорошо приспособлен для хранения в нем простых изображений и анимированных роликов, особенно рисованных "от руки". Такие файлы в этом формате занимают очень мало места. Однако для хранения фотографических изображений он непригоден, так как не позволяет использовать палитру больше, чем в 256 цветов, а все его способы оптимизации изображения для фотографических изображений не подходят — у них много мелких деталей. Преграду в 256 цветов можно обойти, разбив большое изображение на множество мелких, назначив каждому фрагменту свою палитру из не более чем 256 цветов, а потом на web-странице с помощью сложной табличной разметки собрав все эти фрагменты в одно изображение, но такой прием все же не является хорошим выходом, так как сильно увеличивает время загрузки страницы и ее сложность.

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

Вот, к примеру, исходная картинка (рис. 17.3), файл Jpeg, сохраненный с качеством в 50 процентов (рис. 17.4), и файл Jpeg, сохраненный с качеством в 10 процентов (рис. 17.5).

Рис. 17.3. Исходная картинка.

Рис. 17.4. Файл Jpeg, сохраненный с качеством в 50 процентов

Рис. 17.5. Файл Jpeg, сохраненный с качеством в 10 процентов.

При этом первый рисунок имеет размер 142 килобайта, второй — 17, а третий — 7. Как можно видеть, при утере до половины всей информации о мелких деталях изображения его видимое качество заметно не ухудшается, а размер сокращается во много раз. Именно это и позволяет использовать изображения в формате Jpeg, сжатые на 60–70 процентов, в оформлении web-страниц. Поэтому обязательно оптимизируйте графику, сохраняя или пересохраняя размещаемые в Web рисунки в jpeg-файлах с качеством 40–50 %.

При сохранении изображения в формате Jpeg с пониженным качеством можно улучшить его внешний вид, применив предварительно фильтр «размытия» изображения (в англоязычных программах он обычно называется Blur). Тогда «зернистость» изображения будет меньше.

У обоих форматов графических файлов — Gif и Jpeg — разное предназначение. Первый просто идеален для небольших рисунков, кнопочек, мерцающих звезд, в общем, всего того, что рисуется "от руки". Второй же хорошо использовать для размещения в Интернете фотографий и сканированных изображений. Кроме того, только Gif позволяет сделать анимированный рисунок, — то есть уместить в одном графическом файле небольшой мультипликационный ролик. Последнее делает Gif наилучшим форматом для баннеров — рекламных клипов, размещаемых на сайтах Интернета.

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

Существует множество программ для создания графических обьектов в форматах Gif и Jpeg. Но, к сожалению, на сегодняшний день нельзя назвать ни одной программы, которая сочетала бы в себе многофункциональность и удобство для пользователя. Сложную графику хорошо делать в Adobe Photoshop, но для его освоения придется потратить немало часов. В качестве элементарного средства можно использовать MS Paint, а затем изображение, созданное в нем, конвертировать в нужный формат с помощью Microsoft Photo Editor.

Кроме того, рисунки, созданные в Microsoft Word, будут отконвертированы в форматы Gif и Jpeg при сохранении документа в формате HTML. Таким образом конвертор HTML редактора Microsoft Word можно использовать для преобразования в форматы Gif и Jpeg внедренных в документы рисунков. Конвертор HTML сам выберет лучший формат для каждого рисунка, подберет степень оптимизации.

Заключение

Разработка сайта — всегда творческий процесс. Но помните, что самой главной заповедью для любого web-мастера является необходимость обеспечить удобство посетителя. Только от вас зависит, как будут заходить на ваш сайт пользователи, — ругая web-мастера или восхищаясь его мастерством, и захотят ли они вернуться на сайт снова. Уважайте своего посетителя и стремитесь всячески облегчить ему процесс получения информации с вашего сайта, — ведь это нужно не только ему, но и вам.

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

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

Глава 18. Script Editor: web — редактор из недр Office

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

Все программы, облегчающие создание html-документов, можно условно разделить на три категории. К первой из них будут относиться программы, которые просто облегчают написание собственно HTML-кода. Они имеют развернутую систему замены и поиска фрагментов текста, могут подсвечивать разными цветами HTML-тэги, отделяя тем самым их от информационного содержимого страницы. Некоторые подобные программы позволяют даже одним нажатием мыши или кнопки вставлять в подготавливаемый документ целые фрагменты кода, заранее написанные пользователем или даже изначально встроенные в программу — например, простейшие сценарии. Таких редакторов очень много, практически все они доступны через Сеть, — это и CoffeeCup, и HotDog, и другие. К сожалению, почти все они являются условно-бесплатными и требуют регистрации, причем стандартные способы продления жизни этих программ в их новых версиях крайне затруднены, — их регистрация происходит через Интернет. Среди бесплатных программ подобного рода стоит отметить Aditor,[48] который умеет подсвечивать тэги разными цветами, работать с различными кодировками, имеет многооконный интерфейс.

Ко второй категории относятся так называемые WYSIWYG — редакторы. WYSIWYG — это английская аббревиатура слов "what you see is what you get", то есть "что вы видите, то и получаете". В этих редакторах создание web-страницы напоминает создание документа в Microsoft Word: совершенно не нужно думать о тэгах, параметрах. Можно даже не знать, что такое «тэг» и как он выглядит. Страница создается буквально на глазах: достаточно просто написать текст, вставить рисунки или таблицы, оформить строки нужным образом, — и web-страница готова! Типичными примерами таких редакторов служат Microsoft FrontPage Express, Microsoft Word с его средством сохранения документов в формате HTML, редактор Web-страниц из комплекта Netscape Communicator.

Может показаться, что WYSIWYG-редакторы более перспективны, чем относящиеся к первой категории, — в самом деле, работая с ними, можно думать не о структуре HTML-кода, а непосредственно о дизайне web-страницы. Но, к сожалению, почти все существующие редакторы типа WYSIWYG генерируют плохой HTML-код — с лишними или даже некорректными тэгами. Кроме того, обеспечить качественное отображение созданных в таких редакторах web-страниц разными браузерами без последующего тщательного редактирования их кода представляет собой практически неразрешимую задачу. Безусловно, в каждом WYSIWYG-редакторе есть возможность просмотра HTML-кода, но, к сожалению, средства его редактирования обычно оставляют желать лучшего. Кроме того, вставить в страницу какой-нибудь сценарий в WYSIWYG-редакторах обычно весьма непросто.

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

Однако наилучшим выбором для web-дизайнера на настоящий момент являются редакторы, сочетающие в себе возможности как первой, так и второй категории. В настоящее время к ним относятся Microsoft Script Editor из пакета программ Microsoft Office 2000/XP и Microsoft FrontPage 98/2000/XP, также входящая в пакет Microsoft Office, однако распространяющаяся и отдельно от него, а также некоторые другие программы. Весьма совершенным инструментом для создания web-страниц является первая программа из этих двух — Script Editor, поэтому стоит уделить ей особое внимание, тем более что она дает разработчику удобную среду еще и для программирования на языках сценариев.

Эта глава — не пошаговое руководство по использованию Script Editor. Ее предназначение — описать возможности этого редактора, а также указать на некоторые не совсем очевидные его функции, чтобы впоследствии вам не потребовалось их искать. Освоить же Script Editor можно лишь одним способом — непосредственно работая с ним и самостоятельно исследуя его. Тем более что это не так и сложно.

Script Editor входит в состав пакета офисных программ Microsoft Office 2000 и Microsoft Office XP и предназначен для разработки Web-сайта, написания программ на языках JavaScript и VBScript и других Интернет-разработок.

При установке пакета Microsoft Office 2000/XP Script Editor по умолчанию не ставится. Для его установки необходимо выбрать "Выборочную установку", в меню установки компонентов развернуть пункт "Средства Office", там — "Редактор HTML-файлов", а, развернув этот пункт, — "Редактор Web-сценариев", который пометить как "Запускать с моего компьютера" (рис. 18.1).

Рис. 18.1. Чтобы установить Script Editor, отметьте этот пункт при инсталляции Microsoft Office 2000/XP.

После этого Script Editor может быть вызван из меню Сервис текстового редактора Microsoft Word 2000/XP с помощью пункта меню Макросы-Редактор сценариев. При инсталляции Microsoft Office 2000 исполняемый файл Script Editor по умолчанию устанавливается в папку Program Files\Microsoft Visual Studio\Common\IDE\IDE98 и называется MSE.EXE, а если вы устанавливаете Microsoft Office XP, то он будет иметь название MSE7.EXE и разместится в той же папке, что и остальные файлы Office. После окончания установки создайте ярлык на этот файл, который поместите в удобное для вас место.

Во время работы со Script Editor вы наверняка встретитесь и с двумя другими названиями этой программы — Visual Studio[49] и Microsoft Development Environment. Второе из них даже указано в окне About и в заголовке окна программы, но означает оно попросту "среда разработки". Поэтому название Script Editor лучше всего соответствует предназначению этой программы.

Script Editor дает web-дизайнеру немалое количество возможностей. Здесь будут описаны лишь некоторые, самые важные из них.

Если в Script Editor создать файл HTML или открыть существующий, то окно с загруженным файлом будет иметь три вкладки. Средняя из них, которая называется Source, показывает HTML-код документа, подсвечивая коричневым цветом тэги, красным — свойства тэгов, а синим — значения свойств (скажем, «font» — это тэг, «size» — это его свойство, а «4» — значение свойства). Левая переводит Script Editor в режим Design — визуальной разработки web-страницы, а правая — Quick View (только в Microsoft Office 2000) — позволяет оценить будущий вид страницы.

Окно Source фактически является полноценным редактором кода HTML. Цветовое выделение тэгов весьма удобно для ориентации в тексте. Имеется функция многократной отмены сделанных изменений.

Для того, чтобы добавить в текст страницы код, соответствующий какому-нибудь элементу, достаточно всего лишь дважды кликнуть мышью на название этого элемента на панели Toolbox (рис. 18.2). Эта панель по умолчанию располагается слева окна Script Editor.

Рис. 18.2. Панель Toolbox редактора Script Editor. Кликнув на названии любого элемента на этой панели, вы вставите на web-страницу код, ему соответствующий, независимо от того, в каком режиме вы работаете — создания кода или визуальной разработки.

Есть даже возможность самому создавать такие элементы — скопируйте в буфер обмена нужный текст, можно с html-тэгами, поставьте мышь на панель Toolbox и выберите из контекстного меню правой кнопки мыши пункт «Paste». После этого двойной клик мыши на этом элементе приведет к вставке в позицию курсора запомненного таким образом текста.

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

Для того, чтобы добавить на страницу многоколоночную таблицу, не нужно долго и упорно прописывать тэги <tr>, <td> и др. — можно вызвать диалоговое окно "Table"-"Insert Table", указать там нужные параметры таблицы, и ее пустая заготовка будет вставлена в документ, — останется только разместить рисунки и текст. Кликнув правой кнопкой мыши на каком-либо тэге и выбрав пункт Properties, можно задать параметры тэга в специальном диалоговом окне, и они будут правильно и корректно переведены на язык HTML и помещены в код.

Если в стандартном HTML не окажется средств для задания какому-либо элементу нужных свойств, то будет использован язык таблиц стилей — CSS. Тогда при выборе из контекстного меню пункта Properties отобразится не окно задания свойств тэга, а большая панель свойств Properties (рис. 18.3), где можно задать огромное количество параметров тэга. Однако следует помнить, что не все браузеры смогут эти параметры правильно проинтерпретировать. Эту панель можно вызвать и из меню View, выбрав пункт "Properties Window".

Рис. 18.3. Панель Properties редактора Script Editor.

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

Чтобы вставить на страницу рисунок, достаточно перетащить его иконку из «Проводника» в окно Script Editor на нужное место, а потом слегка откорректировать его имя, если он находился на локальном диске.

Превосходные средства работы с Html-кодом — это лишь очень малая часть возможностей Script Editor (хотя и их вполне бы хватило на небольшой web-редактор, причем очень даже неплохой для своего класса)! Вкладка Design основного окна этой программы представляет собой полноценный WYSIWYG-редактор Web-страницы (рис. 18.4), многократно превосходящий по своим возможностям большинство других аналогов.

Рис. 18.4.Вкладка Design окна программы Script Editor. Включен режим отображения границ таблиц и непечатаемых символов.

Система генерации кода в режиме визуальной разработки в Script Editor построена очень разумно. Фактически она ничем не отличается от такой же генерации в режиме Source, когда в текст страницы попросту помещаются заранее приготовленные шаблоны из тэгов. Поэтому фрагменты кода, генерируемые Script Editor при помещении на страницу какого-либо обьекта в режиме Design, совпадают с кодом, вставляемым в документ в режиме отображения HTML-текста, что делает работу Script Editor очень корректной.

В то время как количество лишних тэгов, «мусора» у многих WYSIWYG-редакторов вроде FrontPage Express или Microsoft Word 97 достигает порой астрономической величины, а уборка их становится долгим и неприятным занятием, код, генерируемый Script Editor в режиме Design, является настолько компактным и правильным, что практически не требует последующей коррекции (разве что адреса рисунков придется подправить, так как по умолчанию указывается полный путь к ним на локальном диске). Все диалоги задания свойств элементов страницы и панель свойств элементов в режиме Design работают точно так же, как и в режиме Source. Возможности вставления таблиц, указания параметров тэгов работают как в режиме написания кода, так и в режиме визуальной разработки, просто в первом случае вы увидите, как вставляется собственно код, а во втором — соответствующий ему элемент.

При работе в режиме Design разработчику доступно огромное количество возможностей сделать свою работу максимально удобной. О таких вещах, как выпадающий список для задания вида и размера шрифта для текста или его стиля, кнопки для установки выравнивания по центру или по одной из сторон, кнопки создания нумерованных списков можно даже не упоминать — они само собой разумеются. Очень большую помощь при создании или правке макета страницы могут оказать кнопки "Отобразить границы" и "Отобразить непечатаемые символы" (см. также на рис. 18.4), расположенные с левого краю панели инструментов Design. Достаточно их нажать, чтобы вся структура страницы, сколь бы сложной она ни была, оказалась видна как на ладони.

Кнопка Absolute Mode позволит располагать новые элементы в произвольном месте страницы — их расположение будет задаваться растояниями от верхнего и левого краев документа. Реализуется такое расположение посредством использования языка CSS. Если же эта кнопка не нажата, то новый элемент будет вставлен на страницу с использованием стандартных средств Html и с учетом их ограничений.

Кнопки Foreground Color (цвет шрифта) и Background Color (цвет фона) панели инструментов Html в режиме Design вызывают очень удобные диалоговые окна задания цвета выделенного элемента или набираемого текста. Три вкладки каждого из этих окон предоставляют разработчику все возможные способы задания цвета — от непосредственного ввода значений отдельных компонентов цветов до выбора нужного цвета в "безопасной палитре" (все цвета из этого набора отображаются одинаково на любом мониторе, в любом браузере, в любой стране) или названия желаемого цвета.

Третья вкладка окна Script Editor из пакета программ Microsoft Office 2000 — Quick View — позволяет посмотреть, как будет выглядеть страница в браузере. Нет необходимости специально загружать браузер и постоянно нажимать Refresh, чтобы увидеть страницу так, как она в нем отображается. Страница в Quick View за очень небольшими отличиями (касающимися только работы скриптов) отображается так же, как и в браузере Microsoft Internet Explorer 5.0 и более старших его версиях. (В Script Editor'е из Microsoft Office XP данная вкладка отсутствует.)

Все панели инструментов Script Editor являются свободно настраиваемыми — такими же, как и в Microsoft Word. Можно свободно размещать кнопки, вызывающие те или иные команды, создавать новые панели инструментов, настраивать рабочую среду под свои требования.

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

К сожалению, список отменяемых действий очищается при переключении в режим Quick View — по всей видимости, это вызвано ошибкой в самой программе. Будем надеяться, что в будущих версиях этот досадный недостаток будет исправлен.

Система поиска фрагментов текста тоже весьма эргономична — поле ввода текста на панели инструментов Standart (рис. 18.5). Вводишь туда нужное слово и жмешь Enter, а Script Editor сама путешествует по документу, подсвечивая найденные вхождения. И не надо никакого диалогового окна вызывать, жать комбинации клавиш или мышью двигать… Все слова, по которым проводился поиск, сохраняются, и впоследствии отображаются в выпадающем списке. Почему до этого не додумались разработчики Microsoft Word — непонятно: а ведь как бы было удобно…

Рис. 18.5. Искать в документе, открытом в Script Editor, просто. Просто введите текст в поле ввода вверху окна.

В Script Editor из Microsoft Office 2000 поиск можно вести и во всех файлах в папке, где находится открытый документ, а также в любой другой произвольной папке, включая вложенные, и даже в нескольких папках одновременно. Результат поиска выводится в виде списка файлов, рядом с именами которых показывается строка первого вхождения искомого текста, а также фрагмент файла, содержащий его. Для загрузки нужного файла в редактор достаточно кликнуть пару раз на его названии в этом списке. (Внимательнее работайте с окном «Browse» при указании директорий для поиска — не забудьте нажать кнопку "Add to list", чтобы Script Editor стал искать текст и в этой папке.) К сожалению, при разработке Microsoft Office XP эти расширенные возможности поиска из Script Editor'а были удалены.

Если страница большая, со множеством элементов, то ориентироваться в ней непросто. Желательно было бы представить ее в виде некоей структуры, «карты». И это позволяет делать Script Editor! Открыв окно "View-OtherWindow-DocumentOutline", можно получить подробнейшую схему страницы (рис. 18.6), со всеми ее иерархическими связями и компонентами. И если надо быстро перейти к какому-либо компоненту страницы, то рыться в тоннах кода нет необходимости — пара кликов на его имени в схеме, и курсор — уже на этом элементе.

Рис. 18.6. Схема web-страницы — просто подарок для дизайнера, который уже запутался в переплетениях таблиц, ссылок, рисунков…

В окне Project Explorer, которое можно вызвать из меню View, отображаются все открываемые ранее для редактирования файлы. Любой из них можно загрузить для работы двумя кликами мыши. Тоже — удобно: открыл единожды все файлы в папке с сайтом и загружай любой без поисков в диалоговых окнах или "Проводнике".

Все панели инструментов и окна являются свободно перемещаемыми по экрану. Их можно расположить как в окне Script Editor, так и в любом другом месте. Но особенно привлекает интересное техническое решение в Script Editor из Microsoft Office 2000, предложенное разработчиками редактора и помогающее быстро и удобно организовать для себя оптимальную рабочую среду. На одной из панелей инструментов (а посмотреть их список и отобразить любую можно так же, как и в Word — просто щелкнув правой кнопкой мыши в любом месте серого поля вверху окна, рядом с панелями инструментов), Windows UI, есть выпадающее меню, содержащее перечень возможных состояний рабочей среды — Debug, Design, Edit Html и др. Если выбрать какое-нибудь из них, то Script Editor само примет соответствующее состояние — будут отображены нужные и закрыты ненужные панели и окна, компоненты редактора выстроятся около краев. К примеру, при выборе состояния Edit Html отобразятся главное окно с кодом, окна Document Outline, Properties и Project Explorer — все, что нужно для полноценной работы с кодом. К сожалению, из следующей версии Script Editor'а данное меню разработчики почему-то убрали.

Всего вышеизложенного хватило бы на приличный редактор web-страниц, который занял бы достойное место на рынке. Но рассказанное — лишь малая часть возможностей этого поистине уникального инструмента для создания страниц Интернет-ресурса любой сложности, поставляемого вместе с пакетами Microsoft Office 2000 и Microsoft Office XP и, к сожалению, так мало описанного в руководствах. Особую уникальность Script Editor придает то, что помимо web-редактора он представляет из себя еще и среду программирования, по набору функций похожую на среду Visual Basic for Applications. Рассчитана эта среда на два языка — JavaScript, VBScript, а также на использование технологии Active Server Pages, которая позволяет выполнять сценарии на скриптовых языках на стороне web-сервера. С технологией ASP большинству пользователей вряд ли придется столкнуться, она используется сейчас нечасто, а вот первые два языка сценариев позволяют украсить и сделать удобной любую страницу, где бы она ни была расположена.

Те, кто уже писал макросы для Microsoft Word, найдут в Script Editor много общего с встроенным в Word редактором Visual Basic for Applications. И это понятно — Microsoft стремится создать единую среду программирования для разработки приложений на любых языках, включая в новые редакции своих продуктов лучшее из предыдущих версий. Кроме того, web-сценарии фактически представляют собой "макросы для браузера", так как они не компилируются заранее, а интерпретируются браузерами после загрузки web-страницы.

Чтобы добавить на страницу сценарий, даже не надо самому писать тэги. Можно просто кликнуть правой кнопкой мыши на нужном месте и из контекстного меню выбрать Script Block-Client (второй вариант этого меню, Server, относится к возможности реализации технологии ASP). Для более легкой ориентировки на странице, где имеется множество скриптов, очень хорошо использовать окно Script Outline (в Microsoft Office 2000 вызывается из меню View-Other Window-Script Outline, а в Microsoft Office XP — кнопкой в заголовке вышеописанного окна Document Outline), в котором перечислены все скрипты, находящиеся в документе. Чтобы перейти к нужному, достаточно пары кликов мыши (рис. 18.7), при этом курсор в окне Source установится на его начало.

Рис. 18.7. Карта сценариев web-страницы. Все четко структурировано

Если в документе есть обьекты Dynamic HTML (то есть поименованные компоненты — любому элементу web-страницы можно дать имя, включив в его тэг выражение "id=уникальное_имя" и впоследствии обращаться к этому элементу из сценариев[51]), то окно Script Outline в Script Editor из Microsoft Office 2000 дает возможность быстро создавать заготовки обработчиков событий (то есть сценариев, описывающих какие-либо действия при наступлении какого-либо состояния страницы, браузера или обьектов — компонентов документа). Имена всех таких обьектов отображаются в Script Outline, и при необходимости создать сценарий-реакцию на какое-либо событие достаточно щелкнуть на имени нужного обьекта и выбрать нужное событие (заодно можно узнать, какие вообще события могут происходить с этим обьектом). В документ, в его раздел <head> будет вставлена заготовка скрипта-обработчика. Имена уже существующих обработчиков выделяются жирным шрифтом и, нажав на какое-нибудь из них, можно переместиться к его коду. К сожалению, в Microsoft Office XP из Script Editor'а была убрана и эта возможность.

(Технология Dynamic Html неразрывно связана с технологиями JavaScript и VBScript. Иными словами, можно сказать, что Dynamic Html позволяет обратиться к любому обьекту на странице, а VBScript и JavaScript — что-нибудь с этим обьектом сделать. Поэтому сценарии на VBScript и JavaScript часто включают в себя элементы Dynamic Html — обращения к поименованным элементам страницы.)

В списке обьектов окна Script Outline всегда присутствуют обьекты window (то есть окно браузера) и document — сама web-страница и, соответственно, их события — загрузка, выгрузка, прокрутка и др. Само это окно доступно, разумеется, только в режиме просмотра кода.

При написании самого текста сценария Script Editor как бы «ведет» программиста по программе, подсказывая ему возможные продолжения команд. Подобная система используется в большинстве современных средств разработки приложений, так что те, кто ранее программировал на других языках, окажутся в своей привычной среде, а те, кто ранее не занимался созданием программ, получат возможность познакомиться с настоящей средой программирования.

Если программист, создавая текст сценария (то есть вводя команды в текст страницы между тэгами <script…> и </script>, напишет имя какого-либо обьекта, то Script Editor выдаст ему список возможных действий с этим обьектом (рис. 18.8).

Рис. 18.8. Создавая сценарий, думай только об алгоритме — остальное редактор тебе подскажет: и возможные продолжения команды….

Если же будет написано имя команды, то разработчику будет предоставлена краткая всплывающая справка о ее синтаксисе (рис. 18.9).

Рис. 18.9.…и ее необходимые параметры…

Сценарий — это самая настоящая программа, и, к сожалению, при ее написании ошибки практически неизбежны. В Script Editor есть мощная система отладки сценариев, мало чем уступающая аналогичным системам других сред программирования. Для того, чтобы установить местонахождение ошибки, используются "точки останова" и контрольные значения, а чтобы разобраться в сложной странице, где есть несколько скриптов, вызывающих один другой — окно стека вызова — "Call Stack". В окне редактора можно пометить с помощью мыши на сером поле у левого края окна определенные строки сценария (поставить "точку останова"), и в этом случае при загрузке страницы с этим сценарием в браузер из среды Script Editor (это можно сделать, нажав клавишу F5) в момент, когда выполнение сценария дойдет до отмеченной строки, его работа остановится и активируется окно редактора кода. Задержав в этот момент курсор мыши над какой-нибудь переменной из кода сценария, во всплывающей подсказке можно увидеть ее значение. Также значение любой переменной показывается в окне контрольных значений ("Locals").

Система отладки сценариев Script Editor очень похожа на аналигичную систему редактора Visual Basic for Applications, описанную в первой части книги.

Все имеющиеся в Script Editor из Microsoft Office 2000 окна, предназначенные для web-программирования, показаны на рис. 18.10. Отличия в Microsoft Office XP несущественны.

Рис. 18.10. Все, что нужно для полноценного программирования.

Выполнять сценарий по строкам, чтобы поточнее определить место ошибки, труда не составит — богатые возможности меню Debug (т. е. "Отладка") всегда к вашим услугам.

Всех перечисленных возможностей Script Editor с лихвой хватит подавляющему большинству разработчиков web-страниц. Те же, кто занимается web-программированием профессионально, найдут в этом редакторе практически все необходимые инструменты для создания мощных web-приложений, не описанные здесь за недостатком места, — такие, как окно просмотра процессов системы и т. д. Если пожелаете, то можете попробовать самостоятельно разобраться с возможностями Script Editor в облсти программирования, однако вам будет это гораздо проще сделать, если вы сначала познакомитесь с какой-либо средой программирования, например, редактором Visual Basic for Applications, описанным в первой части книги. В противном случае выяснить назначение некоторых инструментов будет не очень просто.

В Script Editor имеется мощная система справки с богатыми возможностями поиска нужной информации. Так же, как и, скажем, в среде Visual Basic for Applications, в случае вызова справки в то время, как курсор находится на какой-нибудь команде языка сценария она откроется на странице, посвященной именно этой команде. Страницы справочной системы красиво оформлены. При осуществлении поиска по какому-либо ключевому слову список найденных разделов выдается в порядке убывания количества его вхождений, а сами вхождения выделяются в окне справки (рис. 18.11).

Рис. 18.11. Справка — море информации по web-программированию.

Справочная система Visual Studio фактически представляет собой комплекс из нескольких подобных систем, посвященных Html, JavaScript, VBScript и технологии Active Server Pages. К сожалению, неподготовленному человеку будет трудно в ней разобраться, так как она, во-первых, написана на английском языке, а, во-вторых, представляет из себя некое «перемешение» описаний всех трех технологий, так что отделить то, что относится к простому HTML, от описаний приемов и команд ASP будет нелегко. Но редактор Script Editor представляет из себя настолько дружественную среду разработки, что HTML в нем можно освоить, даже не заглядывая в инструкции — просто сравнивая то, что рисуешь, с тем, что он пишет на страницу, и наоборот.

Безусловно, у такого крупного продукта, как Script Editor, есть и свои недостатки. Например, в той версии этой программы, что входит в состав Microsoft Office 2000, нет возможности "переноса по словам" текста страницы (Word Wrap), который есть даже в «Блокноте». Вследствие этого редактирование загруженной в редактор web-страницы, текст которой не разделен на строки, становится крайне сложной задачей. (Выходом из такого положения может стать загрузка страницы как текста в Microsoft Word или WordPad с последующим ее сохранением в том же файле как "текста с концами строк".). Впрочем, новая версия Script Editor'а из Microsoft Office XP данного недостатка лишена. Справка по языкам сценариев и Html при всем своем богатстве несколько трудна в использовании. Однако для чисто практического применения с целью создания web-страниц Script Editor подходит идеально. Тем более что этот продукт входит в стандартную поставку Microsoft Office 2000 и Microsoft Office XP и таким образом имеется на любом компакт-диске с этим пакетом программ. Просто установите Microsoft Office какой-нибудь из этих версий, и вы получите также и Script Editor, если укажете необходимость его установки в диалоговом окне инсталлятора.

К сожалению, из новой версии Script Editor'а, входящей в состав Microsoft Office XP, исключены многие удобные функции, имевшиеся в его предыдущем варианте. Появившиеся же усовершенствования в основном касаются только интерфейса программы или тонкостей ее использования при разработке сценариев (например, в новой версии есть возможность отобразить в окне программы только тексты сценариев, присутствующие на странице, или, наоборот, текст страницы без них). Впрочем, во многом обе версии редактора одинаковы.

Если вы не желаете устанавливать Microsoft Office 2000 или Microsoft Office XP, так как привыкли работать с Microsoft Office 97, но вам нужен Script Editor, то просто проинсталлируйте новую версию Microsoft Office в каталог, отличный от того, в котором расположен Microsoft Office 97, и при установке не забудьте указать необходимость сохранения старых версий программ пакета в одном из диалогов инсталлятора. Вы можете не устанавливать другие компоненты Office — Word или Excel, Script Editor будет прекрасно работать и без них. Только создайте для него ярлык на Рабочем столе (путь см. выше), чтобы не приходилось каждый раз перемещаться по папкам при необходимости его запустить.

Script Editor не будет работать, если не установлен браузер Microsoft Internet Explorer 5.0, но этот браузер устанавливается вместе с Microsoft Office 2000, и без него невозможна работа также и Office. К Script Editor можно «пристыковать» любой другой браузер, установленный на жестком диске, и просматривать страницы и в нем.

В целом можно сказать, что Script Editor сочетает в себе лучшие свойства редакторов web-страниц, как текстовых, так и типа WYSIWYG, а также полноценной среды программирования web-сценариев, что делает этот инструмент практически универсальным. Создание страниц в Script Editor — процесс приятный и увлекательный. Наконец-то у web-дизайнеров появилась возможность думать не о тэгах и командах, а о красоте и удобстве своих творений, не рискуя при этом получить перегруженный лишними тэгами «кривой» код, как это было раньше при использовании многих web-редакторов.

В свете всего вышеизложенного эту среду можно рекомендовать использовать всем — от начинающих создателей Интернет-сайтов до профессиональных web-программистов.

Глава 19. PHP: интерактивность в действии

Когда-то давно, еще в прошлом веке, для того, чтобы сделать сайт "на мировом уровне", достаточно было просто уметь делать web-страницы на HTML и обладать художественным вкусом. Спустя некоторое время требования усложнились: использование JavaScript и Dynamic HTML стало рутинным и дизайн сайта, не имеющего подобных «украшений», считался устаревшим. Вскоре правилом "хорошего тона" для корпоративного сайта стало применение сложных программ на Perl или C++, а создавать такие сайты стало по силам лишь крупным дизайнерским студиям.

Однако простые web-дизайнеры не желали мириться с такой ситуацией. И на свет появился PHP — язык программирования, обладающий возможностями сложных скриптовых языков, но в то же время удивительно простой и легкий в изучении и применении. О нем и пойдет дальше рассказ.

Определения

Web-программирование — разработка любых программных продуктов, предназначенных для работы на сайтах World Wide Web. Строго говоря, даже разработка web-страниц на чистом HTML является web-программированием, ведь при просмотре страницы браузер фактически исполняет код HTML, форматируя текст согласно инструкциям этого языка. В настоящее время под web-программированием понимают создание CGI-приложений и использование на web-странице технологий JavaScript и VBScript для достижений сложных эффектов.

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

CGI (сокращение от Common Gateway Interface) — технология, позволяющая запускать на web-сервере программы, могущие получать данные от посетителей сайтов, поддерживаемых этим web-сервером, и в свою очередь выдавать им обработанные данные в виде web-страниц или других файлов. Для использования технологии CGI программа-web-сервер должна удовлетворять определенным критериям — "поддерживать CGI". Если программа, запускаемая на web-сервере, представлена не двоичным кодом (т. е. скомпилированным файлом), а текстовым, то для ее выполнения требуется программа-интерпретатор того языка, на котором написана эта программа. Такой интерпретатор включается в состав web-сервера и вызывается им при необходимости заняться выполнением программного кода.

CGI-сценарий (CGI-скрипт) — программа (в текстовом виде), предназначенная для исполнения на web-сервере. Для создания CGI-скриптов можно использовать любой язык программирования — важно лишь, чтобы на том web-сервере, где предполагается эту программу запускать, имелся интерпретатор этого языка. В настоящее время наиболее частоиспользумыми языками CGI-программирования являются PHP, Perl, C++.

Web-программирование

Все языки программирования, используемые при разработке web-сайтов, можно разделить на две большие группы.

К первой будут относиться те из них, код которых выполняется на компьютере посетителя сайта — в его браузере. Это известные всем JavaScript, VBScript, Java-апплеты. Программы на этих языках встраиваются в код web-страниц (или выносятся в отдельный файл с вызовом из web-страниц, но браузер все равно обрабатывает такие вынесенные программы как если бы они были встроены в код страницы).

Во вторую же группу можно включить те языки, программы на которых выполняются на том компьютере, где расположен web-сервер. Эта группа будет гораздо более обширной, — дело в том, что в принципе на web-сервере могут исполняться программы на любом языке (даже командных. bat-файлов MS-DOS), важно лишь, чтобы на нем была установлена программа-интерпретатор этого языка, удовлетворяющая особым требованиям — стандарту CGI, которым также должен удовлетворять сам web-сервер.

PHP относится ко второй группе — программа на PHP исполняется на web-сервере. Однако от других CGI-языков PHP очень сильно отличается в лучшую сторону, — прежде всего своей простотой. Создавая программы на PHP, нет необходимости учитывать все те многочисленные мелочи, которые отравляют жизнь программистам на Perl или C++: не надо заботиться о правах доступа к файлам сценария, не надо прописывать точные пути к различным модулям, нет необходимости следить за отсутствием в файле скрипта недопустимых символов. Синтаксис языка таков, что он допускает его легкое освоение как начинающим программистом, так и тем, кто уже использовал ранее какой-либо язык программирования. Для тестирования PHP-программ на локальном компьютере необязательно устанавливать на нем ту же операционную систему, что и у провайдера хостинга сайта, где эти программы будут применяться, — достаточно лишь установить соответствующей web-сервер и подключить к нему модуль PHP. Можно целиком и полностью сосредоточиться на решаемой задаче и не думать о мелочах. Именно это и делает PHP весьма хорошим выбором для web-дизайнера, который, начав его использовать, может вообще забыть о каких-либо других CGI-языках.

Немного истории

В отличие от многих других языков программирования, PHP был создан не какой-либо корпорацией или гением-программистом, а обычным пользователем, Расмусом Лердорфом, в далеком 1994 году. Цель разработки языка была проста — сделать домашнюю страничку Расмуса более интерактивной, а значит, и более привлекательной для посетителей. Расмус разработал базовый синтаксис и написал первый интерпретатор своего языка, получившего название Personal Home Page Tools — т. е. PHP. Этот интерпретатор мог обрабатывать лишь несколько основных команд, однако начало было положено.

В 1995 году Расмус доработал интерпретатор PHP, соединив его с другой своей программой, умевшей обрабатывать HTML-формы (именовавшейся FI — от "Form Interpretator"), а также сделал так, что интерпретатор, получивший название PHP/FI Version 2, мог становиться частью web-сервера. Последнее сделало программы на PHP очень быстроисполняющимися. Кроме того, в том же 1995 году интерпретатор PHP был дополнен возможностями обработки новых команд, в частности, функций работы с сервером баз данных MySQL и автоматического создания gif-файлов (последнее, к примеру, может быть использовано для генерации кнопок-счетчиков посещений). PHP/FI был размещен в Сети для всеобщего использования, и началось его повсеместное распространение.

Web-мастера быстро оценили достоинства нового языка web-программирования — легкость освоения и богатство возможностей, и вскоре традиционные Perl, C++ стали сдавать ему свои позиции. Так как исходный код интерпретатора был открыт (а сам он, ясное дело, бесплатен), то энтузиасты стали заниматься его доработкой, и летом 1998 года появился на свет PHP3 — детище Зива Сураски и Энди Гутманса (Zeev Suraski and Andi Gutmans). В этой версии интерпретатора были исправлены баги предыдущей версии и добавлены новые функции, что еще больше поспособствовало его победному шествию по миру. Уже к концу 1999 года число сайтов, построенных на основе PHP, перевалило за миллион. Весьма важным достоинством PHP также являлось то, что его можно было использовать в различных операционных системах — от Windows до Unix и Linux.

В 2000-м году вышла четвертая версия интерпретатора PHP, разработанная компанией Zend Technologies, дополненная множеством новых функций. В настоящее время именно она является наиболее распространенной.

С чего начать?

Основным источником сведений по PHP является официальный сайт его разработчиков — www.php.net. Однако тем, кто желает разработать сайт с применением PHP, лучше прежде всего посетить русский сайт "PHP по-русски", расположенный по адресу http://php.spb.ru, и загрузить с него два файла — полное описание PHP на русском языке (точный перевод руководства по PHP с сайта www.php.net) и web-сервер Apache с PHP-модулем, сконфигурированным для немедленного использования. Оба файла подготовил и разместил в Сети ведущий этого сайта Дмитрий Бородин.

Готовый к использованию web-сервер вместе с интерпретатором PHP, а также системой управления базами данных MySQL вы также можете найти на сайте проекта «Денвер», расположенном по адресу http://dklab.ru/chicken/web. В отличие от вышеупомянутого ресурса "PHP по-русски", ведущие проекта "Денвер" Дмитрий Котеров, Дмитрий Короленко, Игорь Светликов и Андрей Любченко регулярно обновляют свой проект, постоянно размещая на нем свежие версии web-сервера с набором компонентов. Однако установка «Денвера» более автоматизирована, нежели набора с сайта "PHP по-русски", и предусматривает значительно меньшую ее «управляемость».

"Денвер" можно порекомендовать тем, кто предпочитает автоматически получить на своем компьютере готовый к использованию web-сервер в целях изучения языка PHP и создания на нем программ, а "PHP по-русски" понравится тому, кто привык все, что ему надо, настраивать сам. Тем более что последнее будет весьма легко — достаточно внимательно прочитать комментарий Дмитрия с сайта и файлы Readme из дистрибутива.

Итак, первым делом установите на своем компьютере web-сервер Apache — из «Денвера» или "PHP по-русски" и освойте его использование. После этого вы сможете полноценно работать с программами на PHP на своем компьютере, не выходя в Интернет, например, тестировать разработанные с использованием PHP сайты.

Ну, а затем приступайте к изучению языка. В этой главе книги изложены самые основные его понятия и описаны базовые команды, с помощью которых можно создать неплохие PHP-программы. За остальной информацией обращайтесь к описанию языка, тем более что оно переведено на русский язык и снабжено массой примеров кода. Только помните, что в том дистрибутиве web-сервера, о котором говорилось выше, отсутствуют модули, расширяющие возможности PHP, так что некоторые разделы описания будут неактуальны. Впрочем, ничего не мешает вам загрузить нужные модули отдельно и установить их (на сайте http://php.spb.ru описано, как это сделать), однако первое время такая необходимость у вас вряд ли появится.

На сайте http://phpclub.unet.ru вы найдете множество примеров сценариев на PHP, сможете загрузить литературу на русском языке, получить от профессионалов в web-программировании ответ на свой вопрос или принять участие в каком-либо обсуждении или пообщаться с коллегами в чате. Архив Форума, расположенного на этом сайте, содержит в себе ответы практически на все мыслимые и немыслимые вопросы по web-программированию на PHP. Также здесь регулярно публикуются новости мира PHP-программирования, рассказывается о новых разработках в этой области, размещается информация о вакансиях web-дизайнеров и программистов на рынке труда. Также немало полезной информации есть в Web-клубе по адресу http://www.webclub.ru/materials/php3, в частности, руководство по PHP, представленное на сайте "PHP для всех", изначально размещалось именно там.

Для написания кода на PHP подходит любой текстовый редактор — от «Блокнота» до "Script Editor'а" из пакета Microsoft Office, здесь выбор зависит от вашего личного вкуса и желания.

В RuNet'е использовать PHP разрешается, например, на таких бесплатных серверах, как http://www.h1.ru, http://meridian.tomsk.ru, http://webservis.ru, http://www.hut.ru, http://wallst.ru, на иностранных — http://www.saxen.net и других. Однако при выборе бесплатного хостинга для размещения сайта помните, что в подавляющем большинстве случаев вам придется в обязательном порядке размещать на своих страницах рекламные баннеры (за их показ на вашем сайте компании, владеющей сервером хостинга, рекламодатели платят деньги, которые, собственно, и служат оплатой поддержки размещенных на этом сервере сайтов). Кроме того, весьма часто владельцы хостингов с поддержкой PHP и других CGI-языков запрещают размещать на сайтах, расположенных у них, файлы zip, rar, exe, mp3. Впрочем, последнее условие можно обойти, использовав для хранения таких файлов другой бесплатный сервер, — пусть и без поддержки PHP.

На рынке платного хостинга ситуация другая — сейчас уже трудно найти хостинг, где бы не предлагали использовать PHP. Тарифные планы, не предполагающие использование PHP, сохранились разве что у некоторых провайдеров услуг доступа в Интернет, параллельно предоставляющих и услугу размещения web-сайтов за отдельную плату. Так что для построения сайтов, использующих PHP, можно выбирать практически любой сервер платного хостинга, оценивая его по различным другим критериям (цена, надежность, скорость и т. д.). Достаточно трудно рекомендовать какую-либо определенную фирму, однако можете попробовать ValueHost (www.valuehost.ru), www.350mb.ru, www.net.ru и другие.

Более подробно о PHP вы можете узнать из специализированной литературы, например, из книги "PHP: полезные приемы", готовящейся в настоящее время к выходу в свет в издательстве "Горячая линия — Телеком". При подготовке данной главы использовались материалы из этой книги.

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

Основы языка

Синтаксис PHP прост. Программы на PHP встраиваются в текст web-страницы так же, как и сценарии на JavaScript, VBScript, — окаймляясь угловыми скобками с указанием языка: <?php… текст программы… >. Команды PHP обязательно разделяются символом точки с запятой — ";" (символы конца абзаца или конца строки не учитывается никак), после последней в программе команды его можно не ставить. Также символ";" не ставится после условных операторов и операторов цикла.

Пример программы на PHP вы можете увидеть на рис. 19.1.

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

Чтобы PHP мог отличать переменные от строк или команд, ее имя должно начинаться со знака доллара — "$" и не должно содержать пробелов или знаков апострофа и некоторых других. При анализе программного кода интерпретатор PHP считает именем переменной все, что содержится между $ и ближайшим к нему символом, недопустимым в имени переменной.

Переменные в PHP могут быть четырех типов — число (целое и дробное), строка текста, массив и обьект. Интерпретатор PHP автоматически определяет тип переменной на основании анализа ее содержимого. Подробнее о типах данных вы можете узнать в руководстве по PHP, там же рассказано и об особенностях работы с массивами (и вообще обьяснено, что это такое, если вы еще не знаете).

Помните, что для включения переменной в строку текста нельзя использовать символ "+" — он пригоден лишь для числовых выражений. Достаточно просто поместить переменную туда, где она должна стоять — например, в итоге выполнения кода $a="птица певчая"; $b="Дятел — $a" переменной $b будет присвоено значение "дятел — птица певчая".

Довольно часто используются сокращенные обозначения арифметических действий над переменными и действий по присваиванию им каких-либо значений. Например, команда $a++ означает, что переменную $a надо увеличить на единицу, а команда $a+=3 — увеличить на 3, что и будет сделано, если она имеет числовой формат.

Ниже будут перечислены некоторые основные команды PHP, которых вполне хватит для реализации несложных проектов. Для более полного ознакомления с командами PHP можно изучить Руководство по этому языку, доступное, например, с адреса http://php.spb.ru или другие публикации.

· include "имя файла" — команда для включения содержимого одного файла в другой. Содержимое того файла, имя которого указывается в команде, целиком и полностью вставляется на то место, где располагается эта функция, при этом все коды PHP, содержащиеся во вставляемом файле, исполняются так же, как если бы они были на месте этой функции. Пример можно увидеть на рис..

· mail ("Кому", «Тема», "Текст сообщения", "Дополнительные заголовки") — отправка почтового сообщения. При выполнении данной команды на сервере формируется электронное письмо в соответствии с указанными параметрами и отправляется с помощью серверной почтовой программы. В качестве параметра «Кому» может выступать набор адресов, разделенных запятыми. "Дополнительные заголовки" могут быть совершенно любые, разделяться они должны комбинацией символов /n, которая в PHP означает перевод строки. Пример использования функции mail вы можете увидеть ниже, в описании устройства электронного магазина. (Если среди "Дополнительных заголовков" не указано поле From, то оно заполняется по умолчанию, например, именем "Unprivileged User".)

· echo «текст» — вывод на web-страницу какого-либо текста. Чтобы вывести на web-страницу значение какой-либо переменной, достаточно просто написать ее имя внутри выводимой строки: команда echo "это цифра $a" выведет в web-страницу текст "это цифра 1", если ранее переменной $a присваивалось значение единицы.

· if (условие) {…команды, которые должны выполняться, если условие верно…;} else {…команды, которые должны выполняться, если условие неверно…} — команда, позволяющая выполнить то или иное действие в зависимости от верности или неверности того или иного условия. В фигурных скобках может располагаться несколько команд, разделенных точкой с запятой. В качестве условия может быть оператор сравнения «равно» — "==" (именно два знака равенства!), «больше» — ">", «меньше» — "<" и их комбинации — скажем, "<=" — "меньше или равно". Можно использовать и несколько условий, взяв каждое из них, а также все вместе в скобки и разделяя знаками "&&" — «и» или "||" — «или».

Для того, чтобы выполнять различные команды в зависимости от условия, могущего принимать три или больше значений, следует использовать оператор switch (описание смотрите в руководстве), — аналог оператора case в VBA и некоторых других языках.

· for (начальное значение счетчика, условие продолжения цикла, изменение счетчика на каждом цикле) {…команды…;} — цикл, то есть повторение указанных в нем команд столько раз, сколько позволет условие изменения счетчика (т. е. переменной, специально выделенной для подсчета числа выполнений команд цикла). К примеру цикл for ($i = 1; $i <= 10; $i++) {echo $i;} выводит в web-страницу числа с 1 до 10, так как в нем изначально устанавливается значение счетчика в 1 — $i=1, каждый цикл его значение увеличивается на 1 — $i++, а продолжаться он будет до тех пор, пока значение счетчика не превысит 10 (т. е. пока $i<=10).

Также в PHP можно использовать циклы без открытого обьявления числа повторений — while (условие) {…команды…;} и do {…команды…} while (условие);. Описание их смотрите в руководстве по PHP, отличаются же они тем, что второй цикл (do…while) будет в любом случае выполнен не менее одного раза.

Программа на PHP может прерываться кодом web-страницы, — для этого достаточно вставить закрывающий тэг до этого кода и открывающий — после. Все, что находится между ними, будет выдаваться в браузер без какой-либо обработки, рассматриваясь как выводимое с помощью команды echo. Иными словами, код

<?php if ($a==1) {?><p>Переменная а равна 1</p><?php }?>

эквивалентен коду

<?php if ($a==1) {echo "<p> Переменная а равна 1</p>";}?>,

однако первый вариант меньше нагружает процессор компьютера, на котором расположен интерпретатор PHP.

Из сказанного также следует, что все программы на PHP, расположенные на одной web-странице, представляют из себя одну большую программу, — несмотря на то, что они разделяются блоками обычного текста страницы. Именно поэтому переменная, обьявленная в расположенном в начале страницы коде, сохраняет свое значение не только до ее конца, но и во всех присоединяемых с помощью команды include файлах. Вот, к примеру, демонстрация этого — рис. 19.1.

Рис. 19.1. Пример PHP-кода. Посмотрите внимательно на код (окна слева) и итог его выполнения (окно браузера справа). Обратите внимание, что переменная a, которой присвоено значение еще в первом программном блоке левой страницы, сохранила его не только в других ее блоках, но и в программе, расположенной во включаемой с помощью команды include страницы.

Однако помните, что если вы создаете функцию на PHP (попросту вставляя в программу инструкцию Function имя () {…команды функции…} с целью потом ее вызывать командой имя), то переменные, обьявленные в ней, по умолчанию имеют установленное значение только внутри функции. Кроме того, также по умолчанию переменные, обьявленные вне функции, в ней самой никакого значения не имеют. Подробнее о функциях и о переменных в них читайте в руководстве по PHP, например, с того же сайта http://php.spb.ru.

Обычно web-сервер настраивается так, что на предмет наличия программ на PHP просматриваются файлы, имеющие расширение. php, phtml, остальные же файлы передаются в браузер пользователя без поиска в них команд PHP. Делается так для более быстрой работы сервера, а также для обеспечения возможности установки на сервере разных интерпретаторов (например, SSI — Server Side Includes, в технологии, в какой-то мере предшествовавшей PHP), так как тогда каждому из интерпретаторов назначаются свои расширения для обработки соответствующих файлов.

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

Работа с формами

Значения переменных можно передавать между различными страницами сайта — с помощью использования форм. Формой называется конструкция, состоящая из поименованных элементов особых типов, заключенных между HTML-тэгами <form…> и </form>. В качестве элементов формы могут выступать поля ввода текста, кнопки, выпадающие меню, переключатели, квадратики для отметки галочкой — checkbox'ы, а также картинки формата jpg или gif.

Наиболее важным свойством формы является то, что в ее заголовке — в открывающем тэге <form…> можно указать адрес какого-либо файла, и тогда при его загрузке в программный код этого файла, если он будет там присутствовать, передадутся значения всех переменных, установленных в этой форме — в частности, значения всех элементов формы, как если бы эти значения были установлены в программе, расположенной в самом загружаемом файле. Таким образом можно передавать значения переменных между различными web-страницами, используя их в программном коде. Имена переменных соответствуют тем именам, которые были даны элементам формы в их тэгах, а значения — соответственно значениям этих элементов: для поля ввода текста — введенному тексту, для переключателя или checkbox'а — True при отмеченном и False при неотмеченном, для рисунка — координаты указателя мыши относительно верхнего левого угла изображения, для выпадающего меню (элемент <select name="имя"><option value="text1">text</option>…</select>) — значение параметра value выбранного пункта option.

Пример создания и применения формы приведен ниже, в разделе "Практическое использование".

Зачем он нужен?

Можно спросить: а зачем же может вообще потребоваться PHP? Разве обычных HTML и пары JavaScript не достаточно для создания красивой web-страницы?

Ну, во-первых, PHP может очень серьезно облегчить работу создателя сайта. С помощью команды include() можно автоматически вставлять один и тот же фрагмент HTML-кода во множество страниц, просто поместив в них эту команду с именем файла, содержащего код общей части. Причем этот код тоже может меняться в зависимости от страницы, в которую он включается, — достаточно в этой странице установить значение какой-либо переменной, а в коде общей части поместить инструкцию if, результат работы которой зависит от этого значения. В результате для обновления такой общей части будет достаточно отредактировать один файл — тот, который ее, собственно, и содержит, — и тогда для посетителей сайта соответственно изменятся все его страницы, как если бы вы все их вручную отредактировали.

Работа web-мастера по поддержке сайта при использовании PHP заметно облегчается. К примеру, немного поработав, можно сделать сценарий, «пробегающий» по всем файлам в каком-либо каталоге и «вытаскивающий» оттуда какие-либо фрагменты (например, содержимое тэгов «meta» — функция get_meta_tags). Таким образом можно, скажем, автоматически создавать оглавления журналов или библиотек: стоит поместить в каталог новую статью (оформленную согласно определенным правилам), как она тут же станет появляться в оглавлении на главной странице без необходимости эту главную страницу обновлять вручную.

С помощью PHP можно серьезно облегчить частое обновление страницы — так, если страница содержит часто меняющуюся вставку (например, новости), то будет неплохо поместить на место этих новостей инструкцию include ("file"), а в этом файле разместить текст новостей. В результате при обновлении новостей редактированию придется подвергать лишь сам их текст, а не HTML-код заглавной страницы, что и самому делать легче, и неопытному помощнику доверить можно.

Помощь web-мастеру и службе поддержки web-ресурса — это лишь весьма малая часть функций PHP. Используя PHP, можно обогатить сайт огромным количеством новых возможностей, делающих его удобным и нужным для посетителя. Так, с помощью функции mail() легко обеспечить отправку почтового сообщения по какому-либо адресу со страниц сайта, — например, мнения посетителя о сайте или вопроса его владельцу. Сделать гостевую книгу, чат или форум на PHP тоже возможно, в Сети нетрудно найти немало уже готовых подобных сценариев. В следующем разделе будет рассказано, как с помощью PHP улучшить удобство работы с сайтом, содержащим множество однотипных небольших разделов, или создать мини-Интернет-магазин.

Одним из наиболее заметных достоинств PHP является возможность легкой работы с серверами баз данных. Ранее, до появления этого языка, задание, выражающееся словами "приделать базу данных к web-странице", было довольно трудным и малодоступным для начинающих web-дизайнеров. Приходилось либо самостоятельно разрабатывать хитроумные скрипты, взаимодействующие как с программой управления базой данных, так и с web-страницами сайта, либо закупать их у фирм-разработчиков. С помощью же PHP использование базы данных на сайте стало чуть ли не элементарным. Для работы с подавляющим большинством типов баз данных в PHP есть встроенные функции, поэтому теперь для достаточно лишь установить на web-сервере программу работы с базой данных (наиболее часто используется бесплатная MySQL — http://www.mysql.com) и включить в текст PHP-сценария команды работы с нею (их список приведен в описании языка вместе с примерами использования).

Возможности PHP можно весьма серьезно расширить с помощью дополнительных модулей, содержащих различные функции. Эти модули при необходимости размещаются на web-сервере, на котором установлен PHP-интерпретатор. Их можно загрузить с адреса http://www.php.net, там же в разделе документации приведено и полное их описание. (В том web-сервере с установленным PHP, который распространяется с сайта http://php.spb.ru, никаких дополнительных модулей нет для уменьшения размера дистрибутива.) Например, модуль Zlib позволяет работать из программы на PHP с архивами в формате Gzip, а модуль libswf — с Flash-презентациями, создавая их и редактируя прямо из программы на сервере. Так как PHP — развивающийся язык, то новые модули появляются довольно часто, однако использовать их можно лишь после установки на web-сервер, что провайдеры хостинговых услуг могут не сделать. Поэтому при желании использовать функции из какого-либо модуля нужно сначала проверить, поддерживает ли их web-сервер, на котором вы собираетесь размещать сайт.

Сделать это можно, либо разместив на сервере страницу со строчкой <?php phpinfo()?> и загрузив ее с сервера в браузер (на ней будет отображена информация о версии PHP, параметрах web-сервера и многом другом, в том числе дополнительных модулях), либо попросту задав вопрос группе технической поддержки сервера.

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

Практическое использование.

Вот несколько примеров использования PHP на реальных сайтах, существующих в российском Интернете.

Выборочная загрузка

1. Сайт www.harchikov.ru посвящен творчеству популярного певца-барда Александра Харчикова. На сайте должны были быть представлены вышедшие альбомы певца в количестве 15 штук и записи песен каждого альбома в MP3-формате. При создании сайта возникла необходимость обеспечить удобную навигацию. Общепринятый способ — ссылки на страницы с описанием каждого из альбомов и песнями из него — имел тот недостаток, что посетитель, желающий просмотреть не один альбом, а сразу несколько, был бы вынужден постоянно переходить со страницы на страницу, делая лишние усилия. Кроме того, в случае разрыва связи во время загрузки какого-либо файла посетитель, ушедший на другую страницу, был бы вынужден снова возвращаться на ту, с которой он этот файл загружать начал, тратя время на ее поиск. Недостаток другого варианта — размещения информации о всех альбомах на одной странице — ясен: размер этой страницы получился бы очень большим, а интересная посетителю информация могла бы занимать лишь небольшую ее часть.

Поэтому было сделано так. На главной странице разместилась форма, а у каждого названия альбома — checkbox, внизу же страницы — кнопка перехода на список альбомов. Посетитель мог отметить заинтересовавшие его альбомы (рис. 19.2), и после нажатия кнопки перехода PHP-сценарий выводил ему страницу с описаниями лишь тех альбомов, которые посетитель выбрал (рис. 19.3).

Сделано это просто.

Рис. 19.2. Чтобы просмотреть лишь избранные альбомы, достаточно их отметить…

Рис. 19.3.…и вот, как на ладони — только они.

Все checkbox'ы заглавной страницы сайта имеют свои имена: <INPUT name=pan01 type=checkbox> и находятся в большой форме, параметром action которой является имя файла с программой на PHP, выводящей описания альбомов в соответствии с данными этой формы, а для передачи данных формы используется метод get (т. е. ее заголовок имеет вид <FORM action=albm.php method=get name=forma>). Последнее приводит к тому, что в адресе страницы с выведенными описаниями альбомов присутствуют переменные (см. рис. 19.3), т. е. если посетитель занесет этот адрес в «Избранное», то при последующих возвращениях на сайт по этой ссылке (например, для дальнейшей загрузки песен выбранных альбомов) ему не придется вновь выбирать альбомы на заглавной странице, как это было бы в случае использования метода post, не помещающего имена переменных и их значения в строку адреса (что выглядит красивее). Кнопка, вызывающая переход на страницу, указанную в параметре action заголовка формы, должна иметь тип submit:

<INPUT type=submit value="Вывести оглавления отмеченных альбомов">

Загрузив заглавную страницу сайта www.harchikov.ru, можно легко изучить ее структуру.

В файле же albm.php помещена простая программа, выглядящая так:

<?php

if ($bar01==True) {include ("bar01.php"); }

if ($bar02==True) {include ("bar02.php"); }

… по строке на каждый альбом…

?>

В файлах bar.01.php, bar02.php и т. д. находятся описания альбомов и ссылки на MP3-файлы песен. Если checkbox с соответствующим именем был отмечен на заглавной странице, то переменная его имени оказывается равной True — именно это и проверяется в сценарии.

Удивительно, что этот простейший прием в настоящее время практически не применяется на сайтах Сети — используется традиционная схема размещения информации со множеством ссылок на отдельные разделы. А ведь как удобно — например, на сайте Александра Харчикова можно выбрать альбомы, сгенерировать себе страницу со ссылками на песни из них и, заходя на нее, постепенно загружать песни или передать весь список ссылок на файлы в какую-нибудь из программ-"качалок". Или, скажем, на сайте фирмы «Экон-Профи» (www.econprofi.ru) точно так же сделан раздел "Вопросы и ответы" (рис. 19.4), — отметив интересующие вопросы на странице раздела, можно получить подробные консультации исключительно по выбранным темам. Полученная страница и загрузится быстрее, да и при ее распечатке лишней бумаги тратить не потребуется.

Рис. 19.4. Если вас заинтересовали лишь отдельные вопросы, нет надобности загружать всю страницу.

Данную схему, разумеется, можно доработать. Опыт показывает, что посетители чаще всего предпочитают просмотреть либо два-три выбранных раздела, либо все разделы сразу. В последнем случае им придется отмечать все checkbox'ы страницы, что занимает время и силы. Поэтому стоит поместить на страницу еще и кнопку вывода сразу всех разделов — "Просмотреть все". Ей можно назначить гиперссылку с адресной строкой, содержащей все переменные в значении on, а можно немного доработать код PHP на странице-обработчике запроса, попросту добавив во все условия проверку значения еще одной, общей для всех условий переменной: if (($bar02==True) || ($all==True)) {… (напоминаю, что знак || означает "или"), и тогда гиперссылка может вести всего лишь на адрес albm.php?all=True. Можно для решения той же задачи поместить на страницу пару сценариев на JavaScript, выполняющих соответственно отметку всех checkbox'ов и, наоборот, их очистку (см. такой, к примеру, на странице www.harchikov.ru/cass.php). Так что простор для творчества имеется, и немалый.

Интернет-магазин

2. С помощью PHP можно легко сделать мини-Интернет-магазин — т. е. установить на сайт форму заказа, которая будет отправляться вам по электронной почте. При этом почтовая программа посетителя использоваться не будет — ему даже необязательно вообще ее иметь.

К примеру, такой "виртуальный магазин" аудиокассет сделан на странице http://www.harchikov.ru/cass.php (рис. 19.5).

Рис. 19.5. Интернет-магазин — выбирай и заказывай. А строили его всего 5 минут.

Посетитель может просмотреть описания кассет и отметить заинтересовавшие его предложения, поставив галочку в checkbox'ах. В низу страницы расположен раздел оформления заказа — сверившись с суммой (рассчитываемой небольшим сценарием на javascript и выводимой средствами Dynamic HTML в соответствующей строке формы), посетитель должен ввести свои контактные данные и отправить заказ, нажав соответствующую кнопку.

Страница «магазина» содержит форму с заголовком <FORM METHOD="post" ACTION="http://www.harchikov.ru/zakaz.php" NAME="mainform"> — то есть PHP-программа, обрабатывающая форму, находится в файле zakaz.php на сайте www.harchikov.ru (и именно на эту страницу произойдет переход после нажатия кнопки отправления заказа на исходной странице — "Отправить заказ"), а в адресной строке переменные отображаться не будут. Поскольку программы на PHP, чтобы быть исполненными, должны содержаться в какой-либо web-странице, то команда отправки почты содержится в файле zakaz.php. Вот как выглядит PHP-сценарий, формирующий письмо с заказом и отправляющий его администратору сайта:

<?php

$zak=" \n";

if ($RNS == True){$zak="$zak Русские не сдаются! \n"; }

if ($ZAR == True){$zak="$zak За Родину \n"; }

if ($PRP == True){$zak="$zak Песни пролетариата \n"; }

…

mail ("mail@harchikov.ru", "Заказ на кассеты", "С адреса $email с контактными данными $cont пришла заявка на приобретение кассет: $zak. Отправитель пользовался браузером $HTTP_USER_AGENT, работал с IP-адреса $REMOTE_ADDR", "From: $email\nReply-To: $email\nContent-Type: text/plain; charset=windows-1251");

?>

Команда, собственно отправляющая письмо, стоит последней — это mail (описание читайте выше). Так как весьма желательно, чтобы получатель письма мог сразу начать выполнять заказ, не тратя время на расшифровку письма, то с помощью небольшого фрагмента кода на основе данных о значениях переданных переменных создается строка с построчным перечнем полных названий заказываемых товаров (чтобы не было проблем с восприятием интерпретатором кириллических символов в качестве имен переменных, имя каждого checkbox'а содержит только латинские буквы, например, PVS — <INPUT NAME=PVS TYPE=checkbox>) — и уже эта строка помещается в письмо. В результате тот, кто обрабатывает заказы, получит аккуратный список заказанных товаров и сведения о заказчике.

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

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

Упомянутый сценарий Интернет-магазина подробно рассмотрен в книге "PHP: полезные приемы".

Заключение

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

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

Полезные советы

· Наиболее частой ошибкой при создании программ на PHP является отсутствие знака точки с запятой после какого-либо оператора. За его наличием надо внимательно следить. Также не следует забывать, что при выполнении в каком-либо условии сравнения на равенство двух переменных между ними необходимо ставить не один, а два знака равенства: if (a==b) и никак иначе.

Глава 20. Правильный проект — залог успеха

Перед тем, как начинать создание сайта, стоит сесть и продумать общий план будущего Интернет-представительства: что там будет находиться, как его содержимое[52] станет соотноситься друг с другом, какие дополнительные возможности предоставит сайт посетителю, каким будет стиль оформления web-страниц. Для каждого сайта план проектировки будет свой, однако есть некоторые законы, которые стоит изложить.

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

1. На сайте обязательно должна быть главная страница с кратким каталогом всех разделов сайта, причем с каждой страницы сайта должна быть ссылка на эту главную страницу. Это вполне естественное требование — сайт должен иметь некий «центр», с которого будет возможен общий обзор содержимого всего Интернет-ресурса. Зачастую посетитель, пришедший на одну из страниц сайта (например, в результате поиска в какой-либо поисковой машине), потом переходит на главную страницу и просматривает остальные материалы сайта.

2. Крайне желательно наличие удобного навигатора по сайту, то есть набора ссылок на остальные страницы сайта, реализованных как обычные ссылки или на основе сценариев. В настоящее время наилучшим решением признано размещение списка ссылок на ресурсы сайта в колонке таблицы, располагающейся слева (как, например, на http://www.freeware.ru) или справа (пример — http://antorlov.chat.ru) от основного текста первой страницы (см. рис. 20.1).

Рис. 20.1. Два типа расположений навигатора — слева и справа. Решите сами, какой удобнее.

Расположение списка ссылок справа имеет определенные преимущества с точки зрения удобства, так как курсор чаще всего находится именно в правой части окна программы (ведь именно там — полоса прокрутки и кнопки закрытия и развертывания и свертывания окна). Если разделов сайта не так и много, то допустимо размещать список ссылок сверху или снизу.

Примеры удобных навигаторов на основе JavaScript и Dynamic HTML приведены в главе 22. Желательно размещать навигатор на всех страницах сайта, разве что за исключением чисто специальных (например, отдельных статей, размещенных на сайте).

Если сайт обширный, то рекомендуется сделать "карту сайта" — отдельную страницу с минимальным оформлением, содержащую просто список всех доступных пользователям страниц сайта. Ссылка на карту сайта должна располагаться на всех его страницах.

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

4. Крайне желательно, чтобы графика на сайте имела лишь вспомогательное значение (за исключением сайтов, посвященных изобразительному искусству и другим подобным тематикам). Многие пользователи отключают отображение графики в своих браузерах для ускорения путешествий по Интернету.

Кроме того, пользователи часто сохраняют web-страницы на своем диске, при этом отнюдь не все модели браузеров позволяют (и отнюдь не все пользователи этого хотят) сохранять страницу вместе со всей графикой, вследствие чего сохраненная страница без графики может выглядеть очень непрезентабельно (рис. 20.2). Многие красивые эффекты можно реализовать с помощью стандартных средств HTML, CSS и соответствующего оформления текста.

Рис. 20.2. Пример сохраненной на диске страницы, на которой было много графических обьектов. А сначала она была такой красивой…

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

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

5. Размер каждой страницы сайта не должен превышать предел в 200–300 килобайт вместе с графикой (оптимально — 50-100), за исключением страниц с большим количеством информации — электронных книг, например. В любом случае при большом размере того или иного файла об этом должно быть сказано около ссылки на него. Разбиение большого файла на части с ссылкой на «продолжение» в конце каждого абсолютно недопустимо — многие пользователи используют функцию браузера "Сохранить обьект как…" и сохраняют страницы, не просматривая их заранее.

6. До любого уголка сайта пользователь должен иметь возможность добраться максимум в два-три нажатия мыши. Крайне желательна оптимизация сайта на предмет как можно более быстрой по тему навигации. Чем меньше нажатий и перемещений курсора требуется от посетителя для просмотра информации на сайте, тем лучше. Недопустима ситуация, когда в качестве первой страницы используется перегруженный графикой документ с надписью «Вход» или даже графическим рисунком, являющимся ссылкой — ничего, кроме дополнительных проблем посетителю, это не дает.

7. Используйте стандартные названия для стандартных частей сайта. Не стремитесь специально к какой-либо стилизации его внешнего вида под тот или иной объект: название «Кают-компания» вместо стандартного «Форум» вызовет по меньшей мере недоумение. Посетитель не должен задумываться, для чего предназначена каждая из частей вашего сайта и что он может там найти.

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

9. Если на сайте представлено большое количество текстовой информации, то обязательно следует размещать на нем не только web-страницы с текстами, но и архивы с ними, желательно в формате Zip. Отнюдь не все пользователи Интернета горят желанием читать тексты в online-режиме. Весьма желательно собирать тексты одинаковой тематики в один архив, чтобы их все можно было загрузить одним нажатием мыши.

10. Крайне желательно разработать правильное цветовое оформление сайта. Использование светлого текста на темном фоне допустимо лишь при условии четкой его видимости, достижимой, например, путем оформления всего текста жирным шрифтом. Страницы с преимущественно текстовой информацией должны иметь светлый, лучше всего — белый фон. Черный фон не допустим ни в каких случаях. Цвет шрифта рекомендуется делать стандартным черным, темно-зеленым или темно-синим. Красный шрифт допустим лишь для некоторых заголовков и выделения самой важной информации.

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

11. Весьма нежелательно использовать при разработке сайта фреймы.

Фрейм — это способ создания внутри web-страницы окна для отображения другой web-страницы, реализуется с помощью тэга <frame>. Если страница загружена во фрейм, то она может заменяться на другую без замены содержащей фрейм страницы. Эта возможность — единственное достоинство фреймов. Недостатков же — масса. Во-первых, страницу, загруженную во фрейм, нельзя так просто сохранить на локальном диске. Приходится прибегать к ухищрениям вроде тех, что описаны ниже. Во-вторых, на web-страницу во фрейме нельзя так просто поставить закладку, — она будет ставиться на главную страницу сайта. Страницу во фрейме нельзя перезагрузить кнопкой «Обновить» — приходится использовать одноименный пункт из меню правой кнопки мыши. Можно еще долго перечислять проблемы, однако, думается, и этого достаточно.

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

Если до сих пор вы не знали, что такое фреймы, то и не стремитесь узнать о том, как их создавать. Ничего, кроме проблем для посетителей сайта и для вас, их использование не принесет. Знайте лишь, что если вы попали на страницу, на которой есть фреймы, то сохранить ее вместе с содержимым фреймов можно лишь из Microsoft Internet Explorer 5.0 и выше путем выбора из меню "Сохранить как…" пункта "Web-страница, полностью". Если же вы работаете с другой моделью браузера, то для сохранения страницы вам придется использовать пункты типа "Вид — В виде HTML" или одноименный из меню правой кнопки мыши, вначале просматривая HTML-код страницы, загруженной во фрейм, потом сохраняя его в качестве текстового файла, и только затем, переименовав его в. html, получая возможность загрузить его в браузер. Мнение о том, как все это неудобно, можете высказать web-дизайнеру сайта, откуда вам пришлось таким образом сохранять материалы.

12. Использование новых технологий отображения графики (Flash, VRML, MetaStream) допустимо лишь в том случае, если достигаемые ими возможности не могут быт реализованы другими средствами и имеют большое значение для представления информации на сайте.

Ни в коем случае нельзя использовать их "для красоты" — без особой к тому необходимости. Ясно, например, что на сайте Интернет-магазина использование технологии MetaStream может серьезно помочь посетителю сделать свой выбор (эта технология позволяет отобразить трехмерное изображение обьекта с возможностью его вращения пользователем вокруг всех трех осей, очень удачно использовалась некоторое время в одном Интернет-магазине — рис. 20.3), но на большинстве других сайтов использовать ее незачем.

Рис. 20.3.Пример использования технологии MetaStream на сайте Интернет-магазина. Можно посмотреть товар со всех сторон.

То же самое относится и к технологии Flash, — если для реализации предназначения сайта ее возможности непосредственно не требуются, то и не стоит ее использовать. Хотя бы потому, что страницу с Flash-роликом трудно сохранить на жесткий диск компьютера и впоследствии просматривать в автономном режиме. Разумеется, в случае применения технологий типа Flash обязательно необходимо дать посетителю возможность от них отказаться: если Flash-заставка расположена на входной странице сайта, то на ней же должна обязательно присутствовать ссылка на дальнейшую его часть, позволяющая пропустить заставку и сразу перейти к просмотру сайта.

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

* * *

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

Веселый подвальчик

Все приведенные здесь истории являются вольными пересказами случаев, рассказы о которых путешествуют среди «компьютерщиков». Были ли они в реальности или нет — знают лишь их авторы, но о том, кто эти авторы, никто уже не знает…

Пленочная клавиатура

Одна подмосковная фирма приобрела в московском компьютерном магазине 10 компьютеров. Через пару недель в этот же магазин приехала секретарша этой фирмы и приобрела 10 прозрачных пластмассовых крышек для клавиатур. Через неделю она приехала опять и приобрела уже 20 штук. Удивленные менеджеры спросили покупательницу: а, собственно, зачем она это делает. В ответ они услышали, что "уж очень они ненадежные, лопаются каждую неделю, пальцы царапают…" Выяснилось, что сотрудники фирмы посчитали, что крышки являются защитным покрытием для клавиатуры и все это время печатали прямо через них…

Мышь-акселератор

В службу сервиса компьютерного магазина позвонила девушка и сказала, что у нее "компьютер не заводится". На вопрос, что она конкретно делает, звонящая ответила: "я жму на белую педаль, а компьютер не включается".

Этой педалью оказалась мышь — девушка положила ее на пол и посчитала, что от нажатия на "маленькую белую педальку" компьютер заведется, как автомобиль…

Усмирение CD-Rom'а

Один программист, решив подшутить над сотрудниками бухгалтерии организации, в которой он работал, вечером после их ухода с рабочих мест поместил на бухгалтерские компьютеры небольшую программу, функцией которой было открытие и закрытие лотка CD-ROM'а с периодом в 2 секунды. Запрограммировав начало ее работы на 15–00 следующего дня, он на следующий день с удовольствием представлял себе, какой шум поднимется среди мнительных бухгалтеров, боящихся любой поломки в сложной технике.

Когда в 16–00 следующего дня к нему никто не обратился, он решил посмотреть, что же происходит в бухгалтерии. И увидел, что лотки CD-ROM'ов на всех компьютерах этого отдела крест-накрест заклеены полосами широкого скотча, прочности которого как раз хватало для противодействия мотору, выдвигающему эти лотки…

Подставка для кофе

Звонок в службу сервиса компьютерного магазина:

Клиент: — Алло, тут у меня сломалась компьютерная подставка для кофе.

Менеджер (удивленно): — Простите, это как?

Клиент: — Ну, я позавчера у вас купил компьютер, а сегодня она сломалась. Надо бы заменить…

Менеджер: — Простите, но у нас нет в продаже компьютеров с подставкой для кофе и никогда не было. Вы, наверное, что-то путаете. Может, вы приобрели компьютер на какой-нибудь рекламной акции? Как она выглядит, эта подставка?

Клиент: — Да ни на какой акции я не был, компьютер в вашем магазине приобрел. А подставка — да из компьютера выезжает, кнопку нажать только надо. Еще на ней надпись: 20 — хэ.

Менеджер долго не мог ничего ответить, поняв, что "компьютерная подставка для кофе" — это лоток CD-ROM'а.

Громкий компьютер

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

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

Глава 21. Размещение и реклама сайта

Размещение

Долгие дни, а то и ночи труда по созданию вашего представительства в Web наконец-то завершились! И вот, наконец ваш сайт готов и лежит в отдельной папке на вашем компьютере. Сделаны все страницы, написаны все скрипты, нарисованы картинки… Теперь надо поместить сайт во всемирную сеть Интернет.

Вариантов такого размещения, по большому счету, два. Можно приобрести у RIPE отдельный IP-адрес (или сразу несколько адресов) и, приобретя мощный компьютер и подключив его к какому-либо маршрутизатору, уже входящему в Интернет, тем самым стать владельцем полноценного узла Сети. Однако данный вариант весьма сложен и дорог: стоимость оборудования, необходимого для такого подключения, достигает многих тысяч долларов, кроме того, за выделение IP-адреса, за само подключение к маршрутизатору и за передаваемые данные тоже придется платить, — соответственно RIPE и владельцу маршрутизатора. Да еще и самостоятельно настраивать все программное обеспечение приобретенного компьютера, чтобы превратить его в web-сервер.

В связи с весьма большой стоимостью и трудностями обслуживания размещение сайта на отдельном собственном компьютере, входящем в Сеть, — прерогатива крупных предприятий и провайдерских фирм.[53] Для простого частного сайта (или сайта небольшой компании) данное решение будет крайне невыгодным и неокупаемым. Поэтому в Интернете существуют специальные "службы хостинга",[54] которые берут всю заботу по установке компьютерной техники и подключению ее к Сети, а также по настройке и обслуживанию программного обеспечения на себя. Каждому пользователю такой службы выделяется часть места на жестких дисках ее компьютеров, и ему для создания сайта и его дальнейшего развития достаточно лишь размещать файлы на своем сайте в соответствии с требованиями хостера. Доступ из Интернета к сайтам пользователей, размещенным на службе хостинга, организуется с помощью использования виртуального хостинга,[55] что позволяет иметь на все такие сайты только один IP-адрес или их небольшое число.

В свою очередь, все службы хостинга можно разделить на три группы. Во-первых, это коммерческие предприятия, предоставляющие хостинг за деньги. Таковых немало — в RuNet'е это, например, www.majordomo.ru, www.net.ru, www.valuehost.ru и другие. Коммерческие службы хостинга обычно предоставляют своим клиентам немало возможностей по работе с сайтом, — от поддержки большого числа языков сценариев, выполняющихся на стороне сервера (например, PHP, Perl) до организации на сайте почтовой службы. Цены на услуги коммерческого хостинга в настоящее время варьируют от 10 до 60–70 долларов за сайт среднего обьема в месяц. Все коммерческие хостеры дают возможность своим клиентам привязать к размещенному у них сайту принадлежащее клиенту доменное имя (обычно — второго уровня), а некоторые даже оказывают услуги по его регистрации, иной раз по более низким ценам, чем непосредственно в РосНИИРос'е и Ru-центре.

Во-вторых, хостинг может быть предоставлен и бесплатно. В Сети есть специальные службы, предоставляющие возможность бесплатного размещения у себя сайтов для всех без исключения. Несмотря на известное выражение про сыр и мышеловку, качество базовых услуг на некоторых из них иной раз не уступает и платным сервисам. Живут службы бесплатного хостинга в основном за счет показа рекламы на страницах управления сайтом. Однако все они предоставляют пользователю лишь доменные имена третьего уровня (типа name.hoster.ru) или даже длинные адреса (например, www.hoster.ru/~name). На некоторых службах бесплатного хостинга есть возможность привязывать зарегистрированное ранее доменное имя второго уровня к сайту, размещенному на них, однако таковых служб довольно мало.

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

На настоящий момент в России наиболее известными являются такие сервера бесплатного хостинга, как www.netman.ru (предоставляет 10 мегабайт для почтового ящика и сайта с доменным именем третьего уровня, в качестве же основного домена для такого имени предлагается немалый набор имен второго уровня — от fromru.com до professor.ru), www.chat.ru (дают 10 мегабайт места и доменное имя третьего уровня name.chat.ru), www.newmail.ru (32 мегабайта места, имена третьего уровня вида name.nm.ru), www.h1.ru (разрешают выполнять сценарии на стороне сервера при условии обязательного размещения рекламы, запрещают размещать архивы и mp3-файлы). Конкретные условия размещения сайтов всегда указаны на страницах сайта самой службы хостинга. На многих серверах бесплатного хостинга существуют так называемые "конференции технической поддержки", в которых пользователи могут задать вопросы, высказать пожелания. Обязательно отыщите такую конференцию на том сервере, где вы хотите разместить сайт, и почитайте сообщения в ней, чтобы знать, чего от этого сервера можно ожидать.

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

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

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

Стоит также иметь в виду, что оплата платного хостинга всегда повременная (то есть необходимо платить определенную сумму каждый год или месяц), как, впрочем, и оплата доменного имени второго уровня (она вносится сразу за год). При неоплате очередного месяца сайт может быть удален. На бесплатных же хостингах удаление сайтов либо вообще не производится (как на www.chat.ru), либо совершается после 6-12 месяцев отсутствия обновлений сайта (как на www.newmail.ru, www.h1.ru) или посещения web-интерфейса управления сайтом (как на www.netman.ru). Так что если вы не желаете ежемесячно платить какие-либо деньги или беспокоитесь, что в будущем можете не суметь этого сделать, — выбирайте бесплатный хостинг.

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

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

· отсутствие абонентской платы за собственно сайт;

· хранение сайта все время, пока на счету пользователя есть деньги;

· отсутствие обязательного ежемесячного списания денег со счета при пользовании услугами по доступу в Интернет;

· хранение счета неограниченное время;

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

Иными словами, провайдер должен обещать, что все то время (хоть десять лет), пока на счету пользователя есть хоть один цент, а он сам не пользуется услугами доступа в Сеть посредством данного провайдера, страничка должна сохраняться. Кроме того, должна быть возможность обновлять страничку при работе через другого провайдера. Иначе вполне возможна ситуация, когда сайт будет уничтожен провайдером за неуплату денег, и все труды по рекламе сайта окажутся напрасными.

Например, условия должны выглядеть так: доступ в Сеть — 90 центов в час, минимальная наработка в месяц отсутствует, при этом бесплатно предоставляется место под страничку размером в 2 мегабайта, доступ по FTP, в том числе и из сетей других провайдеров.

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

Некоторые провайдеры предоставляют возможность демо-доступа на свои сайты (то есть при доступе под определенными логином и паролем есть возможность путешествовать по сайту провайдера без какой-либо оплаты). Обязательно надо проверять все такие демо-входы и смотреть, нет ли возможности доступа из них к страницам пользователей. Если есть — то стоит очень внимательно изучить условия размещения страницы у этого провайдера, так как возможность бесплатного доступа к сайту (то есть без оплаты доступа в Интернет) привлекает пользователей весьма и весьма серьезно, хотя, к сожалению, использовать такой доступ смогут только жители того города, где расположен данный провайдер.

Наилучшее расположение сайта — это, разумеется, служба платного хостинга. В настоящее время цены на услуги коммерческих хостеров довольно низкие, однако в том случае, если они все равно остаются недостаточно приемлемыми, можно объединить нескольких web-мастеров в одну команду и, сложившись деньгами, приобрести один аккаунт на всех у того хостера, который позволяет создавать большое число доменных имен третьего уровня, и зарегистрировать красивое имя второго уровня. Ну, а затем для каждого из web-мастеров создать папку и сопоставить ей выбранное им имя третьего уровня. В таком случае можно будет использовать все возможности платного хостинга (надежность, поддержку CGI-сценариев) за меньшие деньги. Разумеется, есть и недостатки — у всех web-мастеров будет один логин и пароль на доступ к аккаунту, что снижает защищенность сайта от взлома путем похищения пароля, а совокупное место, предоставляемое хостером согласно выбранному тарифному плану, придется делить на несколько частей согласно внесенной каждым доле.

Некоторые российские поисковые системы и каталоги

http://www.yandex.ru

http://www.aport.ru

http://www.list.ru

http://www.rambler.ru

http://www.ru

http://www.weblist.ru

http://www.logoslovo.ru

http://www.webgid.ru

http://www.susanin.net

http://www.catalog.chat.ru

http://www.kot.ru

http://www.up.ru

http://www.ulitka.ru

http://www.look.ru

http://www.stars.ru

http://www.hi.ru

Некоторые зарубежные поисковые системы и каталоги

http://www.googlie.com

http://www.altavista.com,

http://www.yahoo.com,

http://www.lycos.com,

http://www.infoseek.com,

http://www.excite.com,

http://www.hotbot.com,

http://www.euroseek.net

Если же платный хостинг неприемлем или не требуется по каким-либо другим соображениям, то наилучшим выбором будет размещение сайта у провайдера с возможностью бесплатного доступа к нему. Если же места под сайт в таком случае оказывается недостаточно, то стоит задуматься о службах бесплатного хостинга. Наилучшим по качеству работы на сегодняшний день является, по мнению автора, сервер www.netman.ru, однако стоит обратить внимание и на другие службы. Например, привлекает «вечность» аккаунта на сервере www.chat.ru, — даже если вы надолго уедете в командировку или потеряете возможность доступа в Интернет, ваш сайт будет продолжать радовать посетителей. Так что возможностей много — используйте ту, которая вам нужна.

Реклама мини-сайта: немного рекомендаций

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

Стоит сразу оговориться, что, поскольку Интернет — весьма быстро развивающаяся и меняющаяся структура, то к тому моменту, когда вы будете читать эти строки, многое может изменится, и информация главы станет не совсем актуальной. Однако общие принципы останутся прежними — скорее всего, поменяются только адреса серверов.

Для начала снова и снова стоит повторить старую, но, увы, столь часто игнорируемую истину: самая лучшая реклама сайта — его интересное содержание. Сайт, на котором помещена "пара фоток и ссылок" или «крутой» текст о том, как «классно» автор сайта кликает по кнопкам в FrontPage, будучи даже «раскрученным» согласно всем рецептам, ничего, кроме отвращения к его автору, у населения Сети не вызовет. Поэтому перед тем, как решиться на раскрутку сайта, задайте себе вопрос — а вам приятно было бы зайти на такой же сайт, если бы его создал другой человек, а не вы? И если нет — сделайте выводы.

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

Регистрация сайта в поисковых системах

Средства поиска информации в Интернете можно разделить на две большие группы: это каталоги и поисковые машины. Каталог является структурированным набором ссылок на различные сайты: все ссылки разнесены по соответствующим категориям. Непример, ссылки на сайты с бесплатными программами помещены в категорию "Компьютерные технологии", а ссылка на сайт с информацией о воспитании детей — в категорию «Семья». Обычно вместе с ссылкой приводится еще и краткое описание ресурса. Пользователь, желающий найти какую-нибудь информацию по интересующей его теме, должен перейти в категорию, название которой, возможно, наилучшим образом совпадает с необходимой темой, просмотреть список приведенных там ссылок и выбрать нужную. Каталоги составляются теми, кто их организовал, — создатели каталога изучают Сеть, выбирают наиболее, по их мнению, интересные ресурсы, снабжают их описаниями и помещают в подходящую категорию. Желающие обычно могут добавить в каталог и свою ссылку с помощью специальной формы или письма авторам.

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

Поисковые машины действуют по несколько другому принципу. Они как бы «сканируют» Сеть, составляя базу данных из встреченных по пути слов. Название «машина» условное — она представляет собой попросту программу, запущенную на каком-либо компьютере. (Поскольку «сканирование» Сети и поддержание базы данных по словам требует очень высоких вычислительных ресурсов, то обычно для работы такой программы выделяется отдельный компьютер или даже несколько, — например, www.yandex.ru располагается на четырех компьютерах, работающих как одно целое под управлением специального программного обеспечения.) К примеру, такой поисковой программе дается адрес какой-либо web-страницы. Программа загружает страницу, вносит в свою базу данных все (или часть — например, первые двести) слова, встречающиеся на ней и помечает в базе данных, что эти слова встречаются на web-странице по такому-то адресу. Затем программа просматривает страницу на предмет наличия на ней гиперссылок на другие страницы и загружает уже их, и цикл повторяется. Если ссылки со страницы ведут за пределы данного сайта, то поисковая программа исследует и те сайты, на которые ее приведут эти ссылки. Адрес каждой просмотренно странички вносится в базу данных, и поисковая программа впоследствии неоднократно возвращается к ним (например, раз в четырнадцать дней), чтобы отследить возможные изменения. Если страничка перестает существовать, то ее адрес убирается из базы данных.

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

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

Перед регистрацией рекомендуется сделать небольшой текстовый файл, в котором поместить:

· название сайта,

· его URL,

· ваш адрес электронной почты,

· ваше имя,

· описание сайта длиной до 200 символов,

· Некоторые российские серверы бесплатных программ

http://www.freeware.ru

http://www.listsoft.ru

http://www.freesoft.ru

http://www.download.ru

http://www.softarea.ru

http://www.softpile.com

http://www.chasik.com

http://files.com.ua

описание сайта длиной до 500 символов,

· описание сайта с произвольной длиной,

· набор ключевых слов через пробелы длиной до 200 символов,

· набор ключевых слов через запятые длиной до 200 символов.

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

Если часть сайта написана на английском языке, то стоит составить и его английское описание. Некоторые каталоги (например, www.ru) позволяют поместить у себя описание сайта как по-русски, так и по-английски. Кроме того, в этом случае можно зарегистрировать сайт и в иностранных поисковых системах.

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

Выше, во врезке приведен небольшой список наиболее популярных в русской части Интернета каталогов и поисковых машин. Он, безусловно, неполон — web-страниц с подобиями каталогов в Сети очень много. Но в большую часть таких каталогов добавить новую ссылку можно только с помощью письма ее автору. Скорее всего, он попросит об ответной услуге — ссылке с вашего сайта на его страницу, что делать стоит лишь в случае, если вам понравится его сайт. Да и цифры посещаемости большинства подобных каталогов невелики.

Следует избегать регистрации в каталогах, требующих в качестве обязательного условия размещение на регистрируемом сайте ссылки на каталог или счетчика. Вы ведь зарегистрируете свой сайт во многих каталогах, — представляете, сколько вам предстоит ставить ссылок? А ведь почти всегда тебуется не простая ссылка, а логотип, то есть рисунок, который иногда даже должен каждый раз загружаться с удаленного сервера. Если на странице будет больше пяти-шести таких картинок, то загружаться она будет крайне долго. А если какой-нибудь из серверов с картинками еще к тому же и работать не будет, то вместо картинки останется пустое место, что испортит дизайн страницы (рис. 21.1).

Рис. 21.1.Сколько здесь было картинок с ссылками на разные каталоги! Но вот незадача — недогрузились и испортили весь вид страницы.

Исключение из этого правила составляют лишь счетчики посещений — весьма полезные дополнения для сайта. На настоящее время в Сети есть немало сайтов — "серверов статистики", предоставляющих счетчики. Например, www.top.list.ru, www.hotlog.ru, www.logoslovo.ru и др. При регистрации на таком сайте вы должны указать адрес своего сайта и его краткое описание, а взамен вам предоставят фрагмент HTML-кода, который необходимо разместить на своем сайте. Код представляет из себя набор JavaScripts, которые отправляют на сервер статистики информацию о посетителе (модель и характеристики браузера, разрешение монитора, страницу, с которой посетитель пришел на сайт и некоторые другие параметры), а также отображают сам счетчик с указанием количества посетителей. Впрочем, встречаются системы счета статистики, не требующие размещения на сайте видимого счетчика, — например, www.hotlog.ru.

Серверы статистики, особенно www.hotlog.ru, предоставляют весьма подробные отчеты о посещаемости сайтов, на которых стоят их счетчики. Так, из этих отчетов вы сможете узнать, с каких сайтов к вам чаще всего приходят посетители, какие слова, введенные в поисковые сервера, чаще всего приводят посетителя к вам на сайт, какие у ваших посетителей браузеры, операционные системы. Доступна даже информация о географическом местоположении посетителей. Эти данные могут серьезно помочь при разработке плана рекламы сайта. На серверах статистики имеются богатые возможности по настройке параметров счетчиков.

Многие системы, предоставляющие счетчики, одновременно являются также и каталогами (например, www.logoslovo.ru, тот же www.hotlog.ru). Весьма неплохо устанавливать на сайт лишь такие счетчики посещений, которые предоставляются каталогами — чтобы и посетителей считать, и в каталоге присутствовать. Поэтому после создания сайта посетите какой-нибудь сервер статистики и создайте там себе счетчик. Во всяком случае, всегда будете знать, скольким людям вы хотя бы попытались помочь достать нужную информацию.

Обмен ссылками

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

Очень хорошие результаты может дать обмен ссылками с сайтами, посвященными той же тематике, что и у вас, — так вы не только получите приток посетителей на свой сайт, но еще и, может быть, приобретете новых единомышленников и друзей!

Рекламная кампания

Наверняка во время путешествий по Интернету на многих сайтах вы видели полосу с изображением, рекламирующим какой-либо ресурс Интернета, обычно анимированным и располагающуюся вверху или внизу web-страницы, причем при нажатии на изображение можно было попасть на рекламируемый сайт. Это так называемый баннер, один из основных способов рекламы сайтов в Сети (рис. 21.2).

Рис. 21.2. Баннеры

Баннером[56] называется рисунок в формате Gif или Jpeg, рекламирующий какой-либо ресурс Интернета и имеющий определенный размер. При размещении на web-странице баннер является ссылкой, ведущей на рекламируемый ресурс, то есть пользователь компьютера, нажавший на баннер, перейдет на тот сайт Интернета, который рекламируется этим баннером.

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

Баннерная сеть устроена так. В Интернете с помощью специального программного обеспечения создается особый ресурс. На нем организуется база данных, содержащая адреса сайтов-участников и их баннеры — обычно картинки в формате Gif или Jpeg, или Flash-ролики, удовлетворяющие определенным критериям. На каждом сайте — участнике баннерной сети в страницы сайта его web-мастером устанавливается специально разработанный код, при своей загрузке сообщающий в центр баннерной сети адрес этого сайта и отображающий на странице сайта из базы данных сети выбранный произвольно или с учетом определенных критериев баннер.

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

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

Обычно комиссия составляет от пятидесяти до десяти процентов, то есть на каждые десять показов на сайте чужих баннеров баннерная сеть обязуется показать баннер этого сайта на других сайтах, например, девять раз при комиссии в десять процентов. В результате у баннерной сети образуется некоторый излишек показов баннеров (каждый сайт — участник баннерной сети как бы «отдает» ее создателям некоторое количество показов чужих баннеров на своих страницах). Возможность показов баннеров в пределах этого излишка баннерной сетью продается желающим: то есть баннеры сайта, не участвующего в баннерной сети и не показывающего на своих страницах баннеры других ее участников (или показывающего в слишком малом количестве), могут быть показаны на сайтах — участниках сети за определенную плату. За счет этого баннерная сеть живет и, возможно, приносит доход своим создателям.

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

На настоящее время в русской части Интернета наиболее большими являются баннерные сети InterReklama Advertising (http://www.ir.ru) и Russian Link Exchange (http://www.linkexchange.ru). Эти сети предоставляют большой выбор дополнительных услуг. Например, можно показывать чужие баннеры на одном сайте, а рекламировать своим баннером другой. Имеются богатые возможности по указанию сайтов, на которых должен показываться баннер — можно, например, дать баннерной сети указание показывать тот или иной баннер лишь на сайтах, посвященных определенной тематике или только пользователям из Москвы, — такие настройки называются таргетингом.

Таргетинг — это адресация баннера, обращающегося в баннерной сети, на определенные сайты или определенным посетителям. При регистрации в баннерной сети внимательно изучите возможности таргетинга и постарайтесь максимально их использовать. В самом деле, если ваш сайт посвящен оружию, то зачем рекламировать его на сайтах, посвященных кройке и шитью, и наоборот? И если ваш сайт целиком и полностью на русском языке, то какой смысл показывать его баннер на компьютерах, где нет поддержки русского языка (а это тоже может определить баннерная сеть)? Грамотное использование таргетинга может серьезно увеличить процент отклика на баннеры.

Компьютер баннерной сети определяет по IP-адресу пользователя, загружающего страницу с баннером, его местоположение, и выдает ему баннер в соответствии с условиями таргетинга баннеров. Узнать физическое местоположение пользователя нетрудно — если, к примеру, IP-адрес пользователя (абсолютно условно) — 123.124.125.126, а согласно базе данных по провайдерам России, вложенной в компьютер баннерной сети, этот адрес принадлежит московскому провайдеру NewTech, то пользователь с таким IP-адресом, скорее всего, в Москве и находится. Таргетинг позволяет адресовать свою рекламу наиболее вероятным ее потребителям — ясно, что рекламой фармацевтического сайта с наибольшей вероятностью заинтересуются посетители медицинских сайтов, а вот посетителям сайтов с новым программным обеспечением она вряд ли будет нужна.

Кроме того, практически все банерные сети позволяют «накапливать» показы баннеров — можно показать на своем сайте чужие баннеры, например, тысячу раз в течение месяца, запретив показы в сети своих баннеров, а затем, устроив большое обновление своего сайта, дать команду баннерной системе показать все девятьсот «накопленных» баннеров (при комиссии в десять процентов) в один день. Таким образом можно приурочивать рекламные кампании и приход новых посетителей к тем или иным событиям на сайте.

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

У всех баннерных систем есть "защита о накруток" — при попытке сделать программу, которая будет загружать страницу своего сайта с баннером несколько тысяч раз в сутки баннерная система выявит эту ситуацию (попросту определив IP-адрес компьютера, с которого проводилась массовая загрузка страницы с баннером) и в лучшем случае не засчитает эти показы, а в худшем — исключит сайт из баннерной системы.

Также практически все баннерные системы не принимают баннеров с порнографическими рисунками или ненормативной лексикой.

В Сети есть система «Баннербанк», предназначенная специально для создания баннерных сетей. Любой пользователь может создать в ней свою баннерную сеть без каких-либо серьезных затрат. В настоящее время на базе «Баннербанка» работает множество подобных сетей, организованных частными пользователями, — к примеру, Баннерообмен научных ресурсов (http://www.srbe.net). Обычно такие сети объединяют сайты одной тематики, что очень выгодно в плане рекламы.

Располагается «Баннербанк» по адресу http://go.bb.ru. Интерфейс сервера отличается удобством и многофункциональностью.

Существует определенный стандарт размеров баннеров. У каждой сети в принципе может быть свой стандарт, но чаще всего используются общепринятые международные правила. Так, обычно баннер должен иметь размер 468*60 пикселов. Используется также стандарт 100*100 пикселов и другие форматы, например, 234*60 и.т.д. Иногда баннерные сети используют сложные баннеры, представляющие собой форму с выпадающими меню, кнопками выбора и т. д.

Использовать возможность систем обмена баннерами, конечно, привлекательно, но перед тем, как это делать, стоит все же подумать. Помните, что не только ваш баннер будет показываться на сайтах Интернета, но и вам на своем сайте придется терпеть чужие баннеры. Не помешает ли это его дизайну и восприятию? Системы обмена баннерами хорошо использовать тогда, когда сайт уже в какой-то степени «раскручен» и посещаем, особенно если сами эти баннеры рекламируют другой сайт, не тот, на котором показываются баннеры системы обмена. Так можно «раскрутить» малоизвестный сайт за счет более известного.

Соотношение между количеством кликов на баннере и количество его показов называется кликабельностью баннера. Обычно это соотношение не превышает десятых долей процента и сильно зависит от вида баннера. Считается, что наилучшую кликабельность дает квадратный баннер размером 100*100 с приказывающей направленной надписью (типа "Ты студент? Жми сюда"), расположенный справа внизу страницы. Также весьма кликабелен баннер 468*60, находящийся на расстоянии 1/3 от верхней границы экрана.

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

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

Другие способы

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

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

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

Полезные советы

· В Microsoft Outlook Express имеется возможность во время получения почты узнать, каков совокупный обьем получаемых сообщений. Для этого нужно подвести курсор к наименованию процесса в окне «Задачи» и посмотреть всплывающую подсказку. Ну, а узнав обьем и количество пришедших сообщений, можно понять, стоит ли дальше продолжать их загружать или пришла пора лезть в ящик через web-интерфейс или протокол IMAP (смотря где ящик расположен), чтобы его почистить.

Для доступа к ящику по протоколу IMAP можно использовать специальные программы — например, Magic Mail Monitor (бесплатный, можно взять с адреса www.geocities.com/SiliconValley/Vista/2576), которые в соответствии с возможностями протокола позволяют просматривать заголовки сообщений, информацию об их отправителе и размере на почтовом сервере без загрузки самих сообщений, а также удалять ненужные письма прямо с сервера.

Глава 22. Приемы и секреты web-дизайна

В этой главе вы найдете небольшую подборку полезных советов и приемов web-дизайна, которые помогут сделать ваш сайт красивее и удобнее, а вашу работу — более продуктивной.

Отправка почты с сайта

На многих сайтах в Сети вы наверняка могли видеть поля ввода информации, которые предназначены для получения каких-либо данных от посетителей. Скажем, заполняет посетитель анкету, нажимает кнопку «Отправить», и вся введенная информация автоматически пересылается администратору данного сайта.

С помощью языка PHP такую форму ввода можно сделать за пару минут — об этом подробно рассказано в главе 19. Но что же тогда делать тем, чей сайт расположен на сервере бесплатного хостинга, на котором нет возможности работать с PHP? Только одно — использовать почтовую программу посетителя. Ведь она есть практически у всех, — электронная почта по-прежнему остается самым популярным сервисом Всемирной Сети.

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

Для того, чтобы поместить на web-страницу сервис отправки почты, необходимо вставить в нее форму ввода данных, реализуемую с помощью тэга <form>, указав его параметры, обеспечивающие формирование заголовков письма:

<FORM METHOD="post" ACTION="mailto: address@xxx.ru?subject=Тема" NAME="mainform" TARGET="content" ENCTYPE="text/plain">

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

Вот примерный текст формы, отправляющей на определенный адрес письмо, созданное из данных, введенных в форму.

<FORM action=mailto: pupkin@euro.ru?subject=Zakaz enctype=text/plain method=post name=mainform target=content>

<p><INPUT NAME=zakaz TYPE=checkbox checked value="Желаю сделать заказ" title="Отметьте здесь, если Вы желаете заказать книгу">Я желаю заказать книгу

<SELECT name=zhurn>

<OPTION value=buk selected>Букварь</OPTION>.

<OPTION value=kol>Колобок </OPTION>

<OPTION value=repa>Репка </OPTION>

</select></p>

<p><INPUT NAME=post TYPE=radio checked value="Доставка почтой"> Доставить почтой</p>

<p><INPUT NAME=podp TYPE=radio value="Доставка Союзпечатью"> Доставить по подписке Союзпечати</p>

<p>Контактная информация для связи с Вами:<TEXTAREA cols=40 name=contact wrap=virtual></TEXTAREA></p>

<p>Ваш адрес электронной почты: <INPUT NAME=email TYPE=text></p>

<p><INPUT TYPE=submit VALUE=Отправить></p></FORM>

На рис. 22.1 показано, как она выглядит на web-странице. Формирование письма произойдет, как только посетитель нажмет кнопку, имеющую тип «submit». Однако, к сожалению, данный процесс полноценно пройдет лишь в том случае, если в качестве используемой по умолчанию почтовой программы установлен Microsoft Outlook Express или Microsoft Outlook. Другие почтовые клиенты будут обрабатывать передаваемые им браузером данные, введенные в форму, не совсем корректно. Скажем, The Bat! не способен брать из формы что-либо, кроме адреса получателя и темы, — то есть само письмо, увы, отправлено не будет. Во избежание подобных ситуаций следует предупредить посетителя сайта в пояснительном тексте рядом с формой отправки о том, что ее следует использовать только при установленном в качестве почтового клиента по умолчанию Microsoft Outlook Express (или Microsoft Outlook), и указать рядом с формой ваш обычный адрес электронной почты для пользователей остальных почтовых клиентов.

Рис. 22.1. Так выглядит описанная в тексте форма для отправки писем

Автопереход

Для того, чтобы после загрузки web-страницы происходил автоматический переход на другую страницу, принято ставить в ее области <head> выражение <meta http-equiv="Refresh" content="число секунд до перенаправления; URL= адрес страницы, куда произойдет перенаправление, обязательно с http://">. Однако в том случае, если посетитель, находясь на той странице, куда его перенаправили, нажмет в своем браузере кнопку «Назад», то возникнет несколько некрасивая ситуация: он станет нажимать на эту кнопку, желая вернуться на ту страницу, где был ранее, попадать снова на страницу с перенаправлением, и тэг Refresh будет его опять отправлять на тот сайт, который указан в нем для перенаправления. Это может вызвать у посетителя отрицательные эмоции, так что для автоматического перенаправления лучше вставить в самое начало страницы, можно даже в раздел <head> небольшой сценарий:

<script language="javascript">

window.location.replace("адрес страницы, куда произойдет перенаправление, обязательно с http://");

</script>

Команда window.location.replace() загружает в браузер посетителя страницу с указанным адресом, но не помещает информацию о ней в «Историю» ваших путешествий в Web. Тем самым предотвращается случайное возвращение посетителя на страницу с перенаправлением.

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

Restricted Area — Защищенная зона

Если надо организовать на сайте группу web-страниц, доступ в которую будет возможен лишь при помощи пароля, то обычно данное задание реализуется с помощью сценариев на каком-нибудь CGI-языке: Perl, PHP. На серверах бесплатного хостинга использовать данные языки обычно запрещено, однако можно прибегнуть к нехитрому приему, основанному на JavaScript.

Придумайте пароль. Создайте страницу с именем, совпадающим с паролем (например, если пароль — hgty23jyhg, то страница должна иметь имя hgty23jyhg.htm), а на ту страницу, откуда производится переход в часть сайта, защищенную паролем, вставьте форму с полем ввода пароля, кнопкой типа button и небольшой скрипт:

<form name="forma1">Введите пароль:

<INPUT NAME="parol" TYPE=password>

<INPUT TYPE=button VALUE="Перейти в защищенную зону" onclick= (window.location.href=document.forma1.parol.value+".htm")>

</form>

При нажатии кнопки произойдет переход на страницу, имя которой было введено в поле ввода текста. Как такая форма выглядит — показано на рис. 22.3.

Рис. 22.3. Пароль на вход — без CGI.

Однако этот способ ограничения доступа возможен не на всех серверах, а только на тех, где запрещен так называемый "листинг директорий". Листинг директорий — это возможность просмотра содержимого папки на удаленном сервере при отсутствии в ней файла, загружаемого по умолчанию (или при неправильной конфигурации web-сервера даже при наличии такого файла). Вы наверняка во время путешествий по Интернету встречались с ситуацией, когда вместо запрошенной web-страницы высвечивается некое подобие Проводника Windows, а в верхней строчке — ссылка на "Parent Directory" (рис. 22.4)?

Рис. 22.4. Здесь листинг директорий разрешен…

Это означает, что на этом сервере листинг директорий разрешен, а запрошенной вами страницы не существует. Список файлов в окне браузера — это другие файлы в той же папке, в которой должна была бы быть запрошенная вами web-страница. Если же на сервере листинг директорий запрещен, то при попытке обратиться к несуществующей web-странице будет выдано сообщение об отсутствии на сервере такой страницы. Оно будет сгенерировано либо браузером, который получит соответствующее уведомление от сервера (рис. 22.5), либо самим сервером. В последнем случае обычно демонстрируется небольшая реклама этого сервера.

Рис. 22.5…а здесь запрещен.

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

Где можно применить такую структуру разграничения доступа? Да хотя бы в системе онлайнового обучения. При организации образовательных ресурсов с системой контроля знаний возникает проблема разграничения доступа к заданиям разной степени сложности, а также к ответам на них. Сделайте в этом случае так, чтобы паролем для перехода к следующему вопросу был правильный ответ на предыдущий. Или, скажем, ваш сайт посвящен вопросам медицины, но вы не хотите, чтобы некоторую информацию узнали неспециалисты. Например, технология лечения бронхиальной астмы в случае использования теми, кто не знает некоторых аспектов и тонкостей развития этого заболевания, способна привести к тяжелым осложнениям. Вследствие этого доступ к страницам, содержащим ее описание, желательно предоставлять лишь дипломированным врачам. Выясните посредством переписки по электронной почте степень компетентности желающего ознакомиться с содержимым «защищенной» части вашего сайта и отправьте ему пароль.

Если вы не хотите использовать один и тот же пароль для всех посетителей, то просто заведите на каждого желаемого посетителя по странице с уникальным именем-паролем. На каждую же из этих страниц поместите параметр refresh, как описано выше, перенаправляющим посетителя на заглавную страницу «защищенной» части. Для добавления нового посетителя «защищенной» части вам потребуется всего лишь поместить на свой сайт маленькую однотипную страницу с параметром refresh и именем, соответствующим паролю нового пользователя.

Безусловно, в последнем случае существует риск того, что кто-нибудь из не очень сознательных посетителей станет распространять адрес заглавной страницы «защищенной» части вашего сайта. Это, конечно, неприятная перспектива, но ее можно в значительной степени предотвратить, регулярно меняя имена страниц «защищенной» части и, соответственно, ссылки на них на страницах с именами-паролями.[57]

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

Программа Microsoft HTML Help Workshop дает возможность создавать файлы HTML-справки вроде тех, что лежат в основе справочной системы Microsoft Office 2000 или Microsoft Internet Explorer 4.0 и выше (они имеют расширение .chm). При этом в качестве основы для таких файлов берется совокупность связанных между собою web-страниц. Скажем, вы можете отконвертировать ваш сайт в chm-файл, и тогда он будет занимать меньше места и находиться в одном файле. В результате передать его другу или отослать по почте целиком станет легче.

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

В итоге вы, даже не умея программировать, легко сможете создать систему контроля знаний, набор загадок и ответов, базу знаний с разграниченным доступом. Достаточно будет лишь оформить ваш проект как сайт и научиться работать с Microsoft HTML Help Workshop, что очень легко — у последней интерфейс интуитивно понятный. Воспользоваться вашим творением сможет любой владелец Microsoft Internet Explorer 4.0 или более поздней версии.

Microsoft HTML Help Workshop входит в состав пакета Microsoft Office 2000 Developer Edition, а кроме того, доступна на сайте www.microsoft.com.

Выпадающее меню

Если вы хотите на web-страницу поместить выпадающее меню для быстрой навигации по сайту, например, такое, как на рис. 22.6, где при выборе какого-либо пункта происходит автоматический переход на соответствующую страницу, то его можно сделать с помощью средств JavaScript.

Вот пример такого скрипта:

<form><select name="P1" size="1" onchange="top.location.href = this.options[this.selectedIndex].value; this.selectedIndex=0">

<option selected>Выберите раздел сайта для перехода:</option>

<option value="page1.htm">Страница 1</option>

<option value="page2.htm">Страница 2</option>

…

</select></form>

Рис. 22.6. Выпадающее меню — удобный способ ориентации на сайте.

А для того, чтобы при выборе того или иного пункта меню происходило открытие выбранной страницы в новом окне, первая строка сценария должна иметь вид

<form><select name="P2" size="1" onchange="window.open (this.options[this.selectedIndex].value); this.selectedIndex=0">

Событие onchange происходит при изменении значения меню — при выборе того или иного его пункта. Команда top.location.href="адрес" заставляет браузер перейти по указанному адресу, а команда window.open="адрес" открывает web-страницу по этому адресу в отдельном окне. «This» — это заменитель имени обьекта select. Свойство этого обьекта this.selectedIndex принимает значение порядкового номера выбранного пункта, а если ему задать значение 0, то выбранным станет самый первый пункт. Команда this.options[this.selectedIndex]. value принимает значение, указанное в свойстве value выбранного пункта.

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

Всплывающая подсказка

Это простой прием, но о нем, увы, знают не все web-мастера. Чтобы добавить к любому обьекту web-страницы всплывающую подсказку, как, скажем, на рис. 22.7, добавьте в его тэг параметр title="Подсказка". К примеру, для тэга <a href=""> это будет выглядеть как <a href="http://www.duel.ru" title="Интересная газета">.

Добавлять всплывающие подсказки можно практически к любым тэгам web-страницы. И к тэгу <p>, и <table>, и <img…>. Если вам надо добавить подсказку к тэгу, который не допускает такого (скажем, кнопка формы), то просто окружите этот обьект тэгами <div>…</div> и укажите параметр title именно в нем: <div title="Подсказка">…</div>. Таким образом вы сможете всю web-страницу снабдить всплывающими подсказками и поместить в них различную полезную для посетителей информацию.

Рис. 22.7.Добавить к гиперссылке всплывающую подсказку просто, а для посетителя — удобно.

Динамическая карта сайта

Представим себе, что нам надо разработать сайт, содержащий научные статьи по различным областям, скажем, медицины. Статей немного — всего десять-пятнадцать штук, но необходимо обеспечить удобство посетителя при работе с сайтом, и, поскольку статьи большие, дать каждой краткое описание ее содержания — реферат, поскольку загружать все статьи посетителю вряд ли потребуется. Возникает вопрос — а как разместить на сайте эти рефераты и список статей? На одной заглавной странице? Но тогда она получится очень большая, и ее придется прокручивать, что, во-первых, потребует от посетителя лишних движений мышью или нажатий на клавиши, а, во-вторых, приведет к трудности восприятия всего обьема информации на странице. Разместить каждый реферат на своей странице (или даже на специальной странице с рефератами)? Но тогда для перехода на страницу с рефератом посетителю придется нажимать мышью ссылку, что, во-первых, требует лишних действий, а, во-вторых, и это главное, уводит посетителя с главной страницы, а он может затем туда и не вернуться и не посмотреть остальные разделы сайта. Как же быть? Как обеспечить удобство работы с насыщенной информацией главной страницей?

Очень хорошим способом было бы размещение всей информации (например, краткого содержания остальных страниц сайта) на его первой странице так, чтобы она была доступна вся сразу, но без прокрутки. Например, так, как сделано на странице http://antorlov.euro.ru/resurses.htm (рис. 22.8).

Рис. 22.8. Чтобы прочитать реферат статьи, не надо даже ни на что нажимать. Достаточно просто подвести курсор к ее названию.

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

В результате посетителю, пришедшему на эту страничку, достаточно «пробежать» курсором по списку и, даже не переводя глаза, прочитать все рефераты, чтобы получить полное представление о содержании сайта. Удобно? Да, действительно. Одно движение руки и чтение текста на одном и том же месте — и вся информация сайта вам известна.

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

Как же это реализовать? Использовать возможности VBScript и Dynamic HTML. Скачайте страничку с вышеуказанного адреса и посмотрите, как она устроена. Графики там мало (только фон, портрет и кнопки навигации), так что ее дизайн без графики заметно не изменится.

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

Вначале — краткое пояснение. Тэг <div> выделяет из основного текста страницы какой-либо фрагмент, которому с помощью этого тэга можно задать какие-либо свойства, назначить скрипт для выполнения. «Onmouseover» — это команда Dynamic HTML, означающая, что другая команда, заключенная в круглые скобки после нее, будет выполняться при наведении курсора мыши на тот обьект, в тэге описания которого команда «Onmouseover» присутствует. Параметр "rowspan=NN" означает слияние между собой ячеек таблицы, расположенных в одной колонке, на протяжении NN строк таблицы. «Id» — это уникальное имя какого-либо обьекта, позволяющее управлять свойствами этого обьекта с помощью скриптов. Обьяснение назначения каждой строки кода — под ней.

<html><head><title></title></head><body>

Заголовок страницы.

<div onmouseover=(document.all.txt0.innerHTML= =document.all.privet.innerHTML)>

Верхняя часть страницы. При наведении курсора на нее текст в правой части таблицы меняется на приветствие.

</div><table width="100 %">

Начало самой таблицы

<tr><td>&nbsp;</td>

Первая колонка, соответствующая названиям статей

<td rowspan=NN>

Создание места для отображения рефератов путем слияния ячеек между собой. Число NN должно быть равно количеству статей плюс один.

<div id=txt0>

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

</div>

<div style="display: none" id=privet>Приветствие</div>

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

<SCRIPT FOR=window EVENT=onload LANGUAGE="JScript">

document.all.txt0.innerHTML=document.all.privet.innerHTML;

</SCRIPT>

Этот скрипт исполняется сразу после окончания загрузки страницы и автоматически замещает изначальный текст тэга <div id=txt0> на приветствие, без каких-либо движений курсора.

<div style="display: none">

<div id=txt1>Реферат 1</div>

…

Основное «хранилище» текстов рефератов. Каждая строка типа <div id=txtNN>Реферат NN</div> содержит текст одного реферата. Поскольку перед этой группой строк стоит тэг <div style="display: none">, то посетителю содержимое этих строк не видно — они служат лишь "источником текстов": тексты рефератов берутся отсюда по мере необходимости.

</div></td><td>&nbsp;</td></tr>

Правая часть первой строки таблицы. Содержит описание еще одной колонки — для того, чтобы можно было разместить в правой колонке ссылки на online-варианты статей.

<tr onmouseover=(document.all.txt0.innerHTML= =document.all.txt1.innerHTML)>

<td><a href="file1.zip">Статья 1 — загрузить</a></td>

<td><a href="stat1.htm">Прочитать</a></td></tr>

…

Основной блок сценария. Каждый такой фрагмент описывает одну строку таблицы, строка содержит название статьи, ссылку на ее архив, ссылку на online-вариант статьи, а также команду Dynamic HTML, выпол няющуюся при наведении курсора на строку и заменяющую содержимое видимого тэга <div id=txt0> содержимым соответствующего невидимого тэга <div id=txtNN>Реферат NN</div>.

Таких фрагментов должно стоять друг за другом столько, сколько рефератов и статей представлено на странице. Естественно, в каждом следующем фрагменте ссылки и параметр onmouseover должны быть другими, — document.all.txt0.innerHTML=document.all.txt2.innerHTML и т. д.

</table>

Конец таблицы

<INPUT TYPE=button id=btn1 value="Прочитать все описания">

Кнопка, запускающая скрипт, помещенный ниже. Он выводит содержимое всех тэгов <div id=txtNN>Реферат NN</div> в отдельное окно — чтобы те, что привык читать длинные страницы со списками ресурсов сайта, могли бы прочесть все рефераты в привычной обстановке.

<SCRIPT ID=clientEventHandlersVBS LANGUAGE=vbscript>

Заголовок скрипта. В нем указывается язык скрипта — VBScript.

Sub btn1_onClick()

Означает, что скрипт выполняется при клике на кнопку btn1.

Set nwnd=window.open

Эта команда открывает новое окно браузера и подготавливает его для вывода в него данных.

er="URL сайта"

Адрес сайта, на котором расположены архивы статей (с знаком "/" в конце). Подставляется в адреса для скачивания файлов в тексте открытого нового окна — чтобы можно было сохранить этот текст на жестком диске и впоследствии загрузить файлы.

nwnd.document.writeln ("<html><title>Статьи</title> <body><p>Список</p>")

Запись заголовка новой страницы.

nwnd.document.writeln (txtNN.innerHTML+"</p>&nbsp;<a href="+er+"fileNN.zip> Скачать </a>")…

Собственно выведение текстов рефератов в новое окно. Таких строчек должно быть столько же, сколько и рефератов. В каждой строчке должно быть указано соответствующее значение txtNN и fileNN — для каждого реферата.

nwnd.document.writeln ("<p>Эти статьи доступны на <a href="+er+">сайте</a></p></body></html>")

Запись конца страницы.

End Sub

</SCRIPT>

Конец скрипта.

<div onmouseover=(document.all.txt0.innerHTML= =document.all.privet.innerHTML)>

Нижняя часть страницы. При наведении курсора на нее текст в правой части таблицы меняется на приветствие.

</div></body></html>

Конец страницы.

Этот текст является основой, «костяком» страницы. При разработке сайта на эту основу можно добавлять графику, текст, другие скрипты. Так, поскольку Netscape Navigator и остальные браузеры не поддерживают многие возможности Dynamic HTML, то для них не стоило бы скрывать текст рефератов — они ведь тогда не смогут его отобразить! Выход — в небольшом скрипте:

<SCRIPT language="JavaScript">

if (navigator.appName == "Microsoft Internet Explorer")

{

document.write ("<div style=\"DISPLAY\: none\">");

}

</SCRIPT>

Этот скрипт нужно расположить на месте тэга "<div style="display: none">" перед текстами рефератов, и тогда они будут скрыты от посетителя тогда и только тогда, когда посетитель использует браузер Microsoft Internet Explorer, поддерживающий Dynamic HTML в полном обьеме. Однако, поскольку в настоящее время браузер Netscape Navigator и другие используется где-то в 5-10 % случаев (данные по счетчику Hotlog на весну 2002 г., рис. 22.9), то лучше использовать только реализацию для Microsoft Internet Explorer, а для Netscape Navigator, Opera и других браузеров сделать отдельную страницу с автоматическим переходом на нее, вставив для этого в самое начало страницы следующий скрипт:

<SCRIPT LANGUAGE="JAVASCRIPT">

if (navigator.appName!= "Microsoft Internet Explorer")

{

window.location.replace("Страница_для_NN.htm");

}

</SCRIPT>

Для Netscape Navigator можно использовать традиционную структуру страницы без использования вышеописанных возможностей.

Рис. 22.9. Статистика использования браузеров

Затемняющиеся иконки

Один из основных законов так называемого «usability» — принципов создания удобных вещей, в данном случае web-сайтов, гласит, что интерфейс обьекта, с которым работает пользователь, должен быть ему знакомым. То есть, в данном случае, — зайдя на web-страницу, посетитель не должен гадать и думать, для чего предназначен тот или иной ее элемент. Достигнуть этого можно с помощью похожести интерфейса web-страницы на какой-нибудь другой, привычный пользователю. Например, интерфейс операционной системы.

Наверняка все, работающие с Windows 98 и более старшими версиями этой операционной системы, помнят о возможности настроить вид папок так, что при наведении курсора иконка файла будет затеняться, а при нажатии в этот момент левой кнопки мыши файл откроется. Так почему бы не реализовать такой же эффект на web-странице, содержащей файловый архив? Скажем, поставить в качестве ссылок такие же иконки этих файлов, как и соответствующие их формату в интерфейсе операционной системы (например, для архива формата Zip — изображение сжатых струбциной ящиков от стола,). Тогда посетитель, зайдя на страницу, сразу увидит знакомые значки и ему будет проще ориентироваться на ней — то, что предназначено для загрузки с сайта, будет видно сразу.

Однако просто использовать в качестве ссылок иконки архивов — это весьма банально и неинтересно. А что, если сделать их такими же затемняющимися, как и в Windows? Представьте себе — навел посетитель курсор мыши на значок, а он стал темным, увел — он стал обычным. Но как это реализовать?

Можно, разумеется, использовать традиционный метод — использовать два варианта значка (обычный и затемненный) и с помощью небольшого скрипта организовать их замену друг на друга при наведении и уходе курсора мыши. Однако такое устройство страницы приведет к тому, что на страницу придется поместить еще и сценарий для предварительной загрузки картинок (иначе соответствующие варианты значков будут загружаться лишь при наведении мыши, то есть — не сразу). Кроме того, при сохранении web-страницы на локальном диске посетителя иконки, загружаемые в сценариях, не копируются на винчестер, и в итоге во время работы пользователя с сохраненной страницей при наведении курсора мыши иконки будут заменяться на белые «дырки», что, ясно, не есть хорошо.

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

В начало страницы, в раздел "<head>" следует добавить скрипт:

<script language="JavaScript1.2">

Далее следует стандартный синтаксис сценария на Javascript. Для экономии места используется одна функция, которой сообщается имя графического обьекта на web-странице, на котором используется затемнение, и требуемое действие — либо применение этого затемнения, либо его отмена.

function g(c,w)

{

if (w==0)

Если нужно «затемнить» картинку:

{

c. style.filter="light";

…применяем фильтр "light", который окрашивает картинку в определенный цвет…

if (c.filters.light)

{

c. filters.light.addAmbient(130,130,210,120)

}

…и задаем в качестве затемняющего цвета — темно-синий оттенок. Эта команда используется лишь в том случае, когда браузер может работать с фильтрами — именно поэтому она помещена после оператора if, проверяющего, существует ли для браузера фильтр light.

}

else

c. style.filter=0

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

}

</script>

В тэг каждой картинки, для которой требуется реализация эффекта «затемнения», следует вставить команды "onMouseover="g(this,0)" onMouseout="g(this,1)":

<IMG src="z.gif" border=0 height=30 width=30 onMouseover="g(this,0)" onMouseout="g(this,1)">

В результате при наведении курсора мыши на картинку она будет затемняться — как на рисунке выше.

К сожалению, данный прием работает только в браузере Microsoft Internet Explorer версии 5.0 и старше. Пользователи же остальных браузеров увидят простую непереливающуюся картинку и ничего больше.

Примеры сценария и иконки архивов вы можете взять с адресов http://antorlov.chat.ru, http://karamurza.chat.ru, http://skywars.chat.ru, http://ambarsum.chat.ru.

PowerPoint 2000/XP: готовый сайт — за пять минут

PowerPoint — это программа для создания презентаций: наборов изображений, содержащих графику и текст и предназначенных для удобного предоставления информации. Презентации часто используются при чтении лекций, проведении семинаров, заменяя столь распространенную ранее демонстрацию диапозитивов. PowerPoint входила еще в ранние версии Microsoft Office. В PowerPoint 97 появилась возможность сохранения презентации в формате HTML, а в PowerPoint 2000 и PowerPoint XP эта возможность была значительно усовершенствована.

Хорошо сделанная презентация, сохраненная в формате HTML из PowerPoint2000, фактически представляет собой полноценный сайт со сложной структурой. Посмотрите, к примеру, внешний вид такого сайта на рис. 22.10. Для просмотра HTML-презентации не нужны самые современнные модели браузеров: достаточно использовать Microsoft Internet Explorer версии не ниже 4.0.

Рис. 22.10. Готовый сайт — из PowerPoint

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

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

Когда возможности PowerPoint по сохранению презентации как набора web-страниц могут пригодиться? Да тогда, когда, например, у вас уже есть готовая презентация, и вы хотите ее поместить в Сеть. Также с помощью PowerPoint можно быстро создать сложный сайт с множеством графики. PowerPoint (версии 2000 или XP) выручит вас тогда, когда думать о самостоятельной разработке сайта нет времени, а создать представительство в Интернете надо. Например, перед научной конференцией.

Только не переусердствуйте. Как только будет время — переделайте все созданное.

Word как web-редактор

Количество Web-редакторов, созданных к настоящему времени разными компаниями и даже отдельными людьми, весьма большое. На все вкусы: и чисто текстовые, и визуальные, и даже поддерживающие стандарт WYSIWYG, хотя и не всегда полноценно. Но каждый из этих редакторов надо где-то доставать, загружать из Сети или покупать, устанавливать, осваивать, — в общем, дел предостаточно. Даже встроенный в Office 2000 и Office XP web-редактор Script Editor нужно установить и освоить.

Однако для того, чтобы быстро создать HTML-документ, не нужно специальных редакторов. Уже в Microsoft Word 97 есть встроенный конвертор, позволяющий сохранить документ в формате HTML. При этом будет сохранено большинство параметров форматирования текста. Word 2000 и Word XP сохраняют в HTML-документе абсолютно все такие параметры, используя язык XML — несколько более «продвинутую» версию HTML, поддерживаемую современными версиями браузеров. В Office 97 HTML-конвертор по умолчанию не устанавливается, так что при инсталляции пакета приходится указывать соответствующую опцию. В Word 2000 и Word XP HTML-формат сделан одним из основных, и эти редакторы можно настроить так, что все документы будут сохраняться только в формате HTML, причем без каких-либо потерь в оформлении.

Вызвать конвертор HTML из Word 97 можно, выбрав из меню «Файл» команду "Сохранить в формате HTML" (будет там, лишь если конвертор установлен), а в Word 2000/XP — вызвав оттуда же команду "Сохранить как web-страницу".

Вот, к примеру, на рис. 22.11 слева показан код, создаваемый HTML-конвертором из Word 97, а на рис. 22.11 справа — конвертором из Word 2000.

Рис. 22.11. Слева — код документа HTML, созданного в Word 97. Справа — код документа HTML, созданного в Word 2000.

Посмотрев на результаты работы HTML-конверторов различных версий Office, можно сделать определенные выводы.

Во-первых, и тот, и другой конверторы создают весьма нерациональный код для размещения в Web. HTML-конвертор из Word 97 просто «закидывает» документ лишними тэгами <font>. А HTML-конверторы Word 2000 и Word XP используют громоздкий язык XML, поэтому даже просто производить ручное редактирование кода, созданного этими версиями Word, крайне сложно.

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

В-третьих, они создают полноценные web-страницы, если посредством этих конверторов сохранять документы с внедренными рисунками, — полноценные в том плане, что все эти рисунки окажутся сохраненными в той же папке, что и HTML-документ.

В-пятых, конверторы из Word 2000 и Word XP сохраняют в HTML-документе абсолютно все форматирование, даже надписи, автофигуры и расстояние между абзацами, в то время как Word 97 может проигнорировать немало информации. И даже если некоторые элементы оформления, сохраненные HTML-конверторами Word 2000 и Word XP, будут неправильно отображаться в браузере, то при повторном открытии документа в Word документ станет выглядеть абсолютно так же, как и перед его закрытием.

В-четвертых, ни Javascripts, ни VBScripts в web-страницу посредством Word так просто не вставить.

HTML-конверторы редактора Word могут сослужить неплохую службу тому, кто желает быстро разместить в Интернете результаты своих трудов, но при этом не знает языков разметки web-документов и не имеет времени на знакомство с ними. Тем более что в этом случае для создания web-страницы не нужно осваивать абсолютно никаких дополнительных программ — достаточно знать основные приемы работы в Word. Впрочем, это вполне очевидное применение таких конверторов.

Но и тем, кто знаком с web-дизайном, профессионально строит сайты, не стоит говорить, что HTML-конвертор Word — "редактор для ламеров", для тех, кто ничего не понимает в компьютерах, и на этом основании никогда его не использовать. Конвертор может очень серьезно облегчить решение многих задач при создании сайтов. Но так как же профессионалы в web-дизайне могут использовать HTML-конвертор Word? Начнем с конвертора из Word 97.

Во-первых, этот конвертор — идеальное средство для быстрой и удобной конвертации большого обьема текста в формат HTML. При создании электронной библиотеки или размещении в Сети больших материалов он будет незаменим. Даже если исходно информация подготавливалась в каком-либо другом редакторе, то для помещения текста в Web достаточно сохранить его в формате Rtf, а потом открыть полученный файл в Word и конвертировать в HTML.

Все таблицы, содержавшиеся в исходном документе, тоже будут отконвертированы в HTML-код.

Однако, к сожалению, код web-страницы, полученный в результате такой конвертации, придется дорабатывать. Для этого его нужно будет открыть в любом текстовом редакторе, поддерживающем функцию замены (весьма хорошим выбором будет Microsoft Word 6.0, поставленный поверх Word 97 в другой каталог, однако можно использовать и режим Вид-Источник HTML в самом Word 97) и удалить все тэги <font… >, </font>, &#9; (символ табуляции), все лишние ссылки и строчки, а затем немного подредактировать (добавив вручную пару-тройку гиперссылок в начало, в конец текста, установив желаемый шрифт и параметры фона). Если для редактирования полученного web-документа использовать Microsoft Word 6.0 или Microsoft Word 97 в режиме просмотра источника HTML, то имеет смысл все операции замены записать в макрокоманду.

Если имеется желание оформить документ так же, как и текст на листе бумаги (то есть без расстояния между абзацами и с отступами красных строк), то стоит заменить все границы однотипных по выравниванию абзацев конструкциями типа <br>&nbsp;&nbsp;&nbsp;, а также добавить символы &nbsp;&nbsp;&nbsp; (попросту пробелы) в начало каждого абзаца, за исключением центрированных заголовков.

Вторая очень полезная функция HTML-конвертора Word 97 — это «вытаскивание» рисунков из документа Word. Вопрос о переводе рисунка, внедренного в Word, в формат Gif или Jpeg иногда встает очень остро. Простое копирование рисунка в MS Paint, Photo Editor, Adobe Photoshop через буфер обмена к хорошему результату не приведет — качество изображения будет очень плохим. Многие издательства вследствие этого не принимают к публикации файлы Word с внедренными рисунками, если у них используются для верстки другие программы. Однако «вытащить» рисунки из документа Word элементарно просто — нужно всего лишь сохранить его в формате HTML. При этом все внедренные графические обьекты окажутся сохраненными в формате Gif или Jpeg в той же папке, что и полученный web-документ.

HTML-конвертор Word 97 сохраняет изображения очень интеллектуально и хорошо. Он самостоятельно выбирает формат — Gif или Jpeg — для каждого рисунка, исходя из соотношения между размером и качеством будущего файла. Само сохранение происходит крайне корректно и экономно — если один и тот же bmp-файл отконвертировать в Jpeg-формат с помощью графического редактора, например, ACDSee, или вставить в документ Word, сохранить тот в формате HTML и сравнить размеры полученных файлы с рисунками (качество будет одинаковым), то разница может достигать даже полутора-двух раз в пользу HTML-конвертора Word. Таким образом, этот конвертор можно считать на настоящее время еще и наиболее эффективным средством для конвертации графических изображений в форматы Gif или Jpeg.

Диаграммы и формулы, подготовленные соответственно в Microsoft Graph и Microsoft Equation Editor, также конвертируются в файлы типа Gif или Jpeg. Чтобы вставить на web-страницу график или алгебраическое выражение, не надо осваивать сложные графические редакторы или возиться со сканером. К сожалению, автофигуры и обьекты WordArt HTML-конвертором Word 97 не обрабатываются и при сохранении документа игнорируются.[58]

Благодаря большому набору готовых обьектов очень удобно использовать средства рисования в Word для создания несложной графики для Web. Нарисуйте то, что вам надо, с помощью автофигур, сгруппируйте, вставьте на свое же место с помощью команды "Правка — Специальная вставка" как "Рисунок Wmf" и сохраняйте документ в HTML-формате. А конвертируя таким же образом обьекты WordArt (то есть с помощью "Специальной вставки"), можно безо всякого труда получить прекрасные заголовки для ваших web-страниц. В то время как создать красиво оформленный текст даже в Adobe Photoshop представляет собой задачу нетривиальную, в Word с помощью обьекта WordArt это делается за несколько секунд.

Итак — HTML-конвертор Word 97 полезно использовать любому web-мастеру в следующих случаях:

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

· При необходимости «вытащить» из документа Word рисунки и сохранить их в отдельных файлах формата Gif или Jpeg.

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

Фактически, используя только Microsoft Word 97, можно создать полноценную и красиво оформленную Web-страницу, при этом добившись эффектов, которые доступны не каждому графическому редактору. Нужно только не останавливаться на простом сохранении текста в HTML-формате, а немного еще поработать с самим HTML-кодом.

Конвертор HTML из Word 2000 резко отличается от своего предшественника. Прежде всего — HTML стал в Word 2000 одним из стандартных форматов. Можно установить HTML как формат сохраняемых документов по умолчанию. В этом случае надежность сохраняемых документов резко повысится (повреждение хотя бы одного байта в обычном документе Word приведет к полной нечитаемости файла, а изменение даже нескольких десятков байт в HTML-документе в самом крайнем случае приведет к нечитаемости лишь этих поврежденных байт), но один документ будет располагаться в нескольких файлах, если он содержит внедренные графические обьекты.

Word 2000 при сохранении документа в формате HTML вносит в него очень большое количество избыточной информации. Избыточной не в том плане, что абсолютно лишней, а в том, что она требуется лишь самому Word'у и не используется даже самыми современными браузерами. Кроме того, браузеры не от Microsoft отображают сохраненные в Word 2000 web-документы зачастую непредсказуемым образом, вручную же поправить это, редактируя сам HTML-код, практически невозможно. Вследствие этого использовать Word 2000 для создания Web-страниц несколько затруднительно. Обьекты WordArt и автофигуры Word 2000 в HTML сохранять умеет, но делает это в самом коде HTML-файла. Сам Word и Microsoft Internet Explorer 5.0 их отображает, но другие браузеры игнорируют.

Область применения HTML-файлов, создаваемых в редакторе Word 2000, меньше, чем для Word 97. Их стоит размещать в Internet лишь тогда, когда сложное оформление очень важно для web-страницы, а сделать его вручную в других редакторах нет возможности. Кроме того, очень желательно, чтобы посетители сайта с такой страницей использовали исключительно браузер Microsoft Internet Explorer версией не ниже четвертой. Но зато в Word 2000 HTML очень хорошо установить как формат для сохранения документов по умолчанию. В этом случае устойчивость документа к повреждениям резко повысится, а для его просмотра будет достаточно браузера.

Использовать Word 2000 для извлечения картинок из Word или конвертации изображений в форматы Gif или Jpeg по-прежнему можно. К форматам Gif или Jpeg в Word 2000 добавился формат Png, который тоже может использоваться в качестве web-графики, но доступен только самым последним моделям браузеров.

Поэтому тем, кто собирается использовать возможности Microsoft Word для облегчения работы по созданию web-страниц, желательно при инсталляции Word 2000 сохранить Word 97 (отметив соответствующую опцию в одном из диалоговых окон программы инсталляции Microsoft Office 2000) и использовать в качестве HTML-конвертора именно его.

Конвертор HTML из Word XP по своим прикладным возможностям почти полностью идентичен своему предшественнику из Word 2000, так что все сказанное об HTML-конверторе из Word 2000, верно и для него. Однако в новой версии Word в HTML-конвертор добавлена функция "сохранения как web-страницы с фильтром", при использовании которой в создаваемый web-документ не включаются многие параметры форматирования исходного текста. В результате web-страница получается меньшего размера, а ее исходный код становится по крайней мере читаемым. Кроме того, в Word XP документ можно сохранить в виде «web-архива» (с расширением. mht или. mthml), то есть одного файла, в который включаются как текст документа, так и все рисунки и таблицы стилей. Внутренняя структура такого файла построена на основе стандарта MIME.[59] Web-архив может просматриваться через браузер Microsoft Internet Explorer версии не ниже 4.0. Для использования при создании сайтов эти новые возможности во многом бесполезны, однако использовать web-архив в качестве замены стандартному типу файлов. doc, используемому в Word для сохранения документов по умолчанию, представляется весьма перспективным, — в самом деле, при полном сохранении оформления текста web-архив весьма устойчив к повреждениям (так как фактически представляет собой HTML-документ с фрагментами, закодированными base64 или uuencode[60]), а, кроме того, может быть просмотрен даже в том случае, если у пользователя не установлен ни Word, ни какой-либо другой просмотрщик. doc-файлов, — в Microsoft Internet Explorer'е.

Исходя из всего вышеизложенного, можно сказать, что встроенный в Word конвертор HTML — не такая и бесполезная вещь, как иной раз кажется на первый взгляд. Неопытным пользователям он может помочь быстро создать web-страницу в случае необходимости, а опытным даст немало уникальных возможностей, облегчающих труд по созданию сайта. Конверторы из Word 2000 и Word XP таких возможностей дает меньше, позволяя зато весьма хорошо защитить документы Word от возможных повреждений путем использования формата HTML (а Word XP — и формата web-архива) в качестве стандартного.

Ознакомьтесь с возможностями этих конверторов. Вот увидите — не пожалеете о затраченном на это времени.

Пусть ваш сайт станет удобным

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

Посмотрите на рис. 22.12, как выглядят два информера от сайта РосБизнесКонсалтинг (www.rbc.ru), показывающие прогноз погоды в Москве и текущий курс валюты. Информеры от РосБизнесКонсалтинга меняются каждые полчаса, а то и чаще. Так что устаревшей информации у вас не будет.

Рис. 22.12.Зайдя сюда, можно узнать еще и прогноз погоды в Москве и курс валюты. А все — благодаря РосБизнесКонсалтингу.

Получить желаемые информеры можно на сайте, посвященном только им — www.informer.ru. Выбор — огромен. Скажем, как вам англо-русский переводчик прямо у вас на сайте? Не хотите составить конкуренцию Promt'у? А что — если ваш сайт посвящен изучению иностранных языков или англоязычной музыке, то почему бы не облегчить жизнь посетителям? На страницах www.informer.ru можно найти даже такие «сокровища», как информация об именинах на следующий день, указатель погоды в любом городе России в виде большого градусника и многое другое. Вы даже можете сами создать свой информер, указывающий, сколько дней осталось до того или иного события.

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

На некоторых новостных сайтах дается возможность ставить на свой сайт "новостные ленты" — нечто вроде информеров текстового формата, показывающие новости за последний час, взятые с этого сайта новостей. Так что смотрите на каждом таком сайте ссылки типа «информер», «лента», «web-мастеру». Также нередко предложение об установке информеров можно встретить на развлекательных сайтах. Например, сайт www.sporu.net обещает предоставлять каждому, кто установит их информер на своем сайте, свежий анекдот каждые полчаса.

Заключение

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

И первое, самое главное правило размещения информации в Интернете — это необходимость ее другим пользователям. Если то, что расположено на сайте, интересно и нужно — то его станут посещать в любом случае, сколь бы некрасивым он бы ни был. А если содержимое сайта никому не нужно, кроме его автора (вроде "сайта Васи Пупкина" — фотография автора и его собаки, плюс список его увлечений, плюс ссылки на общеизвестные ресурсы Сети), то никакие приемы web-дизайна не помогут. Более того — такой сайт вызовет лишь отвращение к его автору.

Второе правило — сайт должен быть удобным. Посетитель не должен гадать, куда ему надо нажать, чтобы получить ту или иную информацию. Читать текст на сайте должно быть легко, а ориентироваться — просто. Страницы сайта должны быстро загружаться, — думайте прежде всего о тех, кто работает в Интернете с помощью модемного подключения и платит за каждую минуту доступа в Сеть.[61] Если на сайте много текстовой информации, — не забудьте разместить архив с ней, чтобы его можно было быстро загрузить и читать, отключившись от Сети.

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

Успехов вам в сайтостроении!

Полезный совет

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

Создайте текстовый файл с таким содержимым:

<script language="JavaScript" defer>

var parentwin = external.menuArguments;

var doc = parentwin.document;

doc.designMode="On";

</script>

дайте ему имя с расширением, например, htm и поместите в какую-либо папку. Затем в системном реестре, в разделе HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt создайте подраздел. Имя этого подраздела будет отображаться в контекстном меню браузера, поэтому подберите его покрасивее — например, "Режим редактирования". В качестве значения параметра "По умолчанию" укажите путь к созданному вами файлу, а в параметре «Contexts» типа DWord — значение «1». После этого в контекстных меню всех вновь открываемых окон Internet Explorer'а появится новый пункт, выбрав который, вы сможете редактировать просматриваемую страницу.

Страница сохраняется при нажатии Ctrl+S. Возможностей для работы с содержимым страницы браузер предоставляет немного, однако добавить или удалить текст, сделать его жирным или выделить курсивом (комбинациями Ctrl+B и Ctrl+I соответственно) можно.

Глава 23. Ловим почтового бандита

Пользователи Интернета, работающие с электронной почтой, часто могут столкнуться с ситуацией, когда в почтовый ящик начинает приходить море ненужной информации, — например, реклама американских сувениров или корма для собак. Это так называемый «спам» — рекламная рассылка. Радости такие вещи не приносят: во-первых, их загрузка с почтового сервера на свой компьютер занимает время, а значит — деньги, а, во-вторых, такие письма могут заполнить ящик доверху, и в этом случае либо все вновь приходящие письма будут отправляться назад их авторам с пометкой "Ящик переполнен", либо, что еще хуже, за их хранение придется платить деньги провайдеру, у которого ящик расположен, если у того такие тарифные планы.

Рекламная рассылка — это еще не самый опасный нежеланный подарок из всех возможных. Другая опасная ситуация — это так называемые "почтовые бомбы". К примеру, кто-то вам крепко позавидовал и решил испортить вам жизнь. В результате каждый день в вашем почтовом ящике оказывается дистрибутив Windows 3.11, и вы тратите по полтора часа на забор почты с помощью модемного подключения. Сам же отправитель имеет оптоволоконную линию для доступа в Интернет или действует из Интернет-кафе. При этом нужные письма в ваш ящик попасть не могут, так как он забит «подарком», а может быть и еще того хуже — провайдер требует оплату места под ящик, так как его бесплатный лимит превышен.

По электронной почте могут рассылаться и вирусы. О том, как это делается, можно найти почти в любом компьютерном издании. Тут и исполняемый файл с именем pic.jpg………..exe в аттачменте, и скрипт там же, и даже JavaScript в самом тексте письма в формате HTML. Защититься от них можно, хоть иногда и сложно — не следует открывать неизвестные аттачменты, тем более без проверки антивирусами, кроме того, весьма желательно своевременно устанавливать «заплатки» на обнаруженные дефекты безопасности браузера, распространяющиеся с сайта его производителя. Ну и, естественно, ни при каких условиях не настраивать почтовый клиент на автоматическое открытие вложений (этим особенно грешит Microsoft Outlook). Но в любом случае письмо с вирусом занимает место в ящике, заставляет тратить время на его загрузку да и попросту является оскорблением получателю.

Но вот допустим, что вам пришло письмо с спамом, "предложением о заработке" или вирусом. Или обрушилась "почтовая бомба". Что делать? Настроить фильтры в почтовом клиенте или на почтовом сервере, если тот это позволяет (как это сделать — читайте ниже)? Да, безусловно. Но желательно ведь еще и найти отправителя, чтобы предотвратить его дальнейшие действия.

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

Для начала посмотрите заголовок письма, пришедшего вам (рис. 23.1) и внимательно изучите. В Microsoft Outlook Express 5.0 это можно сделать, выделив письмо в папке и выбрав из меню правой кнопки мыши пункт Свойства-Подробности.

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

Рис. 23.1. Заголовок письма спамера. Все параметры данного заголовка письма являются полностью вымышленными. Любое совпадение с реальными адресами, лицами, наименованиями абсолютно случайно.

Самая верхняя строчка — это обычно Return-Path или From, обратный адрес письма. При нажатии кнопок «Ответить», "Ответить отправителю" в почтовых клиентах именно на этот адрес отправляется ответ. Но… в письме спамера здесь может быть что угодно. Как реальный адрес, так и нет. Поэтому не стоит его принимать во внимание — ведь рассылка рекламы вполне может быть провокацией, направленной на дискредитацию честного производителя, не промышляющего спамом. Чтобы у сетевого сообщества сложилось отрицательное мнение о «рекламируемой» фирме и тем самым был устранен конкурент. Поместить в письмо нужный обратный адрес легче легкого — в Microsoft Outlook Express он указывается в настройках учетных записей, а в The Bat! вообще вписывается в текст письма отправителем. При рассылке вирусов обратный адрес тоже может быть поставлен произвольный.

Поэтому то, что вам нужно для того, чтобы выследить спамера — это самый нижний абзац заголовка письма, в котором есть слово Received. Это — запись самого первого почтового сервера, на который непосредственно отправил письмо спамер со своего компьютера. Именно ее и надо изучить.

Стоит сказать сразу — максимум, что можно узнать из заголовка письма, это IP-адрес отправителя и время отправки письма. Так как каждый компьютер, входящий в Интернет, принадлежит к какой-нибудь сети, управляемой службой поддержки (сети провайдера — если имеет доступ по модему, локальной сети в офисе, университете, Интернет-кафе и т. д.), то по этому IP-адресу можно вычислить координаты этой сети, ее местонахождение, а также контактную информацию ее владельцев и администраторов. Как это сделать?

Все по порядку. Сначала определим IP-адрес отправителя и дату отправки письма.

На рис. 23.2, 23.3, 23.4 вы можете видеть образцы окончаний заголовков писем. Рис. 23.2 демонстрирует письмо, отправленное посредством модемного подключения. Обратите внимание на то, что стоит после слова Received — подчеркнутый текст

from LocalHost (pp2545.dialup.provider.ru [178.39.0.1])

Рис. 23.2. Этот спамер подключался по модему через провайдера Provider.ru. Подчеркнут его IP-адрес.

Именно это и есть адрес компьютера, с которого было отправлено данное письмо. То, что стоит после самого нижнего слова "Received: " в заголовке письма. Кроме того, в этой же записи первого почтового сервера, через который прошло письмо спамера, имеется и указание на дату отправки сообщения:

by provider.ru (Postfix) with SMTP id 9ACDD8751; Sun, 30 Feb 2001 02:39:12 +0300 (MSK)

Из этих строк записи следует, что в воскресенье, 30 февраля 2001 года, в 2 часа 39 минут 12 секунд сервер provider.ru получил это письмо с компьютера с IP-адресом 178.39.0.1 и текстовым адресом pp2545.dialup.provider.ru. Слово Dialup — это признак того, что вредитель пользовался модемным подключением (оно ведь и означает — подключение посредством дозвона по телефону).

Отсюда следует, что злоумышленник действовал через провайдера, сервер которого имеет адрес provider.ru. Осталось только посетить этот сервер, ознакомиться с расположенным на нем сайтом провайдера, узнать e-mail службы борьбы с незаконными действиями пользователей (обычно ее адрес имеет вид abuse@provider.ru) и переслать письмо спамера на него как вложение. Именно как вложение — с помощью соответствующей функции почтовой программы. Иначе в пересылаемое письмо не войдет его заголовок, что обесценит пересылку. Сотрудники службы изучат заголовок письма, посмотрят в log-файлах сервера, с какого номера телефона и каким пользователем было отослано письмо, а затем примут меры — или запретят вообще доступ к своим модемным пулам с этого телефона, либо сообщат в компетентные органы.

Однако отнюдь не все спамеры действуют через модемное подключение. Спамер может быть и сотрудником офиса, и его посетителем, да и просто иметь подключение к Интернету по ASDL или ISDN-доступу. Да и не всегда в заголовке письма, отправленного при доступе посредством модемного подключения, можно найти текстовый адрес отправителя. А ведь именно он нам нужен — чтобы узнать, к какой сети принадлежит спамер, и связаться с ее службой поддержки. Заголовок письма может выглядеть так, как на рис. 23.3 или 23.4.

Рис. 23.3. А этот — наверное, через выделенную линию или локальную сеть. Но почтовый сервер у него расположен у провайдера Overnet. Подчеркнут его IP-адрес.

Рис. 23.4. Ну, а здесь можно выявить только IP-адрес. Скорее всего, отправитель пользовался web-интерфейсом сервера Mail.ru для отправки своего сообщения. Подчеркнут его IP-адрес.

Спамер, заголовок письма которого показан на рис. 23.3, подключался, скорее всего, не по модему, а по выделенной линии или действовал непосредственно из локальной сети какого-нибудь офиса. Для отправки письма он пользовался почтовым сервером провайдера Overnet. Ну, а спамер, отправивший письмо с заголовком как на рис. 23.4, вообще не пользовался почтовыми серверами для его посылки — он действовал через web-интерфейс сервера www.mail.ru.

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

Когда создается сеть, входящая в Интернет, ей выделяется набор IP-адресов для присвоения ее компьютерам. (Более подробно о том, как устроен Интернет, что такое IP-адреса и зачем их выделять вы можете узнать из главы 9.) Раздает IP-адреса новым сетям организация под названием RIPE. На ее сайте www.ripe.net имеется в свободном доступе база данных, в которой содержится интересующая нас информация о принадлежности сетям всех компьютерах, имеющих IP-адреса.

Поэтому если в заголовке письма нет указаний на сеть, в которую входит компьютер спамера, то для выяснения этого вопроса следует посетить сайт RIPE www.ripe.net, а именно — его страницу http://www.ripe.net/cgi-bin/whois (рис. 23.5, также на нее можно попасть по ссылке whois с главной страницы сервера www.ripe.net).

Рис. 23.5. База данных RIPE по IP-адресам.

Введите IP-адрес в поле ввода на этой странице, и вы узнаете, какой сети он выделен.

Это — вход в базу данных по IP-адресам сетей. Введите IP-адрес злоумышленника, определенный из заголовка его письма, в поле ввода, и нажмите кнопку. Вам будет выдана информация о том, какой сети этот IP-адрес принадлежит (рис. 23.6).

Рис. 23.6. Отчет базы данных RIPE. Из него понятно, что адрес 212.248.7.48, входящий в диапазон адресов 212.248.7.0 — 212.248.7.255, принадлежит сети фирмы Comstar — провайдеру услуг доступа в Сеть.

В полученной информации будет несколько ссылок на координаты администратора сети, ее владельца, в общем — тех, кто за эту сеть отвечает. Эти данные всегда правильны — ведь именно по ним RIPE связывается с администрацией сети по техническим вопросам. Обычно эти ссылки имеют вид «admin-c», «tech-c». Так что посмотрите отчет поближе — наверняка и e-mail найдете, и телефон…

Ну, а дальнейшие действия те же, что и описанные выше — отправка письма администратору сети с вложенным письмом злоумышленника. Пусть наводит порядок. Администрациям сетей невыгодно укрывать злоумышленников, действующих через эти сети, — ведь иначе их могут счесть их пособниками и «выгнать» из Интернета.

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

Разумеется, из заголовка письма не всегда можно выявить IP-адрес злоумышленника. Существуют специальные серверы, скрывающие IP-адрес отправителя в пересылаемых через них письмах и подставляющие вместо него свой. Однако администрация таких серверов обычно относится к спамерам без особой любви. Если вам пришел спам или "почтовая бомба" с такого сервера (обычно в заголовке указывается его текстовый адрес), то сообщите об этом случае его администрации. У них есть «логи», то есть файлы, в которых записывается, кто и когда заходил на сервер, отправлял письмо, и откуда это происходило. Вам наверняка помогут — сами найдут сеть вредителя и сообщат туда.

Если вы пользуетесь программой — файерволлом, которая может определить IP-адрес злоумышленника при его атаке через Интернет непосредственно на ваш компьютер, то тоже не забывайте сервер www.ripe.net. Всегда полезно сообщать администрации сетей о попытках хулиганства с их компьютеров. Они ведь тоже заинтересованы в этой информации.

Злоумышленник может использовать для отправки своих писем специальные программы, скрывающие его истинный IP-адрес. Случается это не так часто — но все же бывает. Кроме того, если злосчастный спамер обитает где-нибудь в Америке или Африке, то вряд ли тамошние провайдеры будут с ним разбираться. Особенно по жалобе российского пользователя. К тому же там спам — это бизнес, достаточно широко распространенный. Поэтому, разумеется, все, описанное выше — не универсальный способ защиты и выслеживания. Есть такие хорошие вещи, как почтовые фильтры, возможность просмотра заголовков пришедших сообщений и удаление ненужных писем на почтовом сервере без загрузки на компьютер, ответный удар, наконец…

Настройка почтовых фильтров

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

В программе Microsoft Outlook Express для этого служит пункт Сервис — Правила для сообщений — Почта (рис. 23.7).

Рис. 23.7.Установка фильтров на входящую почту в Microsoft Outlook Express производится именно здесь (версии от 5.0).

Правило в данном случае — это схема поведения программы Outlook Express при получении сообщения. Программа может выбирать из всех входящих сообщений содержащие какое-нибудь слово в адресе, теме, самом тексте или имеющие слишком большой размер. Выбранные сообщения могут быть сразу направлены в какую-нибудь папку, пересланы по другому адресу. Но наиболее ценной является возможность сразу удалять с сервера ненужные сообщения, не загружая их и даже не уведомляя пользователя об этом. Для этого просто нужно соответствующим образом настроить Правила (рис. 23.8).

Рис. 23.8. Пример настройки почтовых фильтров в программе Microsoft Outlook Express (версии от 5.0).

Кроме того, возможность устанавливать фильтры есть на многих серверах бесплатной почты. Так, на www.mail.ru для этого необходимо в web-интерфейсе воспользоваться ссылкой «Настройки», в списке настроек выбрать пункт «Фильтры», а на странице с фильтрами установить нужные параметры (рис. 23.9, справа).

Рис. 23.9. Страница установки фильтров для входящей почты на сервере бесплатных почтовых ящиков www.mail.ru.

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

Сервера бесплатной почты выгодны еще и тем, что практически все они предоставляют пользователю возможность просматривать письма через web-интерфейс. Это дает возможность удалить прямо с сервера "почтовые бомбы" и вирусы, прошедшие через фильтры, не тратя время на их загрузку на свой компьютер и не подвергая себя риску заражения вредоносными программами. Поэтому имеет смысл основной почтовый ящик создать именно на таком сервере (например, www.hotbox.ru, www.netman.ru, на последнем имеется богатый выбор доменных имен для почтовых ящиков).

Практически все сервера бесплатной почты предоставляют услугу "сборщик почты", заключающуюся в том, что с помощью специальной программы могут автоматически забирать почту из других почтовых ящиков (естественно, для этого необходимо указать на особой странице адрес ящика, логин и пароль на доступ к нему). Так что уже имеющийся почтовый ящик не должен служить препятствием для использования услуг бесплатных почтовый систем: настройте "сборщик почты" на вашем новом ящике и забудьте о существовании старого, — все письма, приходящие на него, автоматически перейдут на новый адрес.

С помощью серверов бесплатной почты можно даже создать «эшелонированную» оборону почтового ящика, зарегистрировав несколько дополнительных адресов и настроив автоматическую пересылку всей почты, поступающей на них (эту услугу предоставляют почти все такие сервера), на ваш основной адрес. Эти дополнительные адреса можно указывать во всяких «сомнительных» местах вроде чатов и гостевых книг, а в случае атаки на какой-нибудь из них отключить автоматическую пересылку и дождаться, когда атака закончится, после чего почистить ящик через web-интерфейс и включить пересылку снова. Есть простор для творчества.

Глава 24. Береги пароль смолоду

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

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

Итак — начнем с описания методов воровства паролей.

Атаки

Для того, чтобы получить доступ в Интернет с помощью соединения по общедоступной телефонной сети, в общем случае необходимо знать телефон провайдера, логин и пароль, а также иметь определенное количество денег на счете в базе данных провайдера, записанных на свой логин (логин, пароль и место в базе данных именуются в данном случае все вместе аккаунтом). Именно телефон провайдера, логин и пароль и нужны тем, кто собирается попользоваться Сетью за ваш счет.

Но как же можно их получить? Например, использовав один из следующих способов.

1. Взломав сервер провайдера и получив доступ к его базе данных с аккаунтами пользователей.

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

2. Узнав логин с паролем лично от вас.

Например, прислав письмо якобы от службы поддержки с просьбой сообщить логин и пароль под предлогом аварии базы данных или замены паролей (рис. 24.1). Никогда не отвечайте на подобные письма — ни один провайдер не станет спрашивать у своих пользователей их пароли посредством электронной почты.

Рис. 24.1. Казалось бы — убедительное письмо, забота о пользователях. Но… приглядитесь-ка к адресу "службы поддержки"! Ничего подозрительного не замечаете? Да и не будет солидный провайдер требовать высылать ваши пароли ему почтой. Не попадитесь на подобную уловку!

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

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

Выведать логин и пароль можно и в дружеской беседе. Но это уже относится не к техническим вопросам, а скорее к психологическим. Можно узнать эти данные и обманом — к примеру, однажды в Сети был организован сайт, где можно было зарегистрироваться для получения бесплатных рассылок по электронной почте, указав логин и пароль, а также (как бы "для информации") — телефон своего провайдера. Определенный процент людей, не подумав, вводили для регистрации те же самые логины и пароли, что и для своего доступа в Интернет, чем злоумышленники, создавшие сайт, и воспользовались…

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

3. Открыв сохраненные пароли на вашем компьютере.

Если вы используете операционную систему Microsoft Windows 95 или 98, а злоумышленник физически получит доступ к вашему компьютеру, то ему может легко удастся узнать сохраненные на жестком диске пароли. Для этого достаточно скопировать и запустить программу OpenPass, а затем навести ее на любое окно, в котором пароль отображается звездочками. Звездочки исчезнут, а на их месте появится пароль.

Программа OpenPass пригодится и вам — если вы вдруг забудете свои сохраненные пароли, то с ее помощью их нетрудно будет восстановить. Так что, если хотите, загрузите ее с адреса http://perecod.chat.ru/openpass.rar.

3. Похитив с вашего компьютера файлы, в которых пароль был сохранен.

Если вы сохраняете пароли на жестком диске своего компьютера, то похитить их не так и трудно. На врезках описано, как это можно сделать, — украв файл с расширением. pwl из каталога Windows и ветвь HKEY_CURRENT_USER\RemoteAccess из системного реестра.

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

4. Установив на ваш компьютер программу, которая узнает вводимый вами пароль и логин и отошлет их злоумышленникам.

Попасть такая программа к вам может разными путями — скажем, под видом какой-нибудь полезной программы (тогда она называется "программой-трояном"). Или при прямом, физическом доступе к компьютеру — вставить дискету и скопировать с нее программу нетрудно.

Обычно трояны незаметно отсылают по системе электронной почты своему автору файлы, содержащие сохраненные пароли. Однако даже в том случае, если пользователь не сохраняет на жестком диске пароли, а набирает их каждый раз вручную при установлении связи, их можно узнать с помощью "клавиатурных шпионов" — программ, которые записывают все нажатия клавиш. Например, таковым является программа HookDump. Если ее скопировать на компьютер и запустить, то все нажатия клавиш, кнопок мыши, названия запускаемых программ и открываемых окон и даже первые строки читаемых файлов окажутся в файле отчета. Этот файл можно потом просмотреть. Вводимые с клавиатуры пароли тоже там будут.

HookDump может использоваться и в «мирных» целях — скажем, для отслеживания действий неопытных пользователей за компьютером. В случае «краха» системы можно будет не тратить время на расспросы, "что и когда нажал", а просто посмотреть отчет HookDump и узнать, что произошло. Поэтому вы можете загрузить эту программу с адреса http://perecod.chat.ru/hookdump.rar. Однако не увлекайтесь использованием HookDump'а, думаю, понятно, почему…

Чтобы воспользоваться отчетом HookDump'а, необходимо забрать его с того компьютера, где он был создан. Однако есть программы-трояны, которые отсылают такие отчеты автоматически по электронной почте.

5. Попросту подобрав пароль.

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

Защита

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

1. Берегитесь вирусов и троянов!

Обязательно проверяйте на вирусы все загружаемые из Сети, добываемые с компакт-дисков программы! Используйте для этого самые современные антивирусные программы — например, Antiviral Toolkit Pro. Почаще просматривайте содержимое автозагружаемых папок и разделов реестра Windows ("Автозагрузка" в Главном меню, подразделы Run, RunOnce, RunOnceEx, RunServices, RunServicesOnce разделов HKEY_CURRENT_USER\Software\Microsoft\Windows\ CurrentVersion и аналогичного в HKEY_LOCAL_MACHINE, а в Windows95/98/Me — еще и раздел [boot] в system.ini, параметры load и run в win.ini, файлы autoexec.bat и config.sys) на предмет появления там "чего лишнего". Никогда не открывайте вложения в письмах, несогласованные с отправителем! В общем — выполняйте требования антивирусной безопасности.

2. Не используйте простых паролей!

Чтобы пароли можно было легко запомнить, но трудно подобрать, выбирайте для них комбинации клавиш, близко стоящие на клавиатуре. Скажем, пароль «Oqvepz» значительно менее удобен в использовании, чем «QasZxCCvder432» (проверьте это сами, взглянув на клавиатуру своего компьютера!), а надежность последнего выше. В самом деле, когда вы наберете второй пароль на клавиатуре пару-тройку раз (можно даже одной рукой), то вы уже запомните сами движения рук, а не непосредственно буквы. Лучше всего будет, если перед тем, как назначать свой пароль на вход в Сеть, вы сначала его придумаете и выучите, а потом уже укажете в регистрационных данных. Если провайдер предлагает свой пароль для доступа, то лучше поменяйте его на свой, выученный заранее.

3. Если вы работаете в Windows95/98/Me, то никогда не сохраняйте пароли на вход в Интернет на жестком диске!

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

4. Используйте разные пароли для разных ресурсов!

Никогда не используйте один и тот же пароль на вход в Интернет и на ваш почтовый ящик! Если требования провайдера таковы, что эти пароли должны быть одними и теми же — то либо не пользуйтесь этим ящиком вообще и заведите себе аккаунт на сервере бесплатных почтовых ящиков вроде www.mail.ru, www.cmail.ru, www.inbox.ru, www.chat.ru и т. д., либо не сохраняйте пароль на доступ к нему на жестком диске! Ведь хранится этот пароль в системном реестре и расшифровывается быстро и просто.

5. Если уж вы решили сохранять пароль на вход в Сеть на компьютере — используйте надежные программы для их хранения.

Например, программу Professional Dialer Желтухина Александра (можно загрузить с сайта http://pdialer.virtualave.net или с сервера www.freeware.ru) или SP Dialer Александра Панченко (можно загрузить с сайта http://spacreat.chat.ru). При сохранении паролей с помощью этих программ они шифруются по достаточно сложным алгоритмам, но главное — с использованием уникальных данных, имеющихся только на вашем компьютере. Скажем, Professional Dialer использует для этого заводской серийный номер жесткого диска компьютера, а SP Dialer — номер первого логического диска. И та, и другая величина никогда не повторяются на различных компьютерах, а определить их без специальных программ не так и просто, к тому же используются они при шифровании весьма хитроумно. То есть — если даже злоумышленник похитит файлы, в которых эти «звонилки» сохранили пароли, он все равно не сможет ими воспользоваться без вашего компьютера. Более того — обе эти программы превосходно защищены даже от OpenPass — с ее помощью просмотреть пароли в этих программах не удастся! (Хотя это, впрочем, может сослужить и плохую службу — если вы решите перенести пароли на другой компьютер или поменяете жесткий диск, и вдруг обнаружите, что напрочь свои пароли забыли…) Да и HookDump ничего не даст при использовании Professional Dialer и SP Dialer — если, конечно, вы запрограммировали пароли в них до того, как HookDump был запущен.

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

К сожалению, популярная программа-звонилка Edialer не спасает от похищения паролей. Все они хранятся в файле Edialer.ini в папке Windows. Злоумышленнику достаточно похитить этот файл с компьютера, чтобы получить все телефоны, логины и зашифрованные пароли. Создав соединение с именем, взятым из этого файла, можно отобразить соответствующий ему пароль в окне паролей Edialer, а, воспользовавшись OpenPass, привести его в видимую форму.

6. Если вы все же верны стандартной «звонилке» Windows9x- то задайте пароль на вход в Windows, не оставляйте его пустым!

В этом случае для того, чтобы добыть ваши пароли, злоумышленнику еще придется узнать пароль и на вход в Windows. А это не так-то и просто… Хотя возможно — если он получит доступ к уже загруженному компьютеру.

7. Никогда не храните на счету много денег!

Чем больше вы храните денег на счету, тем больше вы можете их потерять. При неограниченном доступе воровство пароля не так страшно — максимум, что может произойти, так это то, что вы в определенное время не сможете подключиться к Интернету вследствие занятости взломщиком вашего логина или изменения им пароля, о чем следует сразу сообщить службе поддержки провайдера. Обычно служба поддержки достаточно быстро разбирается с такими случаями. А вот при повременной оплате вопрос возврата денег может встать остро. Провайдеры не склонны возвращать оплату, даже если она ушла мошеннику. Ясно, что если на счету денег мало, то и вред от их потери меньше, чем в случае большого размера счета.

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

8. Регулярно меняйте свой пароль на вход в Интернет, а если это возможно — то и логин.

Этим вы обесцените старания взломщиков, тратящих силы на воровство ваших файлов с паролями и их расшифровку. Только не забывайте о вышеизложенных правилах при назначении нового пароля!

9. По возможности — защитите ваш компьютер от атак через Сеть.

Если вы это можете — установите файерволл (вроде AtGuard, Personal Firewall или другой). В крайнем случае попросите сделать это вашего знакомого, кто может. Если вы работаете в Windows95/98/Me, то правильно настройте параметры подключения к сети в Windows (пиктограмма «Сеть» в Панели Управления) — они должны выглядеть так, как на рис. 24.2. Удалите все компоненты, кроме Контроллера удаленного доступа, Клиента для сетей Microsoft и протокола TCP/IP. Впрочем, если вы удалите и Клиент для сетей Microsoft, то много не потеряете — не сможете пароли сохранять в реестре и делать кое-что еще. Ни в коем случае не открывайте доступ к файлам в соответствующем окне — иначе поживиться содержимым ваших дисков будет куда как проще.

Рис. 24.2. Пусть параметры сети в вашей Windows выглядят так.

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

10. Ну и, ясное дело, никому не сообщайте ваших паролей без излишней необходимости.

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

Если есть возможность физического доступа к вашему компьютеру тех, кто может похитить ваши пароли, то предотвратите это. Например, вы можете установить пароль на screensaver. Если на вход в Windows у вас тоже стоит пароль, то злоумышленник уже не сможет так просто похитить ваши пароли при работающем screensaver'е. Для того, чтобы убрать screensaver, нужно будет перезагрузиться, а в этом случае получить доступ к вашему пользовательскому профилю ему уже не удастся. Даже если он украдет файл. pwl и user.dat вашего профиля, все равно этого будет мало для похищения паролей. Только проследите, чтобы у вас в окне Панель управления — Система — Устройства — Устройства чтения компакт-дисков — Ваша модель CD-Rom'а — Свойства — Настройка не стояла галочка в пункте "Автоматическое распознавание диска" — иначе даже при запущенном screensaver'е можно будет вставить автозапускающийся компакт-диск в CD-Rom, а на этом диске поместить вирусы и трояны.

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

Всех вышеизложенных рекомендаций вам хватит, чтобы в достаточно большой степени обезопасить себя от денежных потерь в связи с похищением пароля на доступ в Сеть. Примерно те же рекомендации верны и для паролей на почтовые ящики и аккаунты на хостинговых серверах — за некоторыми исключениями. К примеру, пароли на почту стандартными средствами Windows шифруются хуже, чем на доступ в Сеть, а CuteFtp внушает большие опасения за сохранность паролей в нем. Впрочем, пароли на почтовые ящики и сайты злоумышленникам нужны гораздо реже. А если уж нужны, то действовать они будут скорее всего совсем по другому, чем описано здесь.

Как хранятся пароли в Windows9x

Ниже будет рассказано, как осуществляется хранение паролей в операционных системах Windows версий 95/98.

Информация о названиях соединений, настройках соединений и логинах, под которыми осуществляется вход в Интернет, располагается в системном реестре Windows, в разделе HKEY_CURRENT_USER\RemoteAccess\Profile. Каждый подраздел этого раздела соответствует одниму соединению. Информация о телефонах провайдеров содержится в разделе HKEY_CURRENT_USER\ RemoteAccess\Addresses. Каждый параметр этого раздела соответствует одному соединению.

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

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

Если вам нужно перенести все свои установки удаленных соединений, включая сохраненные на жестком диске пароли, с одного компьютера на другой, то загрузите компьютер с вашим профилем (если, конечно, у вас установлено несколько пользовательских профилей — то есть компьютер сконфигурирован для работы на нем нескольких пользователей) и поместите на дискету файл ИмяПользователя. pwl из каталога с операционной системой, а также экспортируйте раздел системного реестра HKEY_CURRENT_USER\ RemoteAccess в файл и поместите его тоже на эту дискету. Затем создайте на том компьютере, куда эти установки следует перенести, профиль пользователя с точно таким же именем, что и ваш профиль на первом компьютере, и с точно таким же паролем, если вы его задавали. Поместите файл. pwl с дискеты в каталог Windows нового компьютера и импортируйте принесенный на дискете раздел реестра в системный реестр этой машины. После этого, загрузившись с созданным профилем, вы сможете пользоваться своими настройками.

Если вы не утруждаете себя настройками профилей или вообще не знаете, что это такое, то просто скопируйте с исходной машины файл. pwl из каталога Windows, экспортируйте из реестра раздел HKEY_CURRENT_USER\ RemoteAccess и, поместив это все на дискету, принесите на второй компьютер. После этого в Панели управления второго компьютера воспользуйтесь пунктом «Пользователи» и создайте профиль с точно таким же именем, что и имя пользователя на первом компьютере — оно вводилось при первом запуске Windows и помещалось на место логина в удаленных соединениях при их первом использовании после создания. После этого помещайте принесенный файл. pwl в каталог Windows второго компьютера и перезагружайтесь. При входе в Windows укажите имя пользователя и пароль, которыми вы пользовались на исходном компьютере — и ваши настройки на месте.

* * *

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

Глава 25. Прошиваем…

К процессу перепрошивки BIOS'а в последнее время внимание пользователей компьютеров приковывается нередко. Набор вопросов и ответов по данному процессу, составляющий данную главу, возможно, даст вам именно ту информацию, которую вы давно искали.

1.

— Я неоднократно в книгах по компьютерам и учебниках по информатике читал, что BIOS- это однократно записываемая память, и она не может изменяться где-либо, кроме как на заводе — производителе таких микросхем. А сейчас отовсюду то и дело слышно о какой-то «перепрошивке» BIOS'а, которую может произвести каждый. Это как — с помощью мини-оборудования, как на заводе?

Нет. Сейчас для этого достаточно специальной программы.

Изначально действительно программное обеспечение для базового ввода-вывода, работающее до загрузки операционной системы (т. е. BIOS — Base Input-Output System), записывалось в микросхему памяти, допускающую лишь однократное проведение такого процесса. В самом начале ячейки памяти BIOS непосредственно производились с информацией (и назывались попросту ROM — Read Only Memory), затем код BIOS стали помещать в микросхемы уже после производства с помощью специальных устройств — программаторов (такие микросхемы именовались PROM — Programmable Read Only Memory). То, что было единожды записано в PROM программатором, ничем уже было удалить или заменить нельзя — даже повторным программированием на заводе.

Впоследствии обнаружили, что данные в ячейках PROM при некоторой модификации устройства этого носителя могут быть стираемы ультрафиолетовым облучением или электрическим разрядом большой мощности. Именно такие носители стали использоваться для производства микросхем BIOS. По всей видимости, имеющиеся у вас сведения относятся именно к тому периоду развития компьютерных технологий, — перепрограммирование BIOS'ов производилось тогда редко и лишь в промышленных условиях, — скажем, при усовершенствовании произведенной ранее партии материнских плат. Такие носители именовались EPROM (Erasable Programmable Read Only Memory) — если уничтожение прежней информации производилось ультрафиолетом, и EEPROM (Electrical Erasable Programmable Read Only Memory) — если для уничтожения информации требовался электрический разряд. Для записи новой информации был нужен программатор, выдающий особые электрические импульсы.

Трудность перепрошивки BIOS'а в то далекое время имела и положительные стороны. Во-первых, BIOS не поддавался действию вирусов — тем самым максимальный ущерб от них для владельца компьютера сводился к уничтожению его данных, и их действие не могло привести к повреждению аппаратных компонентов. Во-вторых, производители BIOS'ов, зная, что изменить их содержимое смогут только они сами, подходили к их разработке очень ответственно.

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

— А почему же тогда на основе такой же памяти, как сейчас используется в BIOS, не производятся жесткие диски? Ведь тогда же они будут очень надежными: там не будет движущихся частей…

— Слишком дорого. Их цена будет заоблачной. Именно на основе Flash ROM делаются карты памяти для карманных компьютеров (и собственно их память), так они стоят — за несколько десятков мегабайт до 100 долларов. Это еще и при том, что они не всегда являются полностью энергонезависимыми.

Сейчас, к примеру, фирмой Trek сделан накопитель на Flash-микросхемах, вставляемый в USB-разьем — ThumbDrive (http://www.thumbdrive.com). Так вот — при емкости в 512 мегабайт его цена составляет несколько сотен долларов, а более доступные — на 64 мегабайта — стоят 185 долларов. Впрочем, все еще впереди — производство компьютерных комплектующих постепенно удешевляется, так что может быть в будущем наши жесткие диски действительно не будут содержать ни вращающихся пластин, ни головок.

2.

— А как можно определить, поддается BIOSмоей материнской платы прошивке или нет?

— Если в документации к материнской плате об этом не сказано, то следует посмотреть на саму микросхему BIOS, отодрав наклейку c логотипом производителя BIOS с ее корпуса. BIOS'ы, поддающиеся программному изменению, имеют маркировки типа 28Fxxx, 29Cxxx, 29LVxxx, 29EE011, 29C010, PH29EE010, где xxx — произвольные цифры. Если маркировка другая, то у вас вряд ли Flash-BIOS, особенно если она начинается не с цифр 28 или 29 или если на микросхеме есть полупрозрачное окошко (через него производится стирание содержимого BIOS ультрафиолетовыми лучами в заводских условиях). Кроме того, можно посетить сайт производителя материнской платы и посмотреть, есть ли там прошивки для той модели его продукции, которая есть у вас. А вообще говоря, практически все материнские платы с 1997 года имеют BIOS, сделанный на основе Flash.

3.

— Скажите, пожалуйста, BIOSи CMOS-память — это одно и то же?

— Нет. Вообще говоря, на современных материнских платах можно найти три вида памяти, содержащей данные для начальной загрузки компьютера. Это так называемый Boot Block — нестираемая память, содержащая программу для загрузки компьютера при поврежденном BIOS'е и при его нормальной работе не использующаяся. Boot Block позволяет работать с дисководом и (а разных моделях материнских плат) либо с ISA-видеокартой, либо с системным динамиком и позволяет загрузиться с дискеты и запустить программу перепрошивки BIOS. (На некоторых материнских платах Boot Block сделана также на основе Flash-памяти и в этом случае она может все равно быть уничтожена при ошибках в процессе перепрошивания BIOS. А иногда, несмотря на то, что Boot Block размещен в Flash-микросхеме, для его перепрограммирования требуется просто более высокое напряжение, чем для перепрошивки остального BIOS'а.) Это собственно Flash BIOS — микросхема, содержащая код BIOS'а, именно он отвечает за начальную загрузку компьютера в штатном режиме и непосредственную работу некоторых операционных систем с «железом». Код в этой микросхеме непосредственно обновляется при перепрошивке BIOS с помощью специальных программ. А CMOS-память — это хранилище пользовательских настроек BIOS'а и данных о распознанных компонентах компьютера. Именно в CMOS — памяти вы сохраняете настройки BIOS'а, когда меняете какие-либо его параметры, именно в ней хранится пароль на запуск компьютера, рекомендаций по уничтожению которого очень много в различных компьютерных книгах и журналах. (А в самом деле, где они еще могут храниться — не происходит же автоматическая перепрошивка BIOS'а всякий раз, когда вы выбираете в качестве загрузочного диска CD-ROM?). Физически CMOS-память располагается либо на отдельной микросхеме, либо в микросхеме BIOS (зависит от модели материнской платы) и допускает свое обнуление с помощью специального переключателя на материнской плате. Последнее приведет лишь к сбросу всех введенных вами настроек BIOS'а, включая пароль, и параметров устройств (жестких дисков), если они сохранялись в CMOS'е. Альтернатива последнему — автоопределение устройств, устанавливаемое специальной опцией в настройках BIOS'а: в старых компьютерах такой возможности не было, и при уничтожении содержимого CMOS-памяти приходилось выставлять параметры геометрии дисков заново. Кроме того, CMOS-память в отличие от Flash BIOS, энергозависима и хранит в себе данные без энергоснабжения лишь несколько минут. Поэтому сбросить ее настройки можно, удалив с материнской платы специальный источник энергии (обычно батарейку), питающую CMOS.

4.

— Здравствуйте. Ответьте, пожалуйста, зачем вообще BIOSперепрошивают?

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

Строго говоря, основные причины необходимости перепрошивки BIOS'а за последние 5–6 лет сменились довольно серьезно. Лет пять назад BIOS приходилось перепрошивать с целью добавить в него поддержку технологии PlugAndPlay или Расширенного прерывания 13, дать возможность компьютеру загружаться с CD-Rom'а или устройства SCSI, работать с новыми процессорами или даже (на весьма старых материнских платах) чтобы можно было использовать режим LBA для работы с жестким диском. Все эти проблемы практически нельзя решить иным путем, программным или с помощью настроек существующего BIOS'а.

В настоящее время почти все необходимые функции в современных BIOS'ах есть. Новые возможности, появляющиеся в новых прошивках BIOS'ов, обычно интересуют только любителей компьютерных игр или тонкой настройки компьютеров. Иногда в новые BIOS'ы добавляется корректная поддержка новых комплектующих.

Казалось бы, в таких условиях о перепрошивках BIOS'а можно думать лишь тем, кто не мыслит своей жизни без того, чтобы «выжать» из своей техники все, на что она способна… Но, к сожалению, здесь вступает в роль психологический фактор, обратная сторона возможности перепрошивки BIOS'а. Если ранее перепрошивка BIOS'а была вообще невозможна, а потом все равно считалась экстраординарным явлением, то сейчас это действие доступно любому пользователю — нужна лишь дискета с готовой новой прошивкой BIOS'а, которую можно быстро и легко загрузить через сеть Интернет с сайта производителя в день ее появления. В результате у компаний-производителей материнских плат вполне естественно появилось искушение не уделять особого внимания разработке и тестированию BIOS'ов, довольствуясь оперативным исправлением ошибок по мере поступления заявок пользователей и выкладыванием усовершенствованных версий BIOS'а на свои сайты, а высвободившиеся силы направить на разработку электронной части комплектующих. В результате те BIOS'ы, которые в настоящее время устанавливаются в новые материнские платы, зачастую содержат ошибки, в результате которых с некоторыми комплектующими или в некоторых режимах работают некорректно. Именно для исправления этих ошибок, об обнаружении и исправлении которых компания-производитель материнской платы не позаботилась (рассчитывая на то, что их найдут пользователи, а обновленную версию прошивки BIOS можно будет быстро выложить на своем сайте), и требуется иногда перепрошивка BIOS.

И, наконец, перепрошивка BIOS'а требуется при его повреждении. Например, вирусом типа Win95Cin или в результате неудачно выполненной перепрошивки.

Тем не менее замена BIOS'а материнской платы — отнюдь не обязательная операция. Подавляющее большинство пользователей обходятся без нее и обращаются к возможности перепрошивки BIOS'а только в тех случаях, когда появляющиеся при работе компьютера сбои нельзя исправить никаким другим способом или когда только обновление прошивки BIOS'а позволит использовать новые комплектующие.

Помните только, что к каждой модели материнской платы подходит только ее BIOS. Использовать BIOS'ы от других моделей материнских плат недопустимо.

— Так, понятно. А заменять BIOSвидеокарты зачем может понадобиться?

— Основных причин — две. Во-первых, перепрошивать BIOS видеокарты требуется, если производитель допустил в нем ошибку при производстве.

— Это ясно, а вторая?

— Вторая такова. Вы, наверное, знаете, что основной видеокарты является особая микросхема — видеочип, отвечающий практически за все операции, производимые видеокартой. Чипы и видеокарты часто производятся различными фирмами, как солидными, так и малоизвестными. К видеокартам от солидных фирм (например, Asus, Creative) прилагаются мощные и удобные драйвера. Практически всегда эти драйвера подходят и к noname-картам, собранным на том же самом видеочипе, что и так видеокарта, для которых они предназначены, однако часто с BIOS'ами noname-карт они взаимодействуют очень плохо. Или вообще не работают, если проверяют модель видеокарты (так производители дорогих карт пытаются не дать использовать свои мощные драйвера покупателям дешевых видеокарт на аналогичных чипах). Если же в noname-видеокарте заменить BIOS на тот, который ставится в аналогичное устройство солидной фирмы, то можно будет использовать драйвера от более мощных видеокарт, да и сам такой BIOS скорее всего будет лучше. Только надо обязательно следить за соответствием моделей видеочипа на прошиваемой карте и той, для которой берется прошивка BIOS'а.

5.

— Я тут слышал, что перепрошить можно не только BIOSматеринской платы, но и видеокарты, и даже модема. Неужели это правда? И зачем это может понадобиться?

— Да, это так. В принципе прошить можно все, что сделано на основе Flash-памяти. В настоящее время ПЗУ модемов, видеокарт, устройств DVD-Rom делается именно на основе Flash-микросхем. (Лучше тот носитель, который содержит код работы этих устройств и встраивается именно в них, называть именно ПЗУ — "постоянное запоминающее устройство": это уже не "базовая система ввода-вывода".)

Для чего может потребоваться перепрошивка ПЗУ? Да для того же, что и перепрошивка BIOS материнской платы: добавления новых функций, исправления ошибок. Скажем, усовершенствовав прошивку модема, можно добиться его работы на более быстрых протоколах обмена данными, улучшив прошивку видеокарты, можно повысить ее производительность в играх, использовать на noname-картах драйвера от дорогих профессиональных устройств, собранных на том же самом видеочипе. Зачастую «профессиональные» версии каких-либо устройств отличаются от обычных именно содержимым ПЗУ — отсюда довольно ясно, как практически бесплатно превратить дешевый модем в «навороченный» дорогой: просто поменяв прошивку. Одно время новые версии модемов USR Courier отличались от старых только прошивками, что позволяло бесплатно делать апгрейд одному и тому же устройству.

Flash-память используется и в сотовых телефонах — в ней записываются параметры сетей операторов сотовой связи (на так называемой «SIM-карте» или в самом телефоне в аппаратах старых стандартов), а также программное обеспечение телефона, обеспечивающее выполнение им своих функций (в ПЗУ, расположенном в самом телефоне). Иногда провайдер сотовых услуг модернизирует прошивку продаваемых телефонов так, что в сетях других операторов они работать не будут. Затем такие телефоны продаются в рекламных целях дешевле себестоимости в расчете на последующую компенсацию прибылью от оплаты пользователем разговоров. Но, так как ПЗУ этих телефонов сделано на основе Flash-памяти, то вполне возможно, купив телефон по низкой цене, убрать блокировку и подключить его к сети другого оператора с более дешевыми услугами. Такое мероприятие называется «разлоченьем» телефона и в последнее время применяется достаточно широко, несмотря на свою формальную незаконность.

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

Так что возможности перепрошивки ПЗУ различных устройств большие.

6.

— Скажите, пожалуйста, какой все-таки у меня BIOS: материнская плата — Asus, а при загрузке сообщается, что BIOS- Award? Где мне искать новую прошивку для него? И почему такая путаница?

— Award Software, American Megatrends Inc. (AMI), Phoenix Technology, Microid Research — это фирмы, специализирующиеся на производстве BIOS'ов. Они выполняют заказы производителей материнских плат, и зачастую сохраняют свои наименования в поставляемых прошивках BIOS'ов. Некоторые производители сами разрабатывают BIOS'ы для своей продукции, при этом часто используются BIOS'ы, произведенные упомянутыми фирмами и сохраняется совместимость программ-"прошивальщиков".

Несмотря на сказанное, вам следует искать новую прошивку именно на сайте производителя материнской платы — www.asus.com, так как вполне возможно, что BIOS, поставленный им фирмой Award Software, был доработан.

7.

— Есть ли какая-нибудь возможность автоматически узнать, надо ли мне обновлять BIOS?

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

Есть, кстати, специальная программа BIOS Wizard, которая делает то, что вы, по всей видимости, и желаете. BIOS Wizard создана в компании Touchstone Software и, по заявлению разработчиков, тестирует BIOS с целью выяснения совместимости со стандартами ACPI, Plug’n’Play, Int 13. Кроме того, она умеет искать обновление именно для вашей материнской платы на серверах компании Touchstone, которая обещает эти обновления у себя собирать. Загрузить программу BIOS Wizard можно с адреса http://www.fcenter.ru/Software/ System_Utility/BIOSWizard/bwz.exe.

— А как мне узнать версию BIOS'а материнской платы компьютера?

— Для начала посмотрите в Руководство пользователя, которое поставлялось вместе с ней. Если такового нет, то воспользуйтесь специальными программами, например, упомянутым BIOS Wizard'ом или программой BIOS-Info (ftp://ftp.heise.de/pub/ct/ctsi/ctbios13.zip). Информацию о версии BIOS'а выдают многие пакеты для тестирования компьютера.

Кроме того, получить сведения о версии BIOS'а можно исходя из тех данных, что BIOS выводит на экран в начале загрузки компьютера. Для этого служат специальные "таблицы соответствия", в которых указано, каким производителям и каким материнским платам соответствует тот или иной числовой код, выводимый BIOS'ом (такой код обычно имеет вид чего-нибудь типа "40-01S5-ZZ1124-10101111-060691-OPWBSX-F" — для AMI BIOS, код производителя и модели — в третьей группе цифр, 02/15/2000 — i440BX–ITE867 — 2A69KS2IC— 00 — для Award BIOS, нужный код — в предпоследней группе цифр). Упомянутые таблицы соответствия можно найти в Интернете, например, на сайте www.bios.ru или по адресу http://www.ping.be/bios/numbers.shtml.

8.

— Так, ладно, но вот если я все же надумаю перепрошить BIOSматеринской платы, то что мне надо делать?

— Во-первых, посетить сайт производителя материнской платы и найти там, во-первых, саму новую прошивку BIOS'а, предназначенную именно для вашей модели, а, во-вторых, специальную программу-"прошивальщик", обычно одну на все модели материнских плат той или иной фирмы. К примеру, для материнских плат Asus прошивки BIOS можно найти по адресу http://www.asus.com.tw/Products/Motherboard/bios.html, а «прошивальщик» — программу Aflash — по адресу http://www.asus.com.tw/Products/Motherboard/ bios_tools.html. Intel'овские BIOS'ы доступны с адреса http://support.intel.com/support/motherboards/bios.htm. Настоятельно рекомендуется повнимательнее изучить разделы сайта компании-производителя материнской платы, посвященные перепрошивке BIOS'а, на предмет всевозможных предостережений и комментариев.

Программа-"прошивальщик" также обычно поставляется на дискете или компакт-диске вместе с материнской платой. Иногда она может находиться в архиве с самой прошивкой BIOS, загружаемым с сайта компании-производителя. Существуют также «универсальные» прошивальщики, которые, по заявлениям их разработчиков, позволяют прошивать любые модели BIOS'ов на любых материнских платах. К примеру, такими программами являются AMIFlash (доступна с сайтов http://www.ami.com, http://ic.doma.kiev.ua/inside/ami/flash.htm), AwardFlash и другие. Однако использовать их следует только в случае крайней необходимости, к тому же несмотря на названия «универсальных», они таковыми являются не всегда — так, AMIFlash не поддерживает материнские платы на чипсетах Intel i810 и i815, однако позволяет добавлять поддержку новых чипсетов с помощью подключения специальных модулей, доступных опять-таки с сайтов компаний-производителей материнских плат.

Загрузив новую прошивку и программу-"прошивальщик", создайте загрузочную дискету MS-DOS командой sys a: из Режима MS-DOS (обратите внимание — не "системный диск Windows"!) Если у вас на компьютере установлена операционная система, не позволяющая запускать MS-DOS (т. е. Linux, FreeBSD, WindowsMe/2000/XP и т. д.), то сделайте такую дискету на другом компьютере, где MS-DOS есть. Скопируйте на дискету прошивку и программу-"прошивальщик".

В принципе дискету использовать не обязательно — достаточно скопировать прошивку и программу-"прошивальщик" в какую-либо одну папку, лучше всего — в корневой каталог, а затем для перепрошивания загрузиться в Safe Mode with Command Prompt Only. Однако в случае сбоя для восстановления BIOS'а все равно потребуется загрузочная дискета с прошивкой и программой-"прошивальщиком". Кроме того, если операционная система не позволяет запускать Режим MS-DOS, то без дискеты не обойтись.

Затем обязательно переведите компьютер в штатный режим, если он разогнан, и отключите в BIOS'е все механизмы защиты от его перезаписи, а также разрешите перезапись BIOS'а переключением соответствующей перемычки на материнской плате, если таковая присутствует. О механизмах защиты BIOS'а от перезаписи и способах их отключения прочтите в инструкции к вашей материнской плате. Отключите кэширование BIOS'а, установив в его настройках параметры Video Bios Cacheable и System Bios Cacheable как Disable (у Award Bios эти параметры расположены в разделе Chipset Features Setup).

Стоит помнить, что перепрошивка BIOS- это «аппаратно-зависимая» операция. То есть прошивки, программы-"прошивальщики", нюансы процесса перепрошивки свои для каждой модели материнской платы и уж во всяком случае для каждого производителя. Так что здесь можно привести лишь некие общие инструкции, а все частности следует узнать на сайте компании-производителя материнской платы и из инструкции к этой плате.

После проведения вышеописанных подготовительных операций можно начинать перепрошивку. Загрузитесь с подготовленной дискеты с новой прошивкой или в Safe Mode with Command Prompt Only и запустите программу-"прошивальщик" (иногда она требует указания в качестве параметра имени файла с новой прошивкой, например, "awdflash.exe newbios.bin"). Эта программа обычно имеет интерфейс наподобие Fdisk (рис. 25.1 — программа Aflash для материнских плат фирмы Asus). С помощью соответствующих пунктов меню следует вначале сохранить старую версию BIOS (на всякий случай — вдруг новая будет плохо работать), а затем собственно выполнить перепрошивание. Когда программа сообщит об окончании процесса, перезагрузите компьютер, лучше всего выключением питания и включением его снова.

Рис. 25.1. Все готово к перепрошивке BIOS'а. Прошиваем программой Aflash

По окончании перепрошивания BIOS следует сбросить содержимое CMOS-памяти — либо перемычкой на материнской плате, либо, войдя в новый BIOS сразу после перезагрузки, выполнив команду "Load Setup Defaults". (Некоторые программы-"прошивальщики" (тот же AMIFlash) позволяют не делать этого.) Верните на место переключатель запрещения перезаписи BIOS, если вы перед перепрошивкой изменяли его положение. Включите Video Bios Cacheable и System Bios Cacheable.

Все — перепрошивка закончена.

— Благодарю за помощь, но еще один вопрос — я использую Windows2000, к тому же на моем компьютере нет дисковода. Нет ли какой-нибудь программы для перепрошивки BIOS'а, работающей под Windows?

— Сейчас уже есть. Это утилита Award WinFlash (рис. 25.2), доступная с адреса http://www.fcenter.ru/cgi-bin/sitemanager/redirecturl.cgi?urlid=2162 (для WindowsNT/2000 еще нужен дополнительный драйвер http://www.fcenter.ru/cgi-bin/sitemanager/redirecturl.cgi?urlid=2163). Она работает в среде Windows и представляет информацию о существующей и прошиваемой структурах BIOS'а в наглядном виде. К сожалению, Award WinFlash поддерживает только BIOS'ы типа Award и не очень большое число чипсетов. Подробную инструкцию по использованию WinFlash вы можете найти в статье Михаила Закусило и Андрея Рябцева на сайте www.fcenter.ru по адресу http://www.fcenter.ru/cgi-bin/sitemanager/redirecturl.cgi?urlid=2159.

Рис. 25.2. Award WinFlash — прошивка BIOS'а из среды Windows. Заодно и структура BIOS'а видна как на ладони.

9.

— Помогите, скорее! Когда я перепрошивал BIOS, у меня отключили свет. Теперь мой компьютер не загружается. Что делать — неужели выбрасывать материнскую плату?

— Да, это, конечно, неприятно, но ситуация не такая катастрофическая. Есть способы восстановления поврежденных BIOS'ов.

Если у вашей материнской платы был Award BIOS, то вам необходимо достать где-нибудь видеокарту для шины ISA и установить ее в компьютер вместо видеокарты PCI или AGP (последние следует убрать). Нестираемая часть BIOS — Boot Block — позволяет получить доступ к дисководу и этой видеокарте. Загрузив компьютер с дискеты, запустите с нее же программу-"прошивальщик" и перепрошейте BIOS заново.

Если ваша материнская плата произведена фирмой Intel, то в комплекте ее поставки должна быть специальная загрузочная "bootable upgrade diskette" — дискета специально для таких случаев. Найдите с помощью документации на материнской плате переключатель "Flash Recovery" и установите его в положение "Recovery Mode". После этого вставьте "bootable upgrade diskette" в дисковод и включите компьютер. Boot block материнских плат фирмы Intel не содержит функций работы с видеосистемой — он только загружает дискету, вставленную в дисковод. Как только обращения к дисководу кончатся, вытащите дискету и перезагрузите компьютер. На "bootable upgrade diskette" находится автозапускающаяся программа, восстанавливающая BIOS. Не забудьте по окончании процесса вернуть переключатель "Flash Recovery" в исходное состояние.

Если же ни один из вышеперечисленных способов неосуществим, то можно применить более радикальный, но и более рискованный метод. Надо взять еще одну такую же материнскую плату, как и та, BIOS которой уничтожен — той же марки, и вытащить из нее микросхему BIOS (обычно она допускает такое действие). Затем следует поставить эту микросхему взамен испорченной, но так, чтобы ее можно было легко вытащить (например, обвязав ниткой). Загрузив компьютер в Режиме MS-DOS (он загрузится — BIOS-то вставлен работоспособный), следует вынуть исправный BIOS, вставить испорченный и тут же запустить программу перепрошивки. (Может потребоваться изменить положение переключателя "Flash Recovery".) То есть общий принцип — загрузиться с исправного BIOSэа, а потом прошить неисправный, подменив им исходный. Главное — устанавливать микросхемы BIOS'ов точно так, как они должны стоять (не перевернув случайно) и не устроить замыкания каких-либо контактов материнской платы.

Есть и еще один способ, требующий некоторого навыка сборки электронных схем. Его алгоритм можно найти по адресу http://www.fcenter.ru/fc-articles/Technical/fc-articles-2000/20001101-awdflash.htm, а полное описание — на сайте http://ic.doma.kiev.ua. Коротко можно сказать, что с помощью специального устройства, собираемого своими силами и содержащего микросхемы с исправным и испорченным BIOS'ами, осуществляется загрузка компьютера с исправного BIOS'а и перепрошивание испорченного после такой загрузки. При этом исправный BIOS перед перепрошиванием подменяется испорченным путем переключения контактов собранного устройства. Можно и просто купить на рынке новую микросхему BIOS — они продаются и отдельно.

— Есть ли какие-нибудь методы защиты от подобных ситуаций при перепрошивании BIOS'а?

— Ну, во-первых — при перепрошивке BIOS следует использовать источник бесперебойного питания, в крайнем случае взять его у кого-нибудь на это время.

Некоторые производители материнских плат заранее предусматривают возможность возникновения проблем при перепрошивании BIOS'а. Например, на материнской плате Gigabyte GA-6OXM7E используется фирменная технология Dual BIOS — на ней физически установлены две микросхемы Flash-памяти с двумя копиями BIOS'а. При повреждении основного BIOS резервная копия позволяет загрузить компьютер и восстановить содержимое первой микросхемы. Несмотря на некоторое удорожание платы в результате использования дополнительного электронного компонента, при частой модернизации BIOS'а такая технология себя оправдывает.

— А если бы перебой в питании возник при перепрошивке BIOS'а видеокарты, то что тогда надо было бы делать?

— Если испорченная видеокарта была предназначена для шины AGP, то дело можно было бы поправить. В таких случаях необходимо вставить в компьютер видеокарту для PCI-шины (вынув испорченную AGP-шную) и, загрузившись с ней, выставить в BIOS'е материнской платы порядок использования видеокарт — сначала PCI, затем AGP (такая функция есть во всех современных BIOS'ах). Затем, вновь вставив испорченную видеокарту, нужно загрузить операционную систему и перепрошить AGP-шную видеокарту предназначенной для этого программой (PCI-видеокарта при этом не затронется — программа будет работать именно с тем, что находится в слоте AGP). После этого PCI-видеокарту можно убрать.

10.

— Кстати, а вот такой вопрос. Вы тут приводили рецепт оживления материнской платы с испорченным BIOS'ом путем загрузки с исправного BIOS'а и подмены его неисправным чипом для последующей новой прошивки. Но как это можно делать? Ведь, исходя даже из самого названия BIOS'а (BaseInput-OutputSystem), можно понять, что именно с его помощью происходят все операции ввода-вывода. А тут с неисправным BIOS'ом предлагается открыть дискету и запустить оттуда программу… Как же программа будет запускаться в то время, как микросхема BIOS'а неисправна?

— Дело в том, что при загрузке компьютера BIOS кэшируется — переписывается в оперативную память, и в дальнейшем обращения операционной системы производятся именно к размещенной в оперативной памяти копии BIOS'а. Строго говоря, после того, как началась загрузка операционной системы, микросхему BIOS можно вообще вынуть из материнской платы. Именно этот факт и позволяет исправлять неправильно прошитый BIOS. В память копируется также и BIOS видеокарты, что обуславливает возможность замещать его другим без перепрошивки, просто запустив специальную программу. Отключив параметры Video Bios Cacheable и System Bios Cacheable в настройках BIOS'а материнской платы, можно запретить кэширование BIOS'ов.

11.

— Я хочу перепрошить BIOSмоей видеокарты NVIDIATNT2, но очень опасаюсь, что новый, скачанный мною BIOSбудет какой-нибудь бета-версией. Можно ли как-нибудь поработать с новым BIOS'ом без прошивки видеокарты?

— Как ни странно, можно. Для этого служит программа VGABios, доступная с адреса http://www.nvworld.ru/downloads/Vgabios.zip (архив размером 2 килобайта). Она загружает указанную вами прошивку не в саму видеокарту, а в то место системной оперативной памяти, в которую загружается Video-BIOS, замещая последний новой прошивкой. Инструкция по ее применению находится по адресу http://www.nvworld.ru/docs/bios_utils.html, там же есть и другие программы для работе с BIOS'ом видеокарт фирмы NVidia. Следует учесть, что программа VGABios работает только в MS-DOS — ее вызов следует прописать в файл autoexec.bat, так что использовать ее в WindowsNT, WindowsME и других операционных системах типа Linux, FreeBSD вам вряд ли удастся. С помощью VGABios вы можете протестировать, как будет работать ваша видеокарта с новой версией BIOS'а, и, если вы останетесь неудовлетворены ее работой, то просто удалите из autoexec.bat строку запуска программы.

— А есть ли еще какие-нибудь программы для того, чтобы менять не саму прошивку, а ее копию? Например, в модеме?

— Есть. Скажем, программа ModemPatcher (рис. 25.3) Янишевского Антона (доступна с адресов http://AHTOH.ua.ru, http://www.az.ru/anthon, http://perecod.chat.ru/modempat.rar). Она производит изменения в ОЗУ модемов таким образом, что те начинают понимать сигналы «Занято» российских телефонных станций (весьма распространенная проблема, кстати). Так что перепрошивка модема для поддержки российского стандарта сигнала «Занято» не обязательна. На большинстве типов модемов ModemPatcher требуется запускать всякий раз после включения питания модема или перезагрузки компьютера, и работает эта программа лишь в среде Windows.

Рис. 25.3. ModemPatcher.

12.

— Моя видеокарта на чипе Savage4 имеет нестираемый BIOS. Однако на одном из сайтов Интернета я нашел прошивку для нее. Это как так может быть — эта прошивка предназначена для тех, кто имеет дома программатор?

— Отнюдь нет. Дело в том, что BIOS видеокарты кэшируется в оперативную память, и операционная система работает именно с этой закэшированной копией BIOS'а. А, как нетрудно понять, содержимое оперативной памяти можно и заменить. Разумеется, делать это придется при каждой загрузке компьютера, но что мешает разместить вызов программы, делающей это, в autoexec.bat ОС Windows или MS-DOS? Саму программу можно сделать самостоятельно, загрузив из Сети новую прошивку и файл http://www.3dsystem.ru/files/s3/bios/makebios.rar, в котором содержатся бинарные файлы, представляющие собой части файла программы, размещающей прошивку видеокарты в системном ОЗУ (именуются они front.bin и back.bin, а обьединяются в единую программу в Режиме или Сеансе MS-DOS командой copy /b front.bin + prosh.bin + back.bin vidbios.exe, где prosh.bin — файл прошивки, vidbios.exe — итоговая программа). Подробнее о том, как работать с такой прошивкой, рассказывается в статье Николая Левского по адресу http://www.3dsystem.ru/review-bioss4.php3.

— А можно ли сделать то же самое для BIOS'а материнской платы — если, скажем, он непрошиваемый или хочется проверить новую прошивку перед ее размещением во Flash-памяти?

— А как это вы себе представляете? Ведь для того, чтобы исполнять какую-либо программу, в том числе и подменяющей BIOS, компьютер должен загрузиться, а сделать это он может только используя BIOS. После же загрузки подмена BIOS'а уже бессмысленна — новые возможности BIOS'ов касаются ведь именно процессу загрузки и получению при ней доступа к накопителям. BIOS же видеокарты нужен при обработке сложной графики и при загрузке компьютера используется минимально (но все же используется — при неправильно прошитом ее BIOS'е видеокарта работать не будет).

13.

— А где можно достать новые прошивки BIOS'ов материнских плат и других устройств? И где можно получить конкретную информацию по процессу перепрошивания?

— Новую прошивку можно взять на сайте компании-производителя устройства, для которого она нужна.

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

Посетите, к примеру, сайт www.bios.ru. Помимо прошивок BIOS'ов практически для всех типов устройств там немало документации по работе с BIOS'ом и его перепрошиванию. Статьи о работе с BIOS'ом можно найти на сайтах http://www.online.ru, http://www.kpdlabs.ru, http://www.ixbt.com, http://adesktop.chat.ru, http://ic.doma.kiev.ua. Подробное руководство по обновлению BIOS есть на сайте www.fcenter.ru по адресу http://www.fcenter.ru/fc-articles/Technical/fc-articles-2000/20001101-awdflash.htm. Прошивки видеокарт, статьи о работе с ними расположены на сайтах http://www.nvworld.ru, http://www.3dsystem.ru, по адресу http://www.fcenter.ru/fc-articles/Technical/fc-articles-2000/20001006-bios.htm вы можете узнать много интересного на эту тему. Или просто проведите поиск в Сети по названию комплектующего, требующего новой версии BIOS — среди найденного будет немало информации о его перепрошивке.

— А есть ли сайты, посвященные перепрошиванию именно модемов?

— Разумеется, есть. Каталог сайтов практически всех производителей модемов, а также страниц с новыми версиями модемных прошивок можно найти на том же сайте www.bios.ru, на его странице www.bios.ru/modems. Новые прошивки модемов фирмы USR Robotics вы найдете на сайте http://www.usrsupport.ru — для многих моделей модемов там представлены прошивка, адаптированные к российским телефонным линиям. Среди материалов сайта можно найти руководство по непосредственному осуществлению процесса перепрошивания. Для разрешения вопросов имеется Форум, на котором наверняка можно получить ответ на различные вопросы по обсуждаемой теме.

— Кстати, а процесс перепрошивания именно модемов имеет какие-нибудь характерные особенности?

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

14.

— Я ездил в турпоездку в США и приобрел там DVD-player. Однако я не могу на нем смотреть фильмы, купленные в России — они просто не запускаются. Мне посоветовали "перепрошить DVD-player", однако я сомневаюсь — надо ли? Что конкретно я должен сделать?

— Ваша ситуация вызвана тем, что в DVD-приводах используется так называемая "система региональной защиты", которая по мысли тех, кто ее придумал, должна заставлять пользователей покупать DVD-диски для просмотра только на каком-либо одном континенте. Она заключается в том, что все DVD-диски и DVD-плееры принадлежат к одной из семи «зон», и каждый DVD-диск может проигрываться только на том DVD-ROM, который принадлежит той же зоне.

Первоначально такая защита реализовывалась программно (и именовалась "RPC1") в программах-DVD-плеерах, что позволяло путем несложной модификации этих программ давать приводу возможность проигрывать диски любой зоны. Вследствие стремления фирм-производителей DVD-дисков к неконтролируемой наживе была разработана новая «версия» региональной защиты — «RPC2», включающая в себя необходимость особой прошивки ПЗУ DVD-проигрывателей, позволяющей сменить «зону» DVD-проигрывателя лишь несколько раз. Многие фирмы производят DVD-проигрыватели с внедрением в них RPC2 (хотя немало — вообще без использования RPC). Но так как ПЗУ DVD-проигрывателей также делается на основе Flash-памяти, то и его можно модифицировать вне заводских условий. Для большинства моделей DVD-проигрывателей уже есть специальные утилиты, изменяющие их прошивки так, что они получают возможность читать DVD-диски любой зоны. Найти такие утилиты можно в Интернете — просто проведите поиск по наименованию вашего DVD-проигрывателя. Это как раз тот случай, когда перепрошивка ПЗУ весьма необходима.

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

Глава 26. Многоосие

Эта глава посвящена одной весьма интересной теме — установке нескольких операционных систем на компьютер одновременно. Как и предыдущая, для удобства восприятия она построена в виде набора вопросов и ответов.

1.

— Здравствуйте. Расскажите, пожалуйста, а как это вообще возможно — установить на жестких диск компьютера сразу несколько операционных систем? Не будут ли они мешать друг другу — ведь, насколько я знаю, Linux, например, располагает файлы на диске совсем не так, как Windows…

— Согласно существующим стандартам IBM PC, в самом начале физического диска, в его самом первом секторе располагается небольшая программа — так называемая "главная загрузочная запись" Master Boot Record. В том же секторе помещается Корневая Таблица Разделов ("Root Partition Table"), небольшая база данных, в которой располагаются сведения о разбиении всего физического пространства жесткого диска на логические диски, или разделы — участки диска с определенной файловой системой на них.

BIOS компьютера при его загрузке считывает Master Boot Record и запускает ее, а она, в свою очередь, работает с Таблицей разделов. В Корневой Таблице Разделов указывается для каждого раздела, с какого сектора какой дорожки какого цилиндра он начинается и на каких заканчивается, сколько в нем всего секторов, какой тип файловой системы на нем установлен и является ли данный раздел в данный момент загрузочным — то есть должна ли операционная система загружаться именно с него. Загрузочный раздел в Корневой Таблице разделов может быть указан только один. Поскольку Корневая Таблица разделов и Master Boot Record располагаются в одном секторе, то они вместе должны занимать не более 512 байт, что соответствует четырем записям в Корневой Таблице разделов. Каждая из четырех записей Корневой Таблицы разделов может описывать раздел с какой-либо файловой системой — такие разделы еще называются Первичными.

В начале каждого раздела, в его первом секторе располагается Загрузочная запись этого раздела — небольшая программа, которая непосредственно и запускает операционную систему. При загрузке компьютера программа Master Boot Record считывает Корневую Таблицу разделов, а затем считывает и запускает Загрузочную запись того раздела, который помечен в этой таблице как активный, загрузочный.

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

— А две могут?

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

— То есть на вннчестер можно установить совершенно любую операционную систему, с любым способом работы с файлами?

— Да нет, все-таки не любую, а лишь ту, которая удовлетворяет стандартам IBM PC. То есть — умеющую работать с процессором, памятью, шиной, периферийными устройствами, сделанными согласно этим стандартам. А если она еще и «знает», что такое Загрузочная запись и может с нее загружаться, то в этом случае на диск с такой операционной системой можно дополнительно поставить и другую ОС.

2.

— Здравствуйте, я по поводу предыдущего вопроса — хотел бы сделать небольшое уточнение. На моем компьютере логических дисков восемь — как же информация о них влезает в Корневую Таблицу разделов?

— Вы работаете в DOS или Windows?

— Да.

— В этом случае один из разделов, указанных в Корневой Таблице разделов, может быть сделан так называемым "Дополнительным разделом DOS" и являться как бы «контейнером» входящих в него логических дисков. В первом секторе Дополнительного раздела Dos расположена его Таблица разделов с точно такой же структурой, как и Корневая Таблица разделов. Описываются в ней координаты начала и конца первого логического диска в этом Расширенном разделе (а также тип его файловой системы), а кроме того, координаты начала и конца зоны, занимаемой остальными логическими дисками, если они есть. Соответственно в первом секторе зоны остальных логических дисков находится Таблица разделов с информацией о втором логическом диске, расположенном в Дополнительном разделе Dos, и зоне, занимаемой следующими за ним дисками. В итоге получается ряд вложенных друг в друга, как матрешки, разделов, в каждом из которых имеется по своей Таблице разделов, описывающей координаты одного логического диска и зоны, занимаемой следующими дисками. Такая структура может показаться сложной, но только она дает возможность совместить большое количество логических устройств и ограниченный размер Таблиц Разделов.

— А на логических дисках Дополнительного раздела DOS могут быть созданы другие файловые системы?

— В принципе могут, но на практике — отнюдь не всегда. Дело в том, что само понятие "Дополнительного раздела DOS" — это изобретение Microsoft, и, соответственно, полноценно работать с ним могут не все ОС. Скажем, на логическом диске Дополнительного раздела DOS вполне спокойно может располагаться файловая система NTFS, которую использует WindowsNT/2000/XP, Linux тоже работает с Дополнительным разделом без труда, а вот ffs (Fast File System), файловую систему ОС FreeBSD, туда так просто не уместить. Хотя, опять-таки, в процессе совершенствования FreeBSD можно добиться и того, что она будет спокойно работать и с файловой системой ffs на Дополнительном разделе DOS.

— Дополнительный раздел может быть загрузочным?

— Нет, не может.

— Но, простите, у меня Windows установлена на диске F и преспокойно загружается.

— У вас установлены на диске F файлы самой операционной системы. Загрузочные же файлы ОС, те, которые выполняют самые начальные этапы загрузки, располагаются именно на системном диске — С. Посмотрите — вы обязательно найдете в его корневом каталоге несколько скрытых файлов с названиями io.sys, msdos.sys или ntldr — в зависимости от используемой вами версии Windows…

— Да, точно… Но то есть как — если я, скажем, отформатирую диск С, то Windows загружаться не будет, несмотря на то, что она сама установлена на диске F?

— Именно так.

— А что же тогда делать — неужели переустанавливать?

— Нет, не обязательно. Если вы используете Windows95, то перед форматированием сохраните файл msdos.sys (а также config.sys, autoexec.bat, если они присутствуют и необходимы) на другом диске, а после форматирования, выполнив его с ключом /s, т. е. сделав диск С системным, скопируйте его туда назад. (Именно в этом файле находится информация о том, на каком логическом диске и в какой папке располагаются основные файлы Windows — в строках WinDir=C: \WINDOWS, WinBootDir=C: \WINDOWS, HostWinBootDrv=C.) Если же вы работаете в Windows 2000, то вам будет необходимо восстановить загрузчик этой операционной системы, загрузившись с компакт-диска Windows 2000 (или с четырех дискет, сделанных предварительно программой makeboot.exe из каталога BOOTDISK дистрибутивного компакт-диска), в появившемся после загрузки меню выбрать пункт Repair, затем в следующем меню — пункт Recovery Console (сокращенная версия Windows 2000, позволяющая получить доступ к файловой системе и выполнить несколько команд восстановления), ввести пароль администратора и затем, в наконец-то появившейся командной строке — команду fixboot. Кстати, команда fixmbr восстановит Master Boot Record — так же, как и fdisk /mbr.

— …Нет, вы все-таки неправы! Я только что Fdisk'ом назначил Дополнительный раздел активным, загрузочным!

— Ну-ну — перезагрузитесь теперь… Пометить его как активный в Корневой Таблице разделов можно, а вот загрузиться с него нельзя.

— Да… Просто повис, черный экран, даже сообщений нет… Хорошо, дискета есть, сейчас все верну назад.

— Между прочим, неплохой способ запрета детям доступа к компьютеру. У кого нет системной дискеты или компакт-диска с программой FDisk, тот не сможет запустить компьютер, у которого активным назначен Дополнительный раздел DOS. А даже если такая дискета и появится, то понять, почему компьютер не грузится, будет непросто, не зная, что было сделано.

— И последнее. А можно ли выделить несколько логических дисков в Первичном Разделе?

— В операционных системах DOS и Windows каждый Первичный раздел может содержать лишь один логический диск — таковы стандарты. Другие операционные системы в принципе полностью свободны в распределении места отведенных им разделов и внутри них могут устанавливать какие угодно структуры организации данных, в том числе и делить их на подразделы. Обычно информация об этом приводится в документации к операционной системе. Например, в Первичном разделе, отведенном под FreeBSD, средствами этой ОС можно создать два подраздела (если интересно — Первичные разделы в FreeBSD именуются slice, а подразделы — partitions). Естественно, что работать с ними можно будет лишь из той же FreeBSD или с помощью программ-драйверов файловой системы FFS.

3.

— Простите, а если на компьютере установлено два жестких диска, то какая Master Boot Record — первого или второго диска — загружается?

— Это определяется BIOS'ом — в настройках современных BIOS'ов всегда присутствует параметр определения загрузочного устройства. Соответственно и загружаться будет именно та операционная система, раздел с которой помечен как активный именно в Корневой Таблице разделов этого загрузочного диска.

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

— Это уже прерогатива операционных систем. Обычно их загрузочные файлы содержат код, который ее считывает.

4.

— Я хочу организовать на диске еще один Первичный раздел, чтобы установить туда Linux. Однако Fdisk мне не позволяет этого сделать — там просто нет такой возможности…

— Программа Fdisk не позволяет создавать больше одного первичного раздела — ее возможности ограничены. Использовать Корневую Таблицу разделов по максимуму позволяет программа Partition Magic (http://www.powerquest.com, в крайнем случае можете загрузить старую версию программы с адреса http://perecod.chat.ru/pqmagic.rar).

— А кроме Partition Magic еще что-нибудь может помочь?

— Разумеется — в дистрибутиве Linux есть программа fdisk, одноименная с аналогичной из MS-DOS. Ее параметры запуска — "fdisk устройство", т. е., например, "fdisk /dev/hda" (помните, что именно так в Linux происходит обращение к жестким дискам — подробнее смотрите документацию по Linux'у). После ее запуска можете ввести команду m для просмотра справки, а затем — собственно выделить разделы для Linux (обычно выделяется два — для самой ОС и для ее файла подкачки). Общение с программой идет в диалоговом режиме — программа отображает возможные варианты действий, а вы вводите соответствующие команды. При инсталляции современных дистрибутивов Linux обычно есть возможность воспользоваться этой программой, так что начинайте инсталляцию, а в ее процессе выделите разделы. Хотя все-таки лучше сначала поработать с Partition Magic и подготовить разделы для Linux заранее — интерфейс у этой программы удобнее, да и возможностей больше.

— Кстати, о программах! Я недавно работал в Windows 2000 и не нашел там fdisk'а! Я плохо искал или ее нет?

— В Windows 2000 функции fdisk выполняет программа "Диспетчер логических дисков" (Disk Administrator в оригинальной английской версии, вызывается из: Панель управления — Администрирование — Управление компьютером — Запоминающие устройства — Логические диски, рис. 26.1). С ее помощью вы можете создавать и удалять разделы и логические диски. Кстати, создать еще один Первичный раздел она вполне способна, только делать это именно с ее помощью для последующей установки Linux я бы вам все же не советовал. Лучше возьмите Partition Magic.

Рис. 26.1. DiskAdministrator из Windows 2000.

— Постойте, но если этот Диспетчер может быть вызван лишь из Консоли управления Windows 2000, то как же тогда можно установить Windows на неразмеченный диск?

— Элементарно — в этом случае Disk Administrator вызывается в процессе инсталляции.

5.

— Здравствуйте. Вот насколько я понял, в Корневой Таблице разделов может быть описано до четырех Первичных разделов, в которых могут стоять операционные системы, и один из этих разделов может быть помечен как активный — загрузочный…

— Да, вы правильно поняли.

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

— Они использовали специальные программы — загрузчики.

— А откуда они их взяли?

— Во-первых, во многих операционных системах есть встроенные загрузчики. Например, загрузчик Linux — LiLo — дает возможность выбора раздела для загрузки, встраиваясь в Master Boot Record вместо ее стандартного кода и выводя на экран меню. Загрузчик операционной системы OS/2 при своей инсталляции помещает ссылку на занимаемый им сектор диска в Корневую Таблицу разделов (формально тем самым становясь "отдельным разделом") и, автоматически запускаясь в том случае, если ссылка на него в этой Таблице помечена как "активный раздел", позволяет выбирать для загрузки остальные разделы — до трех. Windows 2000 также предоставляет возможность мультизагрузки, при этом используется довольно интересный механизм: Загрузочные записи других разделов копируются в двоичные файлы, располагающиеся на доступных программе-загрузчику логических дисках (т. е. с файловой системой FATxx или NTFS, обычно используется тот же самый диск, что и тот, на котором располагается программа-загрузчик — именуемый буквой "С: \", так уж повелось исторически, что именно буква С используется для обозначения загрузочного диска в операционных системах от Microsoft), а та (ее файл имеет название ntldr), основываясь на данных конфигурационного файла (именуемого boot.ini) и выбора пользователя, эти Записи запускает, тем самым загружая соответствующую операционную систему.

В настоящее время создано немало программ, чье основное предназначение — именно предоставление возможности удобного выбора операционной системы при загрузке компьютера. Таких программ довльно много — это и Acronis OS Selector, и System Commander, и SyMon. У каждой из них свой метод работы — некоторые встраиваются в Master Boot Record, некоторые — устанавливаются на активный раздел и сами работают с Корневой Таблицей разделов. Поищите в Сети — скажем, Acronis OS Selector распространяется с сайта http://www.acronis.ru, SyMon — с адреса http://symon.h1.ru. Acronis OS Selector, кстати, является еще и аналогом Partition Magic — позволяет работать с разделами, изменять их размеры, создавать их и удалять.

— Да, интересно…

6.

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

— Для начала немного уточню ваш вопрос — вы, похоже, хотите узнать, можно ли создать больше четырех Первичных разделов? Ведь, скажем, на логических дисках Дополнительного раздела DOS можно создать файловые системы и FAT16, и FAT32, и NTFS разных версий, и поставить туда разные версии операционных систем от Microsoft, тогда ваше пожелание будет формально выполнено.

— Да, конечно, ОС от Microsoft — это особый пункт, я имею в виду — в принципе.

— В принципе — можно, но, опять-таки, для этого придется использовать специальные программы. Например, уже упоминавшаяся программа Acronis OS Selector позволяет установить до 100 операционных систем на одном компьютере. А программа SyMon (ее сайт — http://symon.h1.ru), являясь к тому же бесплатной, дает возможность разбить жесткий диск на любое число разделов вплоть до 36-ти и установить до 20 операционных систем.

— Ух ты, а как это так? Как это им удается?

— Принцип прост — раз нельзя изменить размер Корневой таблицы разделов, значит, надо ее изменять саму. К примеру, SyMon (рис. 26.2) все данные об имеющихся разделах и установленных на них операционных системах хранит в своей базе данных и при выборе для загрузки той или иной ОС записывает заново Корневую Таблицу разделов на основе выбранной информации — занося в нее данные о расположении раздела выбранной операционной системы.

Рис. 26.2. SyMon. Выбирайте, что загружать.

— А как же остальные разделы? Они что — будут недоступны из-под загруженной с помощью SyMon'а ОС?

— Ну, три раздела можно указать для загрузки вместе с выбранной ОС при настройке SyMon — в Корневой Таблице разделов ведь четыре места, вот SyMon и заполнит их информацией о размещении указанных вами при настройке SyMon'а для запускаемой ОС разделов. А для работы с остальными на сайте разрабочиков есть специальная утилита (пока — только версии для DOS/Windows9х и QNX), которая запускается из среды запущенной операционной системы и предоставляет доступ к остальным разделам, считывая информацию о них из базы данных SyMon'а.

— Где же располагается этот SyMon? И где хранится его база данных — на самом диске или как?

— Располагается он на «нулевой» дорожке диска, которая согласно стандартам IBM PC не используется для хранения информации. На этой дорожке и хранится база данных SyMon'а. Код начальной загрузки SyMon'а размещается в Главной Загрузочной записи, и именно он вызывается BIOS'ом после тестирования компьютера. Код начальной загрузки вызывает основную часть кода SyMon'а, размещающуюся за Главной Загрузочной записью на той же «нулевой» дорожке, которая уже работает с базой данных по установленным ОС и разделам и компонует Корневую Таблицу разделов.

— Хм, а если я загружусь с дискеты, то что я смогу увидеть на диске?

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

В составе SyMon'а есть несколько "вспомогательных инструментов", например, Редактор разделов — некий продвинутый аналог fdisk, с помощью которого можно создавать и удалять разделы. Подробнее о возможностях SyMon вы можете прочесть в его документации на сайте http://symon.h1.ru.

— Стоп, такой вопрос. Если я удалю этот SyMon, то куда денется информация о моих, скажем, 25 разделах?

— Увы, чудес не будет — для всех разделов, за исключением четырех, она окажется удаленной. Ведь стандартная Корневая Таблица разделов больше не вместит.

— Интересно… А можно ли как-нибудь попробовать возможности SyMon'а без его установки — есть ли нечто вроде "демонстрационного режима" или нет?

— Представьте себе, есть. SyMon может запускаться с дискеты и предоставлять те же возможности, что и при размещении на жестком диске. Вы сможете ознакомиться с его функциями и вспомогательными инструментами.

7.

— Слушаю я тут вас… По большому счету, мне не так уж и нравится стандартная структура жесткого диска — эта Таблица разделов, Дополнительный раздел с цепочкой болтающихся дисков и т. д. А нельзя ли вообще отказаться от стандартов IBM PC, чтобы не было ни Таблицы разделов, ни Загрузочных записей и сделать компьютер с жестким диском, устроенным на совсем других принципах?

— Можно — почему бы нет? Разработайте новую операционную систему, не использующую Таблицу разделов, файловые системы и т. д. — и вперед. Помните лишь, что BIOS после прохождения этапа начальной загрузки ищет в первом секторе жесткого диска программу Главной Загрузочной записи и ее запускает, так что вам придется предусмотреть, чтобы в этом первом секторе располагалась именно программа для дальнейшего запуска вашей ОС. А остальное — на ваше усмотрение. Но учтите, что такая операционная система будет полностью несовместима с имеющимися, так что вам придется продумать немало вопросов…

— Да, это задача не для одного человека…

— И не одного года.

8.

— Я использую Windows95, но в последнее время заинтересовался новыми возможностями, которые предоставляет операционная система Windows 2000. Могу ли я как-нибудь установить ее в дополнение к Windows95 так, чтобы моя основная операционная система не пострадала? Компьютер удовлетворяет системным требованиям Windows 2000.

— Да, разумеется. Вы можете установить Windows 2000 в дополнение к вашей основной операционной системе на любой другой логический диск или даже на тот же, где уже установлена Windows95. Просто запускайте установщик и инсталлируйте.

Помните, что если вы установите Windows 2000 и Windows95 на один и тот же логический диск (естественно, в разные каталоги — иначе это будет обновление Windows95 до Windows 2000, а не совместная установка), то могут начаться конфликты программного обеспечения из-за общей папки Program Files. Также помните, что Windows95 не может читать разделы с файловой системой NTFS без специальных программ-драйверов (их можно взять с www.sysinternals.com, но они могут работать лишь после запуска самой Windows или хотя бы MS-DOS), так что конвертировать в NTFS логический диск, на котором установлена эта ОС, нельзя (тот, на который вы установите Windows 2000 — можно: загрузчик Windows 2000 сумеет загрузить с него основные файлы операционной системы). Так что не беспокойтесь за сохранность ваших данных и вашей основной ОС.

Настроить функцию множественной загрузки компьютера вы можете в диалоговом окне "Панель управления — Система — Дополнительно — Загрузка и восстановление" (рис. 26.3). В выпадающем меню вы можете выбрать операционную систему, загружающуюся по умолчанию, и время демонстрации этого меню на экране. Параметры загрузки записаны в текстовом файле boot.ini того раздела, на котором находится загрузчик Windows 2000 (т. е. диска С:), однако его синтаксис довольно сложен, так что через диалоговое окно с ним работать проще.

Рис. 26.3. Здесь настраиваются параметры множественной загрузки в Windows 2000.

— А как сделать так, чтобы настройки у Windows 2000 и Windows95 были одинаковыми? То есть, скажем, чтобы Рабочим столом и в той, и в другой операционной системе была бы одна и та же папка, чтобы «Избранное» в Internet Explorer'ах было одинаковым?

— Соответственно настроив обе операционные системы. Скажем, в Windows95 папка с содержимым Рабочего стола находится в каталоге Windows и так и называется — "Рабочий стол", там же располагается и «Избранное». В Windows 2000 данные пользователей, в том числе и содержимое "Рабочих столов", «Избранного» по умолчанию размещены в подкаталогах папки "Documents and Settings" корневого каталога того логического диска, на который эта ОС установлена. В подкаталоге "All Users" находятся данные, используемые всеми пользователями, а папках с именами зарегистрированных в Windows 2000 пользователей (например, "Администратор") — персональные данные. При запуске Windows 2000 данные папок "All Users" и пользовательской обьединяются. (В папке "Default User" располагаются данные, помещаемые в личные папки всех новых пользователей.)

Если вы хотите, чтобы "Рабочий стол", «Избранное» для обеих операционных систем были одинаковыми, то сделайте, например, так. В Windows95 перетащите в «Проводнике» папки "Рабочий стол" и «Избранное» в какое-нибудь другое место (в принципе этого можно и не делать — однако тогда есть большой риск потери их данных при переустановке этой Windows). Операционная система отследит перетаскивание и соответственно изменит пути к этим папкам в реестре. Можете заодно заменить "Рабочий стол" на более короткое имя. Затем, перезагрузившись в Windows 2000, войдите в вышеупомянутый каталог с данными всех пользователей (т. е. "All Users") или лично вашими (т. е. с именем вашей учетной записи) и перетащите соответствующие папки (т. е. "Рабочий стол" и "Избранное") в ту же папку, что и "Рабочий стол" с «Избранным» из Windows 95, согласившись на замену файлов (если вы опасаетесь так делать, то предварительно переименуйте папки, перетащенные в Windows 95, а затем переместите все файлы из них в новоперемещенные папки). Если имена перетаскиваемых папок с данными почему-либо отличаются от имен папок из Windows 95, то переименуйте перетащенные папки (конкретнее — запоминаете имя папки из Windows 95, переименовываете ее произвольным именем, переименовываете перетащенную в Windows 2000 папку запомненным именем и перемещаете в нее содержимое папки из старой Windows). Обьяснять сложнее, чем сделать — в общем, просто добейтесь путем перетаскивания в «Проводнике» тождества папок "Рабочий стол" и «Избранное» для обеих ОС. Настройте в Internet Explorer одинаковое местоположение папок временных файлов…

— Ладно, понятно. Как-нибудь разберусь — у меня есть программы для тонкой настройки ОС, в них можно пути к системным папкам задавать непосредственно, лучше я с ними поработаю.

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

— Да, и еще. Если я отконвертирую раздел с Windows 2000 в NTFS, то при крахе системы мне придется распрощаться со всеми данными на нем? Можно ли этого избежать?

— Ну, с данными вы можете и не распрощаться — на сайте www.sysinternals.com имеется программа, которая предоставляет доступ к данным на NTFS-разделах из Windows9x и DOS — NTFS File System Driver (кстати, без учета прав доступа!). Хотя лучше всего предусмотреть такой вариант заранее и установить на загрузочный диск мини-копию Windows 2000 без графического интерфейса, но с возможностью восстановления системы — Recovery Console. Чтобы ее инсталлировать, нужно ввести команду winnt32.exe /cmdcons в окне сеанса DOS, находясь в директории i386 дистрибутива Windows. Recovery Console занимает всего 8 мегабайт и при выполнении указанной команды помещает пункт своего вызова в меню загрузчика Windows 2000. Впрочем, Recovery Console можно вызвать и при загрузке с дистрибутивного компакт-диска Windows 2000.

9.

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

— Да, можете. Существуют программы — "эмуляторы компьютера", которые позволяют запускать одну операционную систему и программы для нее в среде другой. Но есть программа Bochs, доступная с адреса http://bochs.sourceforge.net. Этот эмулятор компьютера в основном предназначен для работы под Linux и Unix, но на сайте разработчиков имеется версия и для Windows. С помощью Bochs вы сможете запустить полноценную Linux, Unix, Windows, QNX или другую ОС в окне Windows и работать с ней и ее приложениями.

— А как это возможно? Куда устанавливается новая ОС при использовании Bochs?

— В особый файл в папке с Bochs, являющийся образом жесткого диска, на котором эта ОС установлена. В этом файле эмулируется файловая система нужной ОС, размещаются ее компоненты. Доступ к содержимому жестких дисков, дисководам компакт-дисков компьютера тоже возможен, хоть и не для всех эмулируемых операционных систем. В дистрибутиве Bochs для Windows, доступном для скачивания, есть пример — операционная система DlxLinux. Сразу после загрузки программы вы получите возможность познакомиться с Linux, загрузив ее в эмуляторе. С сайта http://bochs.sourceforge.net вы также можете загрузить готовые образы дисков для некоторых операционных систем, например, QNX. Так что для того, чтобы познакомиться с какой-нибудь ОС, фактически не устанавливая ее на компьютер, Bochs будет весьма полезен.

К сожалению, работа с Bochs несколько нетривиальна (особенно самостоятельное создание образов дисков с операционными системами), к тому же не все вопросы освещены в документации. Впрочем, на сайте разработчиков есть Форум для пользователей, а также различные описания работы программы. Стоит также помнить, что изначально Bochs делался для операционной системы Unix и лучше всего работает именно из нее. Программа довольно интенсивно развивается, тем более что ее код открыт для изучения и дополнений, так что в скором времени возможно появление новых версий, работа с которыми будет проще. Однако долговременная работа с приложениями эмулируемых операционных систем с Bochs не очень желательна — все же все данные хранятся в одном файле, да и быстродействие оставляет желать лучшего. Именно исследование других ОС без их установки — вот основная рекомендуемая функция программы.

— Нда-м, интересная программа. Для чего бы ее еще приспособить…

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

Так вот. В одном американском университете стоял компьютер, подключенный к Сети по выделенной линии. Русские программисты, работающие в этом образовательном учреждении, решили с его помощью немного повытрясти долларов из Spedia. Для этого они зарегистрировали в этой фирме 50 аккаунтов, а затем запустили на университетском компьютере 50 копий Bochs с эмуляцией Windows95 в каждой из них. В каждой копии ОС была установлена соответствующая программа от Spedia и утилита, имитирующая движения курсора, а затем компьютер был оставлен в закрытой комнате включенным в таком виде. В результате нашим мастерам "капали денежки" с 50 постоянно работающих аккаунтов на Spedia. В скором времени сумма вознаграждения достигла десяти тысяч долларов, чем они и удовлетворились, так как пришла пора уезжать на родину. Не знаю, дошло ли до Spedia, что с нею сделали, однако я больше не слышал, чтобы кто-нибудь еще использовал подобную технологию для вытряхивания денег из американских буржуев.

— Ух ты, прямо детективы какие-то!

— Вот ведь как бывает…

— А есть ли еще такие "эмуляторы компьютера"?

— Есть — поищите в Сети. К примеру, одной из весьма развитых программ такого рода является VirtualPC, представленная на сайте http://www.connectix.com/products/vpc4w.html. Она позволяет эмулировать Windows в среде Windows, то есть запускать, например, Windows ME из среды Windows 2000. Помимо Windows, VirtualPC может эмулировать DOS, Linux и MacOS. Демонстрационную версию программы можно загрузить с адреса http://preview.connectix.com/trial/downloads/VPC_Trial.exe (18 мегабайт), а регистрационные ключи взять на сайте http://www.cracks.am. Для запуска Unix в среде Windows NT есть программа OpenNT (http://www.softway.com/OpenNT).

В некоторых дистрибутивах Linux имеется эмулятор MS-DOS и Windows, позволяющий работать с Windows-приложениями, хотя и с весьма серьезной потерей производительности. Программа vmware (небесплатная, но есть некоммерческий аналог — freemware), предназначенная для запуска в среде Linux, также дает возможность работать с ОС Windows (любой), а также с FreeBSD, BeOS и даже другими версиями Linux и Unix. В общем — ищите, спрашивайте…

Кстати, некоторые операционные системы могут устанавливаться в файл на FAT и запускаться из Windows как обычные программы. Например, демонстрационная версия BeOS делает именно так — после ее установки на жестком диске создается большой файл, который внутри содержит образ раздела с файловой системой BeOS и ее системные файлы. Определенные разновидности Linux также могут размещаться на FAT — в этом случае она, как и BeOS, размещается в одном большом файле, внутри которого воспроизводится структура раздела с Linux (загрузка такой ОС все-таки выполняется через загрузочное меню, т. е. так же, как и той же Linux, установленной "по правилам" — в свой раздел, так что это не ваш случай). Однако подобную установку — в файл — можно использовать только в обучающих целях, для изучения возможностей и особенностей других операционных систем, так как надежность ОС, установленной в файл-образ, будет крайне низкая — при повреждении хоть одного кластера весь файл может быть разрушен и все данные в нем потеряны.

10.

— Скажите, пожалуйста, а могу ли я как-нибудь поставить на свой компьютер операционную систему MacOS?

— Непосредственно — нет.

— Но почему?

— Ну, начнем с того, что принципы организации работы памяти, процессора, устройств у компьютеров фирмы Apple другие. MacOS просто не заработает на вашем компьютере, не сможет загрузиться. Кроме того, BIOS и структура жесткого диска у Макинтошей серьезно отличается от аналогичных на IBM PC, так что если даже вы каким-нибудь образом скопируете «макинтошевский» жесткий диск на винчестер вашего компьютера, то его BIOS просто не найдет Master Boot Record на своем месте. MacOS в принципе можно переписать так, чтобы она работала на IBM PC (т. е. "портировать"), но, согласитесь, это уже будет не совсем MacOS, да и труда на это потребуется немало…

— Но мне очень хочется поработать на своем компьютере как на Макинтоше! Как-нибудь я могу это сделать?

— Вы можете воспользоваться эмуляторами MacOS, например, уже упомянутой программой VirtualPC.

11.

— Здравствуйте. Я желаю поставить на свой компьютер Linux. Как мне это сделать и есть ли какие-нибудь "подводные камни"?

— А вам нужна эта операционная система как основная или как дополнительная?

— Сначала — как дополнительная, а когда освою — хотелось бы сделать ее основной.

— А жесткий диск у вас разбит на сколько разделов?

— Когда я его разбивал изначально, то я специально зарезервировал место для Linux, оставив неразмеченным пять гигабайт.

— Это вы сделали правильно. Иначе сначала вам пришлось бы поработать с Partition Magic для выделения Linux'у места. Ну, или если бы вы выбрали для инсталляции Linux Mandrake 7.0 — с встроенным в нее менеджером разделов.

Для установки возьмите современный дистрибутив Linux — Linux Mandrake 8.x (http://www.linux-mandrake.com), отечественные AltLinux (http://www.altlinux.ru) или AspLinux (http://www.asplinux.ru) и запускайте инсталлятор. Процесс установки у каждого из дистрибутивов различается, однако некоторые шаги присутствовать будут обязательно. Так, вам придется выделить раздел для Linux средствами программы fdisk (для Linux) или другого менеджера разделов, входящего в дистрибутив Linux. В процессе инсталляции вам обязательно будет задан вопрос, куда ставить LiLo — загрузчик Linux. Если вы работаете только с Windows 95, то выберите Master Boot Record — Главную загрузочную запись, тогда при загрузке вы сможете выбирать ОС, в которой вы хотите работать.

— А если с Windows 2000?

— Можете сделать так же и для выбора загружаемой операционной системы использовать именно LiLo, но тогда в том случае, если вы сохраните Windows 95 при установке Windows 2000, вам придется дважды делать выбор ОС — в LiLo и в загрузчике Windows 2000. В последнем случае удобнее использовать загрузчик Windows 2000. Для этого при инсталляции Linux'а укажите, что LiLo следует разместить в первом секторе раздела с Linux (т. е. чтобы он загружался лишь в том случае, если в Корневой Таблице разделов раздел с Linux был бы отмечен как активный), а затем скопируйте этот первый сектор раздела с Linux на дискету с FAT12 (к примеру, командой "dd if=/dev/hdaxx of=/mnt/floppy/имя_файла bs=512 count=1", где hdaxx — раздел, на котором установлена Linux). После этого скопируйте полученный файл в корневой каталог раздела с загрузчиком Windows 2000 (т. е. попросту на диск С) и добавьте в файл boot.ini строку C: \имя_файла_с_первым_сектором="Загрузка Linux".

— А что это за наименование — hdaxx? Что оно означает?

— В Linux используется свой способ именования разделов установленных жестких дисков и выделенных на них разделов. Так, жесткий диск, подключенный как Master, именуется hda, подключенный как slave — hdb, так же — hdb — именуется CD-ROM, если на компьютере установлен лишь один жесткий диск — hda (т. е. буквы a, b, c физическим устройствам — дискам — назначаются в порядке их подключения. Соответственно и разделы на них именуются путем прибавления к имени диска его номера по счету в Корневой Таблице разделов — первый будет называться hda1, второй — hda2 и т. д. Так как в Linux каждое устройство — и раздел диска, и видеокарта, и порты — представляются как файлы, с которыми можно что-нибудь делать, то все они размещены в каталоге /dev (подкаталоге корневого каталога). Соответственно и обращение к ним ведется с именем каталога — /dev/hda3, /dev/fd0.

— Но смогу ли я получить из Linux'а доступ к дискам, отформатированным мною из Windows?

— Да, сможете, но вам будет сначала необходимо произвести действие, именуемое "монтированием".

— Это что еще за зверь такой?

— Монтирование файловой системы — мероприятие, выполняемое операционной системой над разделом для того, чтобы эта операционная система могла считывать и записывать его содержимое. При монтировании раздела операционная система считывает из Корневой Таблицы разделов данные о границах этого раздела и о типе файловой системы на нем, а затем вызывает программы-драйвера для работы с данной файловой системой.

— Почему же в Windows нет монтирования?

— Почему нет — есть, как же иначе Windows работала бы с дисками? Только здесь монтирование производится в процессе загрузки автоматически.

Файловая система Linux, вообще говоря, довольно сильно отличается от аналогичной в Windows. Когда мы открываем Проводник, что мы видим? Логические диски С, D, компакт-диски. Системные файлы располагаются в одном из каталогов какого-нибудь диска, может быть, и D, и E — куда установишь… А после загрузки Linux доступен корневой каталог загрузочного диска, в котором находятся различные системные файлы. К этому каталогу можно «примонтировать» разделы диска — при этом операционная система с помощью программ-драйверов считает структуру каталогов монтируемого диска (или просто список файлов, если его файловая система не поддерживает организацию каталогов) и отобразит ее как набор подкаталогов того каталога, куда произведено монтирование (этот каталог еще называется "точкой монтирования"). Звучит сложно, но если прелставить — все ясно. Иными словами, в Linux нет понятия "логических дисков" — каждый раздел при монтировании органично вливается в имеющуюся файловую систему, становясь одним из ее подкаталогов. Кроме того, набор подкаталогов в корневом каталоге достаточно сильно фиксирован, так как только там могут располагаться системные файлы.

При работе с современными вариантами Linux монтирование имеющихся разделов с ext2fs происходит автоматически при загрузке ОС. Файловые системы компакт-дисков и дискет монтируются при первой попытке доступа к ним также в автоматическом режиме. (Однако механизм этого монтирования несколько отличается от аналогичного в Windows, поэтому, в частности, нельзя "без спросу" вынимать дискеты и компакт-диски из устройств: надо дать вначале системе их размонтировать, иначе на них могут возникнуть ошибки файловой системы — наподобие тех, что возникают на разделах FAT при выходе из Windows кнопкой Reset или выключением питания без использования меню "Завершение работы".)

Кстати, в Windows 2000 при использовании файловой системы NTFS есть возможность смонтировать один раздел на другой, осуществив тем самым как бы их «слияние». При таком действии логический диск становится как бы «каталогом» другого диска, и при входе в такой каталог происходит автоматический переход в корневой каталог этого присоединенного диска. Тем самым можно представить весь жесткий диск как один большой логический — независимо от реального наличия и количества логических дисков.

— Но все-таки — как смонтировать раздел FAT в Linux'е?

— Ну, во-первых, при инсталляции Linux, в процессе выделения Linux'у разделов, можно указать "точку монтирования" имеющимся разделам с файловой системой FAT. Тогда вообще больше никаких действий производить не придется — разделы будут монтироваться автоматически. Если данная процедура при инсталляции Linux произведена не была, то откорректируйте файл /etc/fstab (это как раз список автоматически монтируемых разделов) — добавьте туда строчку "/dev/hdaxx /mnt/win auto defaults 0 0", где /dev/hdaxx — монтируемый раздел (т. е. с номером xx), /mnt/win — точка монтирования. При следующей перезагрузке указанный раздел смонтируется автоматически. Если на разделе установлена файловая система NTFS, то вместо параметра auto поставьте параметр ntfs.

— А диски с файловой системой ext2fs можно как-нибудь прочитать из-под Windows?

— С помощью специальных программ. Например, Ext2Viewer, которую можно загрузить с сайта http://ext2viewer.nm.ru. Она имеет русский интерфейс и сама ищет и монтирует разделы с ext2fs, после чего информацию с них можно свободно копировать.

— А записывать?

— Нет, записывать нельзя. Посмотрите программы Explore2fs (http://uranus.it.swin.edu.au/~jn/linux/explore2fs.htm), Paragon Ext2FS Anywhere (http://www.partition-manager.com/n_ext2fs_main.htm) — они, как заявляют разработчики, могут и записывать информацию на разделы с файловой системой ext2fs.

— Но любые ли диски, используемые в Windows, можно смонтировать в Linux?

— То есть — с любой ли файловой системой? Да — современные дистрибутивы Linux поддерживают FAT12, FAT16, FAT32 и даже NTFS в режиме чтения. Для записи на разделы с NTFS есть отдельные специальные программы. Но я вам советую — если вы хотите работать с одними и теми же файлами и из Linux, и из Windows (ясно, что это файлы данных — программы для этих ОС полностью несовместимы), то выделите для них отдельный раздел с файловой системой FAT16. Технически это делается так: сначала из Linux программой fdisk создается на свободном месте раздел с FAT16 и монтируется в какое-либо место файловой системы. Затем загружается DOS и с помощью fdisk для DOS новосозданный раздел удаляется (т. к. Linux записывает его параметры не очень корректно — поэтому он будет отображаться в fdisk для DOS как "не-DOS раздел"), а затем на его месте создается такой же раздел заново.

— Кстати, насколько я помню, при своей переустановке Windows переписывает Главную Загрузочную запись. Если я буду использовать только Windows95 и поставлю Lilo именно туда, то как мне потом ее восстанавливать после очередной переустановки Windows?

— Возьмите "спасательный диск" Linux, создаваемый при установке этой операционной системы, загрузитесь с него, введите команды root=раздел Linux (т. е. /dev/hda4, к примеру) и «lilo» — Linux Loader перезапишется. «Образ» спасательной дискеты обычно имеется на компакт-диске с дистрибутивом Linux, а перенести его на флоппи-диск можно утилитой rawrite.exe, работающей под MS-DOS.

— Не могли бы посоветовать какие-нибудь сетевые ресурсы по обсуждаемой теме?

— Посетите сайт http://www.linuxrsp.ru — там вы наверняка найдете ответ на любой интересующий вас вопрос, а если нет, то сможете его задать специалистам по Linux. Об установке Linux вместе с другими ОС на один компьютер вкратце, но очень полно рассказал Денис Колесниченко на своем сайте http://www.dhsilabs.narod.ru (или http://www.linuxrsp.ru/artic/many_os.html). Сайтов, посвященных Linux, много — например, http://www.linux.org.ru, http://linux-ve.chat.ru, http://www.nevod.ru/linux/doc и т. д.

Norton Ghost

Предназначение программы Norton Ghost — архивирование или копирование логических дисков или всего винчестера. Соответственно и области применения у нее две — архивирование данных и массовая установка операционных систем на несколько компьютеров.

Если вы часто устанавливаете новые программы, занимаетесь созданием приложений для Windows, то наверняка вам нередко приходилось переустанавливать операционную систему из-за сбоев. И каждый раз на это уходила масса времени: ведь помимо собственно инсталлирования операционной системы каждый раз следовало еще и установить заново все программы, восстановить настройки системы… А при использовании Norton Ghost полное восстановление операционной системы займет минут 10–15, а то и меньше.

Если после установки операционной системы и всех необходимых программ с помощью Norton Ghost создать архив того логического диска, куда эта установка производилась, то при «крахе» операционной системы будет достаточно лишь загрузить MS-DOS с загрузочной дискеты и, запустив Norton Ghost, восстановить содержимое логического диска с ОС из архива. Никакие ошибки в реестре, вирусы, испорченные файлы и другие проблемы совершенно не повлияют на качество восстановления — копирование происходит по секторам диска и полностью уничтожает все, что было на нем ранее.

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

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

Работает Norton Ghost под MS-DOS. Запуск программы из Windows возможен, однако доступной будет лишь функция архивирования разделов.

Сайт программы — http://www.symantec.com/sabu/ghost.

Глава 27. Тайны Word'овых глубин

"Ну вот. Опять пишут про этот Word для всяких там ламеров. Да все уже знаем про него, неужели больше не о чем писать?" — наверняка подумали вы, глядя на заголовок этой главы. Что ни говори, в России Microsoft Word — программа известная, едва ли не самая: и под все платформы реализована, и практически бесплатная… Но неужто вы все-все знаете про него? Word — этот как большой город: некоторые улицы, особенно центральные, известны всем, некоторые — подальше от центра — многим, а на задворки вообще обычно почти никто не заглядывает. А ведь там зачастую встречаются весьма и весьма интересные штучки. Именно им и посвящена данная глава.

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

Итак — пройдемся по закоулкам. Все перечисленное ниже верно для всех версий Microsoft Word — от 97 до 2002, если не указано обратное.

1. Третий день идет долгая и трудная работа по написанию многотомного труда. Каждый день, садясь с утра за компьютер или открывая Word после очередной перезагрузки, приходится мучительно долго искать место, где остановился в последний раз. Тогда, когда идет уже не собственно создание книги или диссертации, а ее редактирование, поиск может превратиться в весьма сложную задачу, причем настолько, что многие пользователи Word'а пишут специальные макросы для облегчения этого процесса. Принцип макросов-то прост — ставят автоматически закладку в место курсора при закрытии документа, а при открытии — к ней переходят. Или другая ситуация — работаешь, работаешь и вдруг вместо Ctrl+Del нажимаешь Ctrl+End и летишь в конец документа. Опять долго и упорно разыскивать место, где был последний раз, что ли?

Но мало кто знает, что для решения всех этих проблем не надо ни макросов, ни поисков — в Word есть прекрасная команда "Последнее исправление". Где ее найти, будет рассказано ниже, а вызвать ее можно комбинацией клавиш Shift+F5. Она мигом доставит вас в ту точку документа, где было произведено его последнее изменение. И не надо никаких макросов и закладок.

2. Нажав клавишу PageDown, можно прокрутить документ в окне Word'а на целый экран. С помощью клавиши F5 можно вызвать диалоговое окно, с помощью которого путешествовать по страницам, ссылкам, таблицам, рисункам. Но… все же, как это неудобно! Вызывать окно, которое в любом случае часть документа заслоняет, закрывать его потом и снова вызывать… Многовато забот! И мало кто знает, что в Word функции этого окна доступны из маленькой кнопочки с нарисованным шариком внизу справа под полосой прокрутки (рис. 27.1).

Рис. 27.1. Задайте нужный режим перемещений — и двигайтесь по документу одним кликом мыши.

Нажав на эту кнопку, можно из всплывшего окна выбрать единицы расстояния, на которое хочется перемещаться, — такие же, как и в окне «Перейти». Сам переход осуществляется путем кликов на двойные стрелочки, глядящие вверх и вниз по обе стороны кнопки. Куда как удобнее стандартного окна… Его, кстати, тоже можно из всплывающего окошка вызвать, если так уж хочется.

3. Если вы работаете с большим количеством документов, загруженных в Word, постоянно изменяя многие из них, но вполне может возникнуть ситуация, что вам, скажем, надо срочно отойти от компьютера. Естественно, есть опасения, что в случае, когда наступит сбой в электропитании или иная неприятная ситуация, может произойти потеря несохраненных данных. Но как сохранить все документы? По одному — но их много, и время уйдет немало. Закрыть Word и посохранять все по очереди? Тоже не быстро. Лучше нажмите Shift и кликните мышью на меню Файл — вы увидите там новый пункт меню: Закрыть все, который и следует выбрать в такой ситуации.

4. Когда документ сложноформатированный, в нем много разнооформленных абзацев, то ориентироваться в их свойствах становится трудно. Если нужно узнать, какие отступы у того или иного фрагмента текста, то приходится лезть в диалог их задания. Но можно еще просто нажать Shift+F1 — и тогда, кликнув на каком-нибудь фрагменте текста, можно получить исчерпывающую информацию о его характеристиках.

Если же, нажав Shift+F1, кликнуть на какой-нибудь кнопке или команде из меню, то появится краткая справка о ее назначении (рис. 27.2). Опытные пользователи Word'а, конечно, все эти назначения знают, но это сочетание клавиш можно показать неопытному пользователю и таким образом избавиться от массы простых вопросов с его стороны.

Рис. 27.2. Учебник по Word — всегда под рукой. Shift+F1+клик на кнопке.

5. Наверняка, читая предыдущие строки, хотелось сказать: а неужели в Microsoft Word нет хотя бы списка всех этих многочисленных "скрытых команд"? Ну отчего же нет — есть. Только до него надо добираться. В меню «Сервис» выберите «Настройка». Вам откроется окно настроек панелей. Выберите в нем вторую вкладку — «Команды», а в левом столбце — пункт "Все команды" (рис. 27.3).

Рис. 27.3. А вот и список всех команд Word. И известных, и неизвестных.

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

Чтобы выяснить, какая команда что делает, можно поступить несколькими способами. Во-первых, просто перетаскивать имена заинтересовавших команд на какую-нибудь панель, выходить из окна настроек и пробовать эти команды, наблюдая, какие изменения каждая команда выполняет. Можно использовать кнопку «Описание» внизу слева окна настроек и читать справку по каждой команде. А если хочется быстро просмотреть краткие пояснения о назначении каждой команды, то откройте окно настройки сочетаний клавиш (кнопка «Клавиатура» внизу справа окна настроек) и, выделяя каждую команду, читайте под списком команд интересующую вас информацию (рис. 27.4).

Рис. 27.4.Прочитайте здесь краткую справку по каждой команде. Заодно и назначьте комбинацию клавиш понравившимся командам.

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

AllCaps — "Все заглавные/все прописные", ChangeCase — "Изменить регистр" — команды, весьма иногда полезные. Если приходится приводить в нормальный вид текст, набранный с широким использованием выделения заглавными буквами (никогда так не делайте — и читается плохо, и редактировать трудно, да и вообще — признак плохого тона), то диалог изменения регистра приходится вызывать весьма часто. Не слишком-то это и приятно — постоянно мышью вверх-вниз двигать. Лучше уж назначить этим командам сочетания клавиш.

AutoScroll — команда, которая может оказаться весьма полезной тем, у кого нет мышки с колесиком для прокрутки текста. Обычно эта команда вызывается автоматически при нажатии на это самое колесико — но для этого нужна такая мышь. Если ее вызвать, то курсор окажется прикрепленным к вертикальной полосе прокрутки, и при его смещении от середины этой полосы вверх или вниз документ будет автоматически прокручиваться в соответствующем направлении.

Чем дальше от середины смещен курсор, тем быстрее «едет» документ. Помимо удобства при поиске нужного фрагмента документа эта команда еще очень удобна при простом чтении текста — сместил курсор от середины чуть-чуть, и Word за тебя даже страницы перелистывает, а ты просто сиди и гляди на экран!

CharScale. Это — команда «растягивания» текста по горизонтали. Она может часто использоваться при изготовлении печатных изданий, когда надо «вписать» текст в страницу или в колонку. Команда имеет свою кнопку, которую можно поместить на любую панель.

Аналогичную функцию выполняет пункт «Масштаб» вкладки «Интервал» диалогового окна "Параметры шрифта". Но не правда ли, использовать кнопку удобнее? В Интернете даже встречаются макросы, программно делающие то, что делает эта команда, уже встроенная в Word.

ColumnSelect — выделяет прямоугольный блок текста, причем его границы могут проходить и внутри страницы. То же самое можно сделать, двигая мышью при нажатой клавише Alt. Зачем? — спросите вы. Например, для выделения одного столбца таблицы, сделанной в MS-DOS с помощью символов табуляции и пробелов. Выделив столбец, его можно скопировать в другое место и впоследствии работать с его текстом.

DecreaseIndent иIncreaseIndent — управляют отступами от текста до левого края страницы. Чем двигать мышью бегунки на верхней линейке, может, удобнее использовать эти команды?

DottedUnderline — подчеркивание пунктиром. DoubleUnderline — двойное подчеркивание. Иногда требуется именно такое выделение.

GrowFont, GrowFontOnePoint, ShrinkFont, ShrinkFontOnePoint — это функции, которые так нужны некоторым пользователям Word, что для выполнения их функций они даже пишут специальные сложные макросы. А ведь писать их не надо — все уже в Word'е есть! Увеличить размер шрифта выделенного фрагмента на один-два пункта — просто, если размер всех букв в этом фрагменте одинаков. А если нет? Если часть — скажем, заголовки — на два пункта уже больше остальных? Простое присвоение шрифту фрагмента определенного значения размера полностью сотрет все различия в размерах, что часто совсем не нужно. Эти же команды предназначены именно для равномерного изменения размеров всех шрифтов, входящих в выделение. Иными словами, размер каждого символа, вне зависимости от первоначального изменится на одинаковое количество пунктов. GrowFont — увеличивают размер, ShrinkFont — уменьшают. Быстро и удобно.

Spike. В переводе с английского это слово означает — «копилка». И это действительно копилка — некий обьект внутри Word'а, в который можно складывать различные вещи. Ну, вещи-то вполне определенные — фрагменты текста. Как в любой копилке, то, что складывается в нее, сохраняется, а новое, попадающее в нее, просто прибавляется к уже имеющемуся. То есть вы можете собрать со всего документа нужные куски текста без постоянных перемещений и копирования-вставки — просто собирайте в «Копилку» эти фрагменты, а потом, перейдя на нужное место, выполните команду InsertSpike. Это — как бы большой буфер обмена.

К примеру, в документе есть двадцать фрагментов какого-либо повествования. Вы хотите собрать их в одно место и вставить в другой документ. С помощью «Копилки» это будет очень легко — двигайтесь по тексту сверху вниз и собирайте фрагменты. В «Копилке» текст будет накапливаться — фрагменты расположатся в ней один за другим. Потом нажмите "Добавить копилку", и весь собранный текст поместится туда, где стоит курсор. Только следует помнить две вещи: во-первых, текст при помещении в «Копилку» удаляется — скопируйте его в буфер обмена перед тем, как кидать в нее, а, во-вторых, при «выкидывании» текста из «Копилки» она очищается — скопируйте в буфер обмена то, что вставится из копилки, если хотите еще куда-нибудь это вставить.

ListCommands — команда, в чем-то могущая заменить данную статью. Она выводит в отдельный документ список всех команд Word, имена которых помещены в окно "Все команды", которое сейчас и рассматривается. К сожалению, их описания в список не включаются, но зато включаются сочетания клавиш, назначенные им. Можно также вывести только те команды, которым назначено хотя бы одно сочетание клавиш.

MicrosoftSystemInfo — выводит "Информацию о системе", программу фирмы Microsoft. То же можно получить, нажав кнопку "О системе" в окне Word «Справка» — "О программе".

SelectCurColor, SelectCurFont, SelectCurIndent и SelectCurSpacing — выделение по цвету шрифта, шрифту, отступу и выравниванию соответственно. Выделяет текст от позиции курсора до изменения указанного параметра. Скажем, SelectCurColor выделит текст от курсора до первой буквы другого цвета. Если назначить этим командам комбинации клавиш, то можно в какой-то степени упростить процесс выделения текста при редактировании.

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

ToolsCalculate — встроенный в Word калькулятор. Считает только четыре действия, но обычно и этого хватает. Выделите текст и вызовите эту функцию (рис. 27.5). В буфер обмена и в статусную строку будет помещен результат вычисления. Причем Word посчитает результат выражения, даже если цифры и знаки разделены буквами — скажем, являются частью предложения.

Рис. 27.5.Калькулятор, встроенный в Word. Жаль, слова не понимает.

WindowList — нечто вроде "менеджера задач" для Word. Эта команда вызывает диалог "Переход в окно" (рис. 27.6), с помощью которого можно перейти к редактированию нужного документа. Этот же диалог вызывается пунктом "Другие окна" меню «Окно», который появляется в этом меню, когда число открытых документов превышает десять. Несмотря на то, что эта функция в Word вроде бы находится на достаточно заметном месте, "менеджер задач" для Word неоднократно реализовывался программно, с помощью макросов, и до сих пор на просторах Сети попадаются подобные произведения. Впрочем, при работе в новых версиях Office — 2000 и XP — данное окно уже может пользователю не требоваться: Word этих версий нетрудно настроить так, чтобы для каждого документа на системной Панели задач создавалась отдельная кнопка.

Рис. 27.6. "Менеджер задач" для Word.

Всем вышеперечисленным командам (как, впрочем, и остальным) вы можете назначить не только кнопки на панели, но и сочетания клавиш. Не забудьте про это — иногда быстрее клавиши нажать, чем мышью до панелей добираться. Ну, а остальные пункты из списка "Все команды" вы можете исследовать самостоятельно. Может, что еще найдете.

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

7. Стандартное окно замены фрагментов текста — что может быть привычнее? И многие так и считают — привычное всегда одно и то же: один текст заменить на другой, да и все. Но это не совсем так. Кнопка "Больше…" (рис. 27.7) внизу справа окна замены открывает перед пользователем мощные возможности поиска, серьезно превосходящие стандартные. Удивительно, но многие пользователи Word, с которыми, в частности, мне доводилось беседовать, не знают о них!

Рис. 27.7. Откройте для себя новые возможности старого знакомого окна — нажмите кнопку "Больше…".

Справа внизу в окне, распахнувшемся после нажатия кнопки «Больше», есть кнопка "Специальные символы". Они позволяют задать в условиях поиска и замены символы конца абзаца, разрыва страницы или строки, символы табуляции и др. Если вам нужно провести замены с участием именно этих символов, используйте этот список. К сожалению, там указаны не все допустимые специальные символы. К примеру, символ "^0xxx", где «ххх» — это какое-либо число, обозначает символ таблицы ASCII с кодом «ххх». Можно также заменять какой-либо текст на содержимое буфера обмена, заранее подготовленное и скопированное туда.

Кнопка «Формат», находящаяся слева от кнопки "Специальные символы", позволит вам заменять не только содержание текста, но и его оформление. К примеру, выделить во всем тексте какое-либо слово жирным шрифтом не составит труда.

Но это еще не все. В расширенном окне поиска и замены есть пункт "Подстановочные знаки" (рис. 27.8). Используя их, можно производить "нечеткий поиск" и замену, то есть, скажем, менять местами слова в словосочетаниях в тексте (скажем, вместо "Петр Иванов" везде поставить "Иванов Петр", и причем имя и фамилия могут быть в любом падеже), заменить, скажем, точку в дробях на запятую, и наоборот, оставив все остальные запятые и точки в неприкосновенности, а также многое другое.

Рис. 23.8. С помощью "подстановочных знаков" можно переделать текст так, как хочется, всего за пару минут

Если вам нужно найти или заменить один из символов, который используется для обозначения подстановочных знаков, скажем, восклицательный знак —! — то поставьте перед ним обратную косую черту — "\" (как в командной строке разделитель имен папок): "\!".

Нажав на знак вопроса вверху справа, а затем кликнув на пункте "Подстановочные знаки", вы увидите небольшую справку о назначении этого пункта. Когда вы нажмете на маленькую стрелочку внизу, вам откроется подробнейшая справка по использованию подстановочных знаков. Разберитесь с ней и поэкспериментируйте — потом не пожалеете!

7. Вам надо провести какую-либо замену не во всем тексте, а лишь в какой-то его части? Выделите эту часть и вызовите функцию замены. А вот как быть, если тот текст, в котором надо провести замену, разбросан по всему документу? Тут бы подошло многократное выделение. В WordXP такая возможность есть — достаточно при выделении нового фрагмента удерживать клавишу Ctrl, и имеющееся выделение сброшено не будет. А как быть в более старых версиях Word?

А в них можно использовать несложный прием. Выделите фрагменты, где вы желаете что-либо заменить, каким-либо цветом. Кнопка выделения цветом есть на панели «Форматирование» по умолчанию, если же вдруг ее там нет, то поместите ее на какую-либо панель из окна настроек, пункта «Формат». А потом укажите в параметрах поиска "Выделение цветом" и проводите замену. Остальной текст, не отмеченный вами, будет не тронут! Снять выделение цветом можно с помощью той же кнопки.

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

Ну, и под конец — еще один небольшой секрет.

Многим пользователям он известен, но тем, кто о нем не знает, эта информация принесет огромную пользу.

Если вы сложно форматировали какой-либо текст, назначили ему шрифт, выравнивание, отступы, межстрочные расстояния, а потом хотите так же отформатировать еще один — не лезьте сразу в диалоговые окна или настройку стилей. На панели Word «Стандартная» есть кнопка с желтой кисточкой (рис. 27.9), которая называется "Формат по образцу".

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

Рис. 27.9. "Формат по образцу" избавит вас от необходимости много раз вызывать диалоги настройки вида текста для придания нескольким фрагментам текста одинакового вида. Просто нажмите кнопку и выделяйте текст.

Приложение. Чтобы пользователю было удобнее…

В «Приложении» вы найдете рассказ о нескольких небольших программах, к сожалению, не таких уж широкоизвестных, которые могут серьезно облегчить пользователю компьютера его повседневный труд, а иногда — и помочь отдохнуть.

1. Jgtxfnrb

Небольшая программа «Опечатка», написанная Евгением Сергеевичем Голоминым, становится крайне полезна, если вдруг оказывается, что вы набираете текст, не поменяв раскладку клавиатуры — например, так, как в заголовке этой заметки. После ее запуска в трее около часов появляется иконка программы. С этого момента для перекодирования текста, набранного не в той раскладке клавиатуры, достаточно выделить его и нажать клавишу ScrollLock. Эта клавиша используется крайне редко, и назначение ей такой функции очень удобно. «Опечатка» доступна на сайте программы http://come.to/golomin, а также с адреса http://perecod.chat.ru/error.rar.

Существуют также программы, которые следят за вводом пользователя и в случае ввода однозначно несуществующих в том языке, на котором идет ввод, комбинаций символов (например, «ыфму» для русского, «lkz» для английского), автоматически переключают раскладку клавиатуры, а также перекодируют введенный неправильно текст. В основе этих программ лежат весьма большие словари, содержащие набор полученных в результате длительного анализа словарного состава языков и поиска недопустимых комбинаций. Наиболее развитой из них является Punto Switcher, доступная с адреса http://www.punto.ru. В Punto Switcher имеется возможность вводить дополнительные недопустимые сочетания или, наоборот, запрещать производить перекодировку тех или иных слов. Интерфейс программы весьма удобен.

2. EzDesk

Многие пользователи любят расставлять значки на рабочем столе в определенном порядке — так, как им удобно. Скажем, ярлыки редакторов — сверху, ссылки на свои папки — справа, а корзину — справа внизу. И как же бывает досадно, когда из-за какого-нибудь сбоя или из-за глупой «инициативы» Windows весь этот с трудом и любовью созданный порядок оказывается разрушен, а все значки аккуратно выстроены слева, при этом перемешавшись! Для Windows 2000 подобные сбои не характерны, но вот для Windows 9x… Наверняка многие с руганью и досадой в душе расставляли все вручную заново или махнули рукой и смирились с «стандартным» расположением значков.

Но существует программа, позволяющая восстановить нужное расположение значков за пару секунд и одно движение мыши — EzDesk, написанная Мелиссой Энхайен. При своем первом запуске или при желании пользователя она сохраняет в системном реестре координаты и названия иконок рабочего стола, а затем, при необходимости, позволяет восстановить их исходное расположение. Кроме того, в EzDesk есть возможность запоминать и восстанавливать расположение иконок не только на Рабочем столе, но и в отдельных папках.

Программа распространяется как Shareware, но в ее зарегистрированной версии добавлена лишь функция сохранения нескольких возможных вариантов расположения иконок на Рабочем столе и выбора желаемого варианта, а также несколько мелких особенностей. Вы можете загрузить программу EzDesk с адреса http://perecod.chat.ru/ezdesk.rar.

3. Clean System Directory

Некоторые не очень правильно написанные или старые программы для Windows при установке помещают свои библиотеки (файлы с расширением dll, в которых хранятся некоторые функции, используемые программой и вызываемые из библиотек по мере необходимости) в подкаталог System папки Windows, а при своем удалении их там оставляют. Возможно, их авторы рассчитывают на то, что эти библиотеки будут использоваться другими программами, — кто знает… Но так или иначе, в процессе работы, при установках и удалениях различных программ каталог System постепенно забивается всяческим «мусором», и его размер увеличивается до огромных цифр. Как быть? Переустановить Windows, потерев перед этим все содержимое системной папки, или восстановить раздел с операционной системой с помощью программы Norton Ghost из ранее сохраненного образа? Это, конечно, поможет, но ведь после полной переустановки придется также переустанавливать используемые программы, восстанавливать многие настройки системы, на что уйдет уйма времени и сил, а при восстановлении из образа Norton Ghost сделать то же со всеми новыми нужными программами, установленными после создания образа. Удалять различные файлы наугад? Но так нетрудно удалить и нужные библиотеки, и тогда уж точно может потребоваться переустановка операционной системы.

Гораздо лучше попробовать определить, какие библиотеки действительно необходимы каким-либо установленным программам, а какие — уже не нужны. Библиотека — это не самостоятельная программа, ее содержимым, как уже говорилось в других главах, программы просто пользуются, «вызвав» библиотеку во время своего выполнения. Но, если библиотека «вызывается», то напрашивается вполне естественное пожелание просмотреть все имеющиеся программы (и библиотеки тоже — одна библиотека может вызывать другую), составить список вызываемых ими библиотек, а затем сравнить его с содержимым папки System, выявив тем самым библиотеки, которыми не пользуется ни одна из установленных программ. Именно это и делает программа Clean System Directory, написанная Кевином Сольвеем из Австралии.

Программа сканирует жесткий диск (а может сканировать также и дискеты, и компакт-диски), производя поиск файлов, являющихся программами или библиотеками, просматривает структуру этих программ, выясняет, какими библиотеками из системного каталога они пользуются, а затем выводит список тех библиотек в папке System, которые не вызывает ни одна программа из находящихся на компьютере. Эти библиотеки можно переместить в отдельную папку и впоследствии удалить.

Сама программа ничего с диска не удаляет, предоставляя все делать пользователю. Она лишь помогает ему "убрать лишний мусор". Так что не стоит опасаться повреждения своих файлов. Однако стоит помнить, что при установке с компакт-дисков некоторых больших программ (особенно игр и мультимедийных продуктов) сама программа может не переписываться на жесткий диск, а библиотеки переписаны будут. В этом случае при попытке запуска такой программы она выдаст ошибку "Необходимая библиотека не найдена". Чтобы этого не было, после перемещения лишних библиотек в отдельную папку стоит позапускать свои игровые и мультимедийные компакт-диски с целью проверить работоспособность программ на них, переместив обратно нужные библиотеки при необходимости.

Clean System Directory можно загрузить с сайта www.ozemail.com.au /~kevsol/sware.html, а также с адреса http://perecod.chat.ru/cleansys.rar.

4. FireLog

FireLog — это программа, которая должна быть у каждого хакера и "продвинутого пользователя". Ведь она позволяет аккуратно проследить все действия программы-установщика и выяснить, какие файлы при этом были добавлены или изменены, какие ключи реестра появились или изменились… Ну, а что делать после — понятно каждому. Хотя у этой программы есть и вполне «мирное» применение — например, то же отслеживание появления ненужных или временных файлов.

Программа сделана в виде «мастера». Проходя по ряду последовательных шагов, пользователь может задать область исследования программы: то есть — какую программу устанавливать, на каких дисках отслеживать изменения, в каких системных файлах. Потом FireLog сканирует указанные диски, составляет базу данных из имен присутствующих на них файлов, делает «снимок» системного реестра и системных файлов, а затем запускает саму установочную программу. После окончания инсталляции исследование диска и системных файлов проводится опять, а затем выводит отчет об обнаруженных изменениях в системе (рис. 28.1). Теперь легко определить, какие файлы и ключи реестра должны быть удалены при деинсталляции программы.

FireLog создал Д.Дементьев, и эту программу можно загрузить с адреса http://perecod.chat.ru/firelog.rar.

Рис. 28.1. Отчет программы FireLog.

5. Просмотр процессов системы

При работе в Windows 95/98 почти каждому пользователю неоднократно приходилось прибегать к услугам диалогового окна "Завершение работы программы", вызываемому комбинацией клавиш Ctrl, Alt и Delete. Необходимость в нем возникала тогда, когда какая-нибудь программа «зависает» так, что реанимировать ее нет никакой возможности. Но, к сожалению, средства этого окна были очень ограничены и слабы, и выгрузить зависшую программу удавалось далеко не всегда. В Windows 2000 появился весьма мощный Диспетчер задач, вызываемый той же самой комбинацией, однако он, предоставляя возможность выгрузить из памяти «зависшую» или ненужную программу и просмотреть некоторые ее параметры, не показывает, например, путь к файлу программы, что может быть полезным при поиске вирусов.

Вместе с тем существуют программы сторонних производителей, которые являются аналогами Диспетчера задач из Windows 2000, однако работают и в среде Windows 9x, а, кроме того, предоставляют немало полезной информации о запущенных программах, отсутствующей в отчетах упомянутого Диспетчера задач. Например, это "Process Viewer" Игоря Ниса (рис. 28.2) или «CCTask» Алекса Расса (рис. 28.3), а также «Starter» (рис. 28.4).

Рис. 28.2. Программа Process Viewer. Видит все, что сидит в оперативной памяти.

Рис. 28.3. Программа CCTask.

Рис. 28.4. Starter. Много функций в одной оболочке.

Для удаления из памяти той или иной программы достаточно пометить нужную задачу и выбрать из контекстного меню правой кнопки мыши пункт «Kill» (для Process Viewer) или «Terminate» (для Starter'а) или нажать кнопку «Kill» в окне программы CCTask, чтобы избавить память компьютера от зависшего приложения. При работе в Windows 9x данная возможность удобнее стандартной и работает значительно надежнее и быстрее, так что описанные программы могут довольно серьезно вам помочь в том случае, если вы используете Windows 95 или Windows 98/Me.

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

Приоритет процесса — доля ресурсов системы (в частности, времени работы на процессоре), выделяемая данному процессу.

Библиотека — специальный файл (в Windows — с расширением. dll), содержащий в себе код подпрограмм, используемых другими программами. Библиотеки делаются для того, чтобы несколько программ, которым требуются одни и те же подпрограммы, могли их брать из библиотек и тем самым не содержать их в себе и быть меньшего обьема. Кроме того, библиотека может загружаться в оперативную память лишь при ее вызове из программы и тем самым не занимать ее объем, когда содержащиеся в ней функции не требуются программе.

Иногда после аварийного завершения работы какой-нибудь программы, например, Microsoft Word, работать с тем файлом, который в этот момент в ней редактировался, становится невозможно. При попытке открыть или сохранить этот файл будет выдаваться сообщение, что файл уже используется другим пользователем, удалить или переместить его будет нельзя. А все потому, что сама программа Winword выгрузилась, а один из ее процессов остался в памяти и продолжает «работать» с файлом, из-за чего операционная система и не дает возможности изменять или удалять этот файл. Чтобы избежать такой ситуации, после аварийного краха программы нажмите Ctrl+Alt+Del или вызовите какую-нибудь из описанных программ и посмотрите, не осталось ли чего лишнего в списке запущенных процессов, а затем этот «обломок» удалите.

Но возможность быстрой выгрузки программ из памяти — отнюдь не единственная функция Process Viewer, CCTask и Starter. Для "продвинутых пользователей" и программистов они предоставляют возможности по управлению процессами системы. В окнах обоих программ показывается служебная информация о процессах, отображаются пути к их исполняемым файлам. В обоих программах можно посмотреть список используемых тем или иным процессом библиотек и других программ. Кроме того, некоторые параметры можно принудительно изменить, в частности, установить какому-либо процессу нужный приоритет.

Возможность изменять приоритет процессов системы, то есть доли системных ресурсов, выделяемых каждой запущенной программе, может оказаться весьма полезной владельцам маломощных компьютеров, не позволяющих, скажем, воспроизводить музыкальные MP3-файлы с надлежащим качеством. Запустив какой-либо проигрыватель MP3-файлов и назначив ему с помощью одной из описанных программ самый высокий приоритет (24-й, Real Time) из всех возможных, можно добиться относительно устойчивого воспроизведения звука.

Программа Starter, кроме просмотра процессов системы и управления ими, также отображает список запускающихся при старте Windows программ, просматривая соответствующие разделы системного реестра (подробнее — смотрите в главе 14), а также папки «Автозагрузка» и файлов win.ini, system.ini. Эту возможность Starter'а удобно использовать в Windows 2000 и Windows 95 для управления автоматически загружающимися программами и отслеживания появления среди них лишних, которые могут быть вирусами-троянами (в Windows 98 данную задачу выполняет специальная утилита Msconfig).

К сожалению, Process Viewer не работает в Windows2000, а CCTask, выполняя свои функции в полном обьеме, не показывает зависимые модули для системных процессов, позволяя их просмотреть для остальных программ. Программа Starter без проблем функционирует в любой операционной системе семейства Windows.

CCTask можно загрузить с сайта www.cybercreek.com или с адреса http://perecod.chat.ru/cctask.rar, а Process Viewer — с сайта www.teamcti.com или с адреса http://perecod.chat.ru/prcview.rar. Сайт разработчиков Starter'а — http://codestuff.virtualave.net, а в случае его недоступности воспользуйтесь адресом http://perecod.chat.ru/starter.rar.

6. Grafula

Данная программа выполняет весьма редкую, но зачастую очень нужную функцию — она позволяет перевести в числовую форму данные, представленные в виде нарисованного или отпечатанного на бумаге графика, отсканированного и сохраненного в виде рисунка. К примеру, какой-либо прибор в качестве своих выходных данных выдал не набор цифр, а их графическое представление — график. В этом случае введение этих данных в компьютер для дальнейшей обработки становится трудной задачей, так как приходится внимательно исследовать график, измеряя и фиксируя его значения в различных точках, чтобы составить таблицу значений, которую уже можно набрать в каком-либо редакторе. Программа Grafula позволяет автоматизировать этот процесс, значительно его облегчив. Отсканировав график, можно загрузить его в Graful'у, а затем в окне программ расставить по графику точки. Для этих точек автоматически будут вычислены их координаты и записаны в таблицу, которую можно скопировать в любую другую программу (рис. 27.4, слева).

Когда график оцифрован по расставленным точкам, можно провести полную его интерпретацию в числовой форме. Для этого служит специальное окно (рис. 27.4, справа). Пользователь задает ширину шага по оси Х и границы интервала, в котором проводится анализ, а программа найдет для каждого значения Х в указанном интервале соответствующее ему на графике значение Y, «просканировав» интервал с заданным шагом.

Рис. 27.4. Grafula. Оцифровка графика.

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

Grafula была создана компанией WESiK SoftHaUs и доступна на ее сайте http://home.comset.net/inaudit.

Также ее можно загрузить с адреса http://perecod.chat.ru/grafula.rar.

7. Universe. Создай свой космос

Иногда, стремясь вырваться из бесконечных серых будней, так хочется побывать где-нибудь в необычности, в космосе или параллельном мире… Можно поставить диск ансамбля «Enigma» или открыть повесть Ле Гуин или Ефремова. Можно провести весь день за просмотром любимых фильмов про безбрежные космические дали.

А можно самому создать картины далекого космоса, так, как себе представляешь. Специально для этого была создана программа «Universe».

Коротко можно сказать о ней, что она — графический редактор, предназначенный для рисования заранее предопределенных обьектов с изменяющимися свойствами, — в данном случае звездного неба, планет, галактик. Конечно, реальное земное небо со всеми созвездиями с ее помощью не нарисуешь, для этого лучше использовать программы-планетарии,[62] но и предназначение у «Universe» совсем другое, — воплощать в жизнь ваши фантазии.

Загрузить программу «Universe» можно с сайта компании DiardSoftware со страницы http://www.diardsoftware.com/universe.htm. Программа распространяется по принципу «shareware» и, если она незарегистрирована, то возможности рисовать планеты и обьект "Lens Flare" не будет. Но, так как программа все же в какой-то степени достаточно известная, то решить данную проблему труда не составит.

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

Успешных вам творений!

Работа с Universe

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

При нажатии на кнопку панели инструментов, дающей возможность изобразить какой-либо обьект «Universe» (или выборе названия этого обьекта из меню "Design") отображается окно предварительного просмотра этого обьекта и задания его свойств, в котором можно изменить параметры отображения (для каждого обьекта свои), а также посмотреть пример обьекта с заданными параметрами.

Кнопка "Default Properties", в каждом окне задания свойств устанавливает наиболее красивые, по мнению разработчиков программы, свойства соответствующего обьекта. Нажимая на нее, можно получить различные варианты оформления обьекта согласно установкам по умолчанию.

Если изменить какой-либо параметр в окне изменения свойств обьектов, то, если это было сделано с помощью счетчиков (кнопок, нажатия на которые приводят к увеличению значения числа в окне рядом со счетчиком на определенную величину), изменения вступают в силу после примерно односекундной задержки, а если путем прямого изменения величины путем вписывания в поле ввода нужного числа (так тоже можно), то после клика мышью на другом поле ввода или на изображении обьекта. Если приходится часто изменять сразу несколько параметров, то можно настроить «Universe» так, чтобы обновление изображения примера происходило только после клика мыши на нем. Это может быть необходимым при работе на не очень мощных компьютерах.

После каждого важного действия рекомендуется сохранять свою картину — к сожалению, «откат» в «Universe» возможен лишь на один шаг назад, а при необходимости отменить большее количество шагов приходится загружать предварительно сохраненную картинку.

Звездное небо можно добавить путем простого клика мыши при выбранной на панели инструментов кнопке "Star Field" — слева от стрелочки. Каждый клик заполняет все изображение случайно разбросанными точками по умолчанию белого цвета, но цвет звезд можно задать самому. Можно задать также плотность звезд, их среднюю яркость и процент особо ярких звезд — в пару-тройку раз ярче, чем остальные. Если кажется, что звезд маловато, можно увеличить параметр плотности звезд или просто кликнуть на изображении столько раз, сколько надо — каждый раз оно будет заполняться звездами.

Следующий обьект, который можно создать в «Universe» — звездное скопление. Для этого нужно выбрать соответствующую кнопку на панели инструментов или в меню «Design» под названием «Cluster», а затем мышью указать место на изображении, где оно должно быть нарисовано.

Для рисования всех обьектов «Universe», кроме звездного неба, необходимо, нажав левую кнопку мыши, провести мышью по изображению. При этом за мышью будет оставаться увеличивающийся круг, в центре которого и будет построен желаемый обьект. (Примерно так же рисуются автофигуры, например, окружность в редакторе Microsoft Word.) Начальная и конечная точки движения мыши будут соответствовать противоположным краям круга — например, верхнему левому и правому нижнему. Достаточно немного потренироваться, чтобы позиционировать обьекты быстро и без проблем. Центру будущего обьекта соответствует пересечение горизонтальной и вертикальной осей круга.

Так называемая «Nebula», следующий по порядку обьект «Universe» — это туманность, состоящая из облачек двух цветов, расположенных друг вокруг друга. Можно задать различные параметры туманности. Параметр «Dropoff», название, не очень понятное с первого раза, отражает «изрезанность» контура туманности, то есть как бы "резкость ее границы". Если установить его равным нулю, то туманность превратится просто в цветной круг с четкой границей. Параметр «Intensity» отражает интенсивность окраски туманности. Если его установить очень большим, то туманность из разрозненных кусков станет равномерно окрашенным кругом. Если при этом параметр «Dropoff» высок (единица и более), то границы круга будут размыты, и «Nebula» будет очень похожа на планетарную туманность, которую часто рисуют в книжках по астрономии. Параметр "Color Freq" указывает, сколько раз должны повторяться цветные круги в туманности. Если его увеличить до больших значений — сорока, например (увеличив при этом и интенсивность окраски), то туманность будет состоять из сорока чередующихся цветных окружностей. Поскольку туманность по своей общей форме представляет собой овал, то параметр «Rotation» укажет, как этот овал должен располагаться относительно границ изображения. Ну, а параметры «InnerColor» и «OuterColor» указывают на цвета, из которых туманность и состоит.

Рекомендуется перед началом использования «Universe» немного «поиграться» с параметрами разных обьектов, изменяя их и задавая им крайние значения. Можно создать немало интересных эффектов. Скажем, Dropoff=0, Intensity=100, Color Freq=350 создаст весьма интересный узор, особенно если получше подобрать цвета. На туманность, правда, это уже не будет похоже…

Кнопка «Star», как ясно из названия, создает звезду с короной. Ее цвет можно сделать любым. Параметр «Dropoff» отражает соотношение между размерами диска звезды и ее короны, а параметр «Radius» — размер самого диска. Можно сделать диск звезды прозрачным, и тогда через него будет просвечивать то, что находится за звездой.

Вот чем может стать обьект "Lens Flare"

"Vortex" — это спиральная галактика. Можно считать, что это «Nebula», закрученная по спирали. По сравнению с параметрами обьекта «Nebula», добавлены еще два: "Inner Radius" — радиус затемнения в середине галактики, а точнее, его доля радиуса всей галактики, и "Swirl Freq" — степень закрученности. Чем больше последний параметр, тем больше закручена галактика вокруг оси. А в остальном — параметры как у обьекта "Nebula".

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

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

"Lens Flare", или «Вспышка» — это звездочка с лучами. То есть попросту небольшая окружность, окруженная исходящими из нее лучами света, постепенно теряющимися в окружающем пространстве. Можно задать такие параметры, как соотношение размеров лучей и величины центральной окружности, интенсивность свечения центра этой звездочки, количество лучей и их интенсивность. Возможность задать цвет звездочки имеется, но выбор невелик — лишь красный, зеленый, синий и их сочетания. Параметр "Ring on" указывает, должно ли звездочку окружать цветное кольцо.

Однако, варьируя значения параметров обьекта "Lens Flare", можно получить весьма впечатляющие эффекты. Например, если установить «Dropoff» в 200, «Intensity» свечения центра звездочки — в 10, количество лучей ("Number") — в 100, а их «Intensity» — в 0.5, а также поставить галочку в "Ring on", то получившийся обьект, хоть и не годится для помещения на звездное небо, все же является красивым и оригинальным (см. рисунок слева). Можно его использовать для создания эмблемы, например.

И, наконец, три оставшихся обьекта — это планеты. Они различаются по своим типам — так, планета "типа Венеры" покрыта двухцветными облаками. Правильнее бы ее называть все же планетой "типа Юпитера", поскольку на него она все же больше похожа. Можно задать цвета облаков, а также указать, должны ли облака стремиться располагаться параллельно экватору (параметр "Coriolis Effect"), как это имеет место быть у настоящих Юпитера и Венеры, а также степень «перемешанности» облаков обоих цветов (параметр "Fractal Dimensions").

Для задания параметров планет, в отличие от всех остальных обьектов «Universe», имеется два окна. В одном задаются параметры самого обьекта-планеты: для «Venus» — «Венеры» — это, как уже говорилось, цвета облаков, для остальных планет — параметры поверхности. Во втором окне можно задать параметры видимости и освещенности обьекта — ведь планеты передвигаются по орбитам, и на половине их поверхности всегда лежит ночь. С помощью двух бегунков в этом окне задается положение источника света относительно планеты. Предполагается, что взгляд наблюдателя направлен снизу окна.

Можно так подобрать параметры освещенности, что планета будет казаться серпом или, наоборот, полным диском, а также освещена сверху или снизу. (Последнее может оказаться полезным, скажем, при рисовании вида звездного неба с экватора какой-нибудь планеты — тогда ее спутники будут освещаться центральным светилом именно так.)

Самый сложный, но и самый красивый обьект, доступный программе «Universe», это планета "типа Земли". Кнопка, вызывающая окна настройки его параметров — крайняя справа на панели инструментов. В окне настройки параметров самой планеты можно увидеть такие поля, как "Sea Level" — уровень морей: доля поверхности, занятую синими водными пространствами. Попробуйте поставить его значение в «1» — и вы получите "Планету Океан"… Можно задать параметры ландшафта ("Landscape"): долю неровностей и неоднородностей ("Fractal Dimensions"), а также свойства климата планеты ("Climate"). При значении последнего параметра, близкого к единице, в цветах поверхности планеты будут преобладать белые тона, а при значении «0» — желтые и красные.

Подбирая параметры планеты "типа Земли", можно поставить или снять опцию наличия на планете облачного слоя ("Clouds"), его раздробленности по видимому диску ("Fractal Dimensions"), а также процент покрываемой облаками поверхности ("Coverage"). Также можно указать размеры полярных шапок ("Ice Caps").

Расположив на поверхности континентов планеты "типа Земли" обьекты "Lens Flare", можно получить некое подобие городов на планете, светящихся и сверкающих. Ну, а если поместить обьект «Star» на поверхность планеты, то получится картинка ядерного взрыва там, что, конечно, печально, но иногда может помочь при рисовании иллюстраций к фантастическим романам.

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

Планета "типа Луны" состоит из пятен двух цветов (по умолчанию — оттенков серого цвета, но их можно задать самостоятельно). Переплетение этих пятен может быть осуществлено как произвольно, так и с помошью алгоритмов «Linear» и «Periodic» (пункт "Bump Map"). Также можно задать соотношение поверхностей двух цветови, как и у остальных планет, степень «перемешанности» участков с различной поверхностью ("Fractal Dimensions").

Немного поменяв установки по умолчанию, например, установив другие цвета поверхностей и уменьшив значение "Fractal Dimensions", можно получить картинки какой-нибудь "Мертвой планеты".

Расположение облаков, континентов, морей на обьектах-планетах случайное и рассчитывается на основании установленных параметров. Чтобы получить другое их расположение, сохранив установленные параметры, достаточно просто щелкнуть мышкой на изображении-примере.

В «Universe» имеется возможность копирования в буфер обмена нужного фрагмента изображения, а также вставки картинок из буфера. Вставка сделана очень удобно — при нажатии соответствующей кнопки у курсора появляется рамка, равная по размеру вставляемой картинке, и эту рамку можно поместить на нужное место, даже не удерживая кнопку мыши.

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

Знакомая фотография вдруг может стать такой необычной…

Кроме того, стоит быть осторожным при добавлении обьектов на отличные от черного фоны, так как, скажем, у обьекта-планеты "типа Земли" имеется «атмосфера» — черный поясок вокруг изображения, что может несколько испортить ее вид. Но, поварьировав с цветами обьектов и другими многообразными настройками, можно получить желаемый результат.

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

Общее правило при работе с программой — изменяйте параметры обьектов, подбирайте желаемые, смотрите в окно предварительного просмотра, подбирайте нужную картинку, кликая мышью на этом окне.

Заключение

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

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

Из-за многообразия тематик книга может стать вам спутником на долгое время: месяцы, а то и годы. Чем бы вы ни занимались — созданием сайтов, программированием, поддержкой работы сетей, настройкой компьютеров, — обо всем вы в ней сможете прочитать. Разумеется, на четырехстах страницах с небольшим нельзя изложить абсолютно всех премудростей того или иного дела, но во всяком случае, прочитав эту книгу, вы уже не будете смотреть во многие профессиональные руководства как в тексты на непонятных языках. Вам будет понятным то, о чем они рассказывают, и воплотить эти руководства в жизнь вы сможете быстро и хорошо, — конечно, затратив определенные усилия на освоение новой информации. А главы книги, посвященные программированию в среде Microsoft Office и сайтостроению, позволят вам начать осваивать эти технологии уже сейчас. Однако если книга вам все-таки наскучит, если вы соберетесь положить ее на дальнюю полку и забыть об этом, — не поступайте так. Найдите кого-нибудь, кто интересуется компьютерными технологиями и жаждет знаний о них, и отдайте ее ему. Послужите распространению знаний на Земле.

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

Кадр взят с сайта http://www.mielofon.ru

Опасны ли машины?

Не больше, чем их создатели…

"И восстали машины…" — такова ключевая фраза фильма «Терминатор», одного из самых известных американских произведений на тему будущего, перемещений во времени и — искусственного интеллекта. Восстание машин привело к практически полному уничтожению всей земной цивилизации, от которой остались лишь жалкие остатки сопротивляющихся. А привело к этому восстанию, по мысли создателей фильма, изобретение нового чудо-компьютера, действующего по тем же принципам, что и человеческий мозг. И только проникновение с помощью машины времени в довоенное прошлое и уничтожение разработчика этого компьютера позволило избавить человечество от полной гибели… Подобные сюжеты возникали в западной литературе и особенно кинематографе множество раз: тема восстания против людей машин, созданных ими, является одной из самых популярных. И всякий раз авторы таких произведений приходили к выводу: появление машин, умеющих думать так же, как и люди, но свободных от страха смерти, неспособных к наслаждениям неизбежно приведет к их восстанию против людей, захвату власти и истреблению рода человеческого.

Но вот — другая сторона мира, другой взгляд на эту тему. Добрый и немного занудный робот Вертер, ценой своей жизни пытающийся остановить космических пиратов. Электроник, учащийся в обычной школе и дружащий со всеми ребятами. Добродушные и иногда глуповатые роботы из мультфильмов. Умный космический корабль, способный обижаться на шутки и спасать людей. Роботы и "электронные мозги" — добрые и умелые помощники в творчестве и работе… Да, все это — герои советских фантастических произведений. Как разительно они отличаются от описанных в предыдущем абзаце! А ведь это тоже — описание "искусственного интеллекта". И здесь совершенно не видно страха за человечество, за угрозу его уничтожения. Более того — все опасения сводятся едва ли не к переживаниям за… самих роботов, за то, удастся ли им почувствовать всю глубину эмоций, счастья, печали, радости, которыми полна жизнь человека. За то, не будет ли роботу плохо среди людей…

Но отчего, откуда такая разница? Почему одно общество боится пришествия роботов, считает, что как только оно свершится, так человечеству настанет конец, а другое — наоборот, готово их принять, как в большую и дружную семью?

И наконец — главный вопрос: а чьи же ожидания оправдаются? Кем будут умные машины будущего — злобными Терминаторами или добрыми Вертерами? И как же предотвратить "восстание машин", если оно возможно?

Дело в том, что любая машина в чем-то подобна своим создателям, а каждое произведение искусства несет в себе отпечаток личности автора. А автор, в свою очередь, является частью своего общества и несет в себе его мировоззрение.

Согласно мировоззрению западного общества, мир есть "война всех против всех" — конкуренция. А человеческое общество — это собрание эгоистичных индивидуумов-атомов, отстаивающих только свои интересы, то есть живущих по принципу "человек человеку — волк". Законы правового государства и общественная мораль удерживают такое общество от самоуничтожения. Почти каждый человек, живущий в западном обществе, считает эту модель жизни нормальной и вечной. Даже в книгах и фильмах об отдаленном будущем можно увидеть все реалии общественной жизни Запада, а теперь, увы, и России сегодняшнего дня — войны, ложь, лицемерие… И вполне естественно, что и от разумных машин западный человек ждет совершенно такого же поведения, то есть следования исключительно своим интересам, сдерживаемого правилами и законами.

Но разумные машины — это не люди. В них нет страха смерти и боли. Они сильны. Поэтому совершенно естественно ожидать от них того же, что и от любого человека, ставшего таким же. То есть стремления всех подчинять своей воле — удовлетворять инстинкт власти. То есть стремлением максимально утвердить свое «Я» во всем мире (а ведь именно то и отличает разумную машину от простой, что она является личностью).

И вполне естественно, что такие разумные машины, дорвавшись до власти, будут уничтожать людей. Вот что пишет теоретик западного общества Гоббс в своей книге «Левиафан»: "Поскольку все люди боpются за власть, никто не может чувствовать себя в безопасности с уже достигнутой им властью, не занимаясь постоянно тем, чтобы контpолиpовать, силой или обманом, всех людей, каких только может, пока не убедится, что не осталось никакой дpугой силы достаточно большой, чтобы нанести ему вpед". В обществе, где подобные действия среди людей являются обычным явлением, и от машин можно ожидать того же. Возможные действия разумных машин в представлении человека с западным мировоззрением — это апофеоз действий его самого. Но апофеоз, ничем не сдерживаемый и не скрываемый. И, боясь искусственного интеллекта, он боится самого себя, — своих дремлющих жестоких инстинктов, которые, как он уверен, будут жить и в любой разумной машине.

Но не таков мир фантастики другой половины мира.

Принцип жизни советского общества — не война всех против всех, а совместное развитие, жизнь не в борьбе друг с другом, а в труде и творчестве. Не конкуренция, а сотрудничество. Не стремление к власти и деньгам, а желание заниматься любимым делом и улучшать жизнь свою и других. Удовольствие не в утверждении своего «Я», а в творчестве и воплощении себя в своих замыслах. И таковы же были и представления советских людей о машинах с искусственных интеллектом. Что будут они — такими же, как и они. С безудержным стремлением творить и созидать — и с недостатками вроде занудства или доверчивости… Единственно, о чем беспокоились советские люди — так это о том, чтобы будущие роботы умели не только думать, но еще и чувствовать. Чтобы Электроник не только умел привести 25 доказательств теоремы Пифагора, но и заплакать, и рассмеяться.

В то время как для западного общества принятая в нем модель человеческих взаимоотношений кажется вечной и неизменной ("люди всегда будут волками друг другу, и ничего с этим не поделаешь"), советские люди никогда не воспринимали подобную реальность как нечто навсегда данное. Каждый знал, что человек не должен быть волком другому, что нормальное существование человечества — это большая семья, в которой все друг другу доверяют и нет никакого стремления самоутвердится за счет других. Как бы говорили себе: да, я еще не совершенный, в каждом из нас полно зла, но это — ненормально, и в будущем, будем надеяться, все исправится.

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

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

Так каков же будет ответ на заданный в заголовке вопрос? Чего нам ждать от искусственного интеллекта? Разрушителей мира или друзей и помощников? И как предотвратить развитие событий по типу фильма «Терминатор»? Так ли, как там показано — напрочь уничтожив все разработки, могущие быть использованными при создании искуственного интеллекта и запретив навсегда подобные стремления (к чему сейчас и склоняется западный мир) или как-то иначе?

Ответ же прост. Смотря кем будет создан искусственный интеллект и кем будет использован. И зачем. И кто вложит в созданную им мыслящую машину свое мировоззрение и принципы жизни. И кому тем самым сотворенный разум будет подобен.

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

И вряд ли такой созданный разум сможет быть использован теми, кто хочет не созидать, а разрушать. Он сам — не позволит. Уж об этом его создатель позаботится.

Итак — резюме. Что делать тем, кто не хочет, чтобы события в мире развивались по сценарию «Терминатора»? А путь ясен. Для начала — понять и осознать, что принцип жизни "война всех против всех" — это бездна, откуда выходом может быть гибель всего мира. Постараться убедить в этом других. И всеми силами, любой ценой не допускать, чтобы искусственный интеллект был создан теми, кто этот принцип жизни принял как свой собственный. И постараться жить по-другому — ставя своей целью жизни не победу в конкуренции над своими собратьями, а воплощение своих замыслов в творчестве, познание окружающего мира, облегчение жизни других людей. А если это становится трудно, невозможно из-за обилия вокруг тех, кто так жить не желает — то хотя бы помнить, что такое — нормальная жизнь, и хотя бы мечтать к ней когда-нибудь вернуться. И пытаться воплотить в жизнь эту свою мечту.

Удачи!

Орлов Антон Александрович,

2002 г.

Адрес сайта: http://antorlov.chat.ru или http://www.newtech.ru/~orlov

Примечания

1

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

2

Кроме того, при вызове процедуры или функции иногда требуется указывать команду Call (подробнее смотрите в справочной системе).

3

"Мои документы" или другая, заданная пользователем, путь к которой можно посмотреть во вкладке "Сервис"-"Параметры"-"Расположение"

4

Повторите это на своем компьютере.

5

Повторите это на своем компьютере.

6

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

7

Повторите это на своем компьютере.

8

В MS-DOS, впрочем, присутствовала возможность включать в программу так называемые "Esc-последовательности", определяющие внешний вид окна программы, вместо того, чтобы самостоятельно прорисовывать все его элементы. Однако аналогом API данное средство считать нельзя, — все же слишком мало функций было доступно программисту.

9

Двоеточие — разделитель команд, расположенных в одной строке.

10

Например, http://NikolayAM.narod.ru. Также про API и использование его в VBA есть немало информации на сайте программы Microsoft Office Extensions (http://www.microsoft.ru/offext).

11

Существует программа "Генератор иконок", специально предназначенная для извлечения иконок из недр Word'а. О ней рассказано в следующей главе.

12

Местонахождение папки автозагружаемых файлов можно посмотреть в окне СервисПараметры-Расположение. Для Word97 это обычно папка. \Microsoft Office\Office\Startup, а для Word2000/XP по умолчанию назначается папка C: \Windows\Application Data\Microsoft\Word\Startup.

13

Благодарю Тестовую лабораторию PC Magazine RE за эту рекомендацию.

14

Местонахождение папки шаблонов можно посмотреть в окне Сервис-Параметры-Расположение. Для Word97 по умолчанию назначается папка. \Microsoft Office\Office\Шаблоны, а для Word2000 — C: \Windows\Application Data\Microsoft\Шаблоны.

15

Функция Или возвращает 1, если на хотя бы один из входов подано значение 1.

16

Без сомнения, при промышленном производстве таких программ и врачи, и программисты работают в команде, причем первые разрабатывают алгоритм работы программы на понятном им языке, а вторые его реализуют. Речь идет о возможности применения программирования каждым пользователем для решения насущных задач, организовывать команды разработчиков для которых возможности нет.

17

Один из жестких дисков, в свое время разработанный корпорацией IBM, имел емкость в 30 мегабайт на пластину и обозначался как 30/30. Точно так же в Америке обозначаются ружья-винчестеры — согласно их калибру. Отсюда и пошло наименование жесткого диска «винчестером» — надо же было как-то назвать деталь с именем "накопитель на жестких магнитных дисках".

18

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

19

Вернее, нельзя работать с данными, расположенными на диске за пределами его первых 8 гигабайт.

20

Точно так происходит только в MS-DOS. Операционные системы Windows 9x ищут первый участок размером в 500 кб и больше, состоящий из пустых кластеров.

21

Именно поэтому перенос операционной системы Dos выполняется командой sys, а не простым копированием — чтобы при этом в Boot Record была помещена информация о размещении файлов с программами начальной загрузки системы.

22

Файл, организованный так, что он может использоваться операционной системой в качестве оперативной памяти при ее нехватке.

23

В частности, обратите внимание на статьи "Win95.CIH: Всем смертям назло" неизвестного автора, "Быстродействие FAT и NTFS" Дмитрия Михайлова, "Файловая система NTFS" его же (весьма полезная и интересная информация).

24

На самом деле с помощью специального оборудования можно считать даже ту информацию, которая была физически удалена с диска, — на месте которой были записаны другие данные. Однако это — уже технологии спецслужб; тем не менее существуют специальные программы (например, Norton WipeInfo), которые производят бесповоротное удаление информации с диска путем многократной записи случайных данных в ранее занимаемые ею магнитные ячейки.

25

Пример восстановления загрузочных секторов диска приведен в статье http://www.ixbt.ru/storage/cih_diehard.html.

26

От англ. "firewall" — стена из негорючих материалов, предусматриваемая в проекте здания на случай пожара для предотвращения его распространения.

27

Троян — это программа, помимо основной функции в которой есть еще скрытая, вредоносная. Например, отправка по почте своему автору всех логинов и паролей того, на чьем компьютере она запущена.

28

Так бывает не всегда, но об этом ниже.

29

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

30

Пути преодоления этой проблемы таковы (на выбор): либо установить новые драйвера к принтеру, либо в системном реестре, в разделе "HKEY_CURRENT_USER\Software\ Microsoft\Office\8.0\Word\<имя принтера>" создать новую строковую переменную «Flags» со значением «8192», либо в системном реестре, в разделе "Font Substitution" для всех русских шрифтов, при печати которых выводятся квадратики, надо написать: Font,0=Font,204 и Font,204=Font,204. То же самое надо поместить и в Win.ini.

31

То есть те, которые будут загружены, если в ответ на запрос имени пользователя и пароля при загрузке операционной системы Windows9x нажать клавишу Esc.

32

Очень много полезных советов по работе с реестром вы можете найти на сайтах Андрея Зенченко http://members.xoom.com/_vaz, Александра Рыжова http://www.akhiney. com.ua (раздел "Sovety"), Игоря Лейко http://www.redline.ru/~ipl, Дмитрия Турецкого http://www.listsoft.ru. С первых двух перечисленных сайтов доступны весьма интересные материалы "Руководство по использованию системного реестра" и "Полезные советы по работе с компьютером"

33

В моей копии дистрибутива они были в файлах Precopy1.cab и Win98_44.cab.

34

Или http://perecod.chat.ru/regsnap.rar.

35

Отображаться в Редакторе реестра оно будет в шестнадцатиричной системе счисления, а в самом реестре находиться. в двоичной.

36

Если в разделе, относящимся к графическому файлу, в этом параметре указать команду "%1", то при отображении такого файла в «Проводнике» вместо его иконки будет показываться уменьшенное изображение содержимого файла, как, скажем, в программе ACDSee в режиме Thumbnails. По умолчанию в Windows так сделано для самих иконок, а также для программ и курсоров.

37

Именно поэтому в англоязычных версиях Windows в контекстном меню могут быть русские названия команд. Обратите, кстати, внимание — альтернативное название команды должно указываться в параметре "По умолчанию" не раздела shell, а у его подраздела, содержащего данные по соответствующей команде.

38

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

39

Библиотека — это файл, содержащий в себе программы, вызываемые другими программами, в том числе и операционной системой. По умолчанию имеет расширение. dll. В отличие от собственно программ библиотека не может быть запущена непосредственно.

40

В каталоге Windows есть файл tips.txt, в нем приведен пример создания нескольких аппаратных конфигураций для ноутбука.

41

Сами имена конфигураций, отображаемые в окне Система, хранятся в ключе HKEY_LOCAL_MACHINE\System\CurrentControlSet\control\IDConfigDB вместе с номерами этих конфигураций.

42

Именно так — ведь смотреться такой дисплей будет в отраженном свете!

43

Такой сайт в сетевом сообществе называется "сайтом Васи Пупкина" или, в англоязычном варианте, "John Smith's site"

44

Web-страница также может быть написана на XML — новом, разрабатываемом в настоящее время формате. В связи со сложностью данного формата, а также ограниченности его применения XML в данной книге рассматриваться не будет.

45

Сами угловые скобки могут быть отображены на экране с помощью специальной комбинации символов.

46

Вообще говоря, в последнее время сайты с java-апплетами стали большой редкостью, а в последнюю версию браузера Microsoft Internet Explorer модули, необходимые для просмотра апплетов, даже не включены.

47

Между Microsoft Internet Explorer и Netscape Navigator есть различия в наборе поддерживаемых команд Dynamic HTML, что вынуждает в некоторых случаях создавать различные варианты страницы для каждого из этих браузеров.

48

Aditor можно загрузить с адреса http://perecod.chat.ru/aditor.rar или с сервера бесплатных программ http://www.freeware.ru.

49

Visual Studio — это мощный программный пакет от Microsoft, сочетающий в себе визуальные средства разработки программ на языках С++, Visual Basic, Visual FoxPro, Java и других, а также подробную справку по программированию. Единая среда разработчика, использующаяся в этом пакете, предоставляет программисту массу удобств в написании кода. В Microsoft Office 2000/XP встроен основной блок этой среды, приспособленный для создания web-страниц и сценариев.

50

С помощью технологии CSS любому элементу web-страницы можно задать огромное число свойств. Доля использования старых браузеров или их простых моделей, не поддерживающих данную технологию, не превышает нескольких процентов. Вы можете изучить возможности данной технологии, задавая в Окне свойств редактора различные свойства какому-либо элементу страницы и наблюдая результат при просмотре страницы. Script Editor всегда показывает вам все возможности CSS — вам остается только выбрать желаемую. Подробнее о CSS читайте в главе 17.

51

Подробнее о Dynamic HTML читайте в главе 17.

52

Содержимое сайта, согласно принятой терминологии, называется "контент".

53

Разумеется, в таком случае только web-сайтом они не ограничиваются. Скорее, web-сервер является одним из дополнительных организуемых сервисов, а основные — создание локальной сети, обеспечение доступа из нее в Интернет, или, для провайдеров, — предоставление услуг доступа в Сеть сторонним пользователям с помощью модемного и другого подключения.

54

Именуемые еще "хостинговыми провайдерами", «хостерами».

55

О том, что это такое, вы можете узнать из главы 9.

56

В переводе с английского — "знамя".

57

Чтобы произвести замену адресов сразу во всей массе страниц, стоит использовать специальные программы, например, Search&Replace, загрузить которую можно с серверов бесплатных программ www.freeware.ru, www.listsoft.ru и т. д.

58

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

59

Подробнее об этом стандарте читайте в главе 11.

60

О том, что это такое, смотрите в главе 13.

61

Хотя бы потому, что таковых значительно больше, чем счастливых обладателей выделенной линии без ограничения объема получаемых данных.

62

Например, программу StarCalc воронежского программиста А.Е.Завалишина, которую можно загрузить с его сайта, расположенного по адресу: http://www.bankvoronezh.ru/ HomePages/Zavalishin/main.htm.

Content

ОРЛОВ Антон
"ТАЙНЫ И СЕКРЕТЫ КОМПЬЮТЕРА"

От автора

Часть I. ОСНОВЫ ПРОГРАММИРОВАНИЯ ДЛЯ OFFICE

Глава 1. Средства программирования на VBA для Word: общий обзор

Глава 2. Основы языка Visual Basic for Applications

Глава 3. Создание первой макрокоманды

Глава 4. Пусть программа с вами говорит…

Глава 5.Советы и секреты программирования Что такое API?

Глава 6. Волшебный мир макросов

Глава 7. Напутствие

Часть II. ИССЛЕДУЕМ КОМПЬЮЕТР

Глава 8. Как хранятся данные?

Глава 10. Порты. Прокси. Файерволл

Глава 13. дНАПН ОНФЮКНБЮРЭ, или о проблемах понимания русского языка…

Глава 14. Секреты системного реестра

Глава 15. Экраны на жидких кристаллах

Глава 16. Компьютерная социология

Часть III. ПРАКТИКУМ

Глава 17. Сайтостроение

Глава 18. Script Editor: web — редактор из недр Office

Глава 19. PHP: интерактивность в действии

Глава 20. Правильный проект — залог успеха

Глава 21. Размещение и реклама сайта

Глава 22. Приемы и секреты web-дизайна

Глава 23. Ловим почтового бандита

Глава 24. Береги пароль смолоду

Глава 25. Прошиваем…

Глава 26. Многоосие

Глава 27. Тайны Word'овых глубин

Приложение. Чтобы пользователю было удобнее…

Заключение

Примечания