-
Всем привет,
спешу поделиться полезной информацией о том, что оказывается может вызывать необъяснимое замедление в работе Windows (XP/2003/?).
Популярным языком, контроллер IDE ATA/ATAPI может самостоятельно и очень незаметно переключиться из высокопроизводительного режима типа Ultra DMA Mode 5 в более медленный режим - такой как PIO Transfer Mode. Как я понял, произойти это может в случае превышения некоего порогового числа ошибок чтения, и чем дольше вы используете Windows, тем выше вероятность, что это случится и с вашей системой.
Косвенные признаки:
1) Windows работает очень медленно - все что связано с диском требует в 10 раз больше времени, чем обычно. Запуск и завершение програм может занимать по несколько минут.
2) При проигрывании музыки хорошо заметны частые заедания, даже при использовании хорошего аудиопроигрывателя.
3) Process Explorer показывает необычно высокую CPU-активность псевдо-процесса Hardware Interrupts (у меня было 15-20%).
Как убедиться:
В диспетчере устройств заглянуть на вкладку дополнительных свойств Primary IDE Channel (в разделе IDE ATA/ATAPI Controllers).
Значение Current Transfer Mode равное PIO Mode означает, что проблемы с производительностью действительно вызваны неправильными настройками контроллера.
Как исправить:
Удалить неправильно настроенный IDE канал из системы и позволить Windows его автоматически переустановить (после пары перезагрузок).
Источники информации:
http://forum.sysinternals.com/forum_posts.asp?TID=965
http://winhlp.com/node/10
http://www.microsoft.com/whdc/device/storage/IDE-DMA.mspx
Полезная утилита:
http://www.microsoft.com/whdc/DevTools/tools/RATT.mspx
// Vitaliy
-
Работая над очередным Win32-приложением, поймал себя на мысли, что то и дело запускающийся при каждом непойманном исключении в моем приложении доктор Ватсон (он же dw20.ехе) не полезен ни мне - тратя минуты моего времени, ни моей компании - загружая сервер ненужными отчетами об ошибке.
Если бы это был сбой в распространенном приложении - таком как Microsoft Office - еще один отчет вероятно мог бы помочь в поиске и исправлении ошибки в программе. А в моем случае - ошибка содержится в моей собственной программе и увидеть, а тем более исправить ее никто кроме меня не может.
Как быть? А вот как - добавление следующих ключей в реестр отключает эту архи-полезнейшую функцию. Подробнее можно прочитать здесь: http://support.microsoft.com/kb/841477, http://support.microsoft.com/kb/310116, и совсем подробно здесь - http://download.microsoft.com/download/5/9/2/592d2308-a6a2-48ad-ae8f-72f888b9d361/CER_Implementation_Plan.pdf
Пример содержимого файла dw_disable.reg:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Policies\Microsoft\PCHealth\ErrorReporting\DW]
"DWReportee"=dword:00000001
"DWNeverUpload"=dword:00000001
"DWNoFileCollection"=dword:00000001
[HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\PCHealth\ErrorReporting\DW]
"DWReportee"=dword:00000001
"DWNeverUpload"=dword:00000001
"DWNoFileCollection"=dword:00000001
[HKEY_CURRENT_USER\Software\Microsoft\PCHealth\ErrorReporting\DW]
"DWReportee"=dword:00000001
"DWNeverUpload"=dword:00000001
"DWNoFileCollection"=dword:00000001
[HKEY_LOCAL_MACHINE\Software\Microsoft\PCHealth\ErrorReporting\DW]
"DWReportee"=dword:00000001
"DWNeverUpload"=dword:00000001
"DWNoFileCollection"=dword:00000001
-
Долгое время не понимал, почему некоторые справочные файлы отображаются пустыми - вот как-то так:

Оказывается все очень просто - выпущенный уже более двух лет назад патч (#896358) заблокировал показ содержимого CHM-файлов, загруженных из Интернета. Лечится довольно просто - щелкаем правой кнопкой на иконке файла, выбираем Properties, и в окне свойств щелкаем по кнопке Unblock.
Подробнее описано в статье: http://support.microsoft.com/kb/902225/
-
У меня есть хорошая новость - эту проблему, скорее всего, устранит установка обновленной программы-агента Windows Update Agent 3.0. Скачать её можно здесь - WindowsUpdateAgent30-x86.exe.
Подробнее (по-английски) можно прочитать на сайте команды разработчиков - http://blogs.technet.com/wsus/archive/2007/04/28/update-on.aspx.
Если я правильно разобрался в описании, обновленная версия будет установлена на машины пользователей уже в следующий "вторник обновлений" (http://en.wikipedia.org/wiki/Patch_Tuesday).
-
Вопрос:
С кем контактировать в Майкрософт, чтобы предложить свою идею/совет?
Ответ:
- Пожалуйста, прочитайте и убедитесь, что правильно поняли, раздел "UNSOLICITED IDEA SUBMISSION POLICY" на странице http://www.microsoft.com/info/cpyright.mspx#EVE.
- В Майкрософт достаточно много сотрудников и продуктовых груп. Уточните, к какому продукту/услуге относится ваше предложение и постарайтесь найти их продуктовую страницу или блог. Там, скорее всего, будут указаны координаты для контактов.
- Большинство людей в Редмонде говорит по-английски, возможно имеет начать с Вашего местного/регионального офиса (например, для стран СНГ это http://www.microsoft.com/rus/feedback/default.mspx).
-
Есть такая хитрость, очень полезная, например, при верстке и редактировании книг в Ворде. Допустим у вас есть несколько глав - достаточно больших по размеру, возможно с иллюстрациями и т.п. В этом случае может оказаться удобнее работать с каждой главой по отдельности, а затем объединить все документы в один.
Для того, чтобы каждый раз не копировать все документы в один вручную, можно воспользоваться продвинутой функцией Ворда - специальными полями. Итак, пусть в наш текущий документ мы хотим вставить документ (главу из книги), путь к которому на диске c:\documents\mydoc1.doc.
Выбираем меню Insert, в нем опцию Field, в списке FieldNames выбираем IncludeText, а в поле Filename указываем c:\documents\mydoc1.doc и нажимаем OK.
Если все сделано правильно, в месте, на которое указывал ваш курсор, появится вставленный документ. При этом вставленный документ будет вести себя как и все остальные специальные поля - его можно будет обновить щелчком правой кнопки мышки и выбрав опцию Update Field (или клавишу F9).
Для того, чтобы увидеть скрытую информацию, связанную со специальными полями, нажмите Alt-F9. Для нашего примера должно получиться:
{ INCLUDETEXT "c:\\documents\\mydoc1.doc" \* MERGEFORMAT }
В этом режиме легко создать нужное число копий этого специального поля и вписать в них правильный путь для каждого документа. При этом не забудьте про удвоенные слэши. Можно также использовать относительные пути к документу. Если наши документы находится в одной папке, достаточно написать mydoc1.doc вместо c:\\documents\\mydoc1.doc. Для того, чтобы вернуться в обычное представление, снова нажмите Alt-F9. Для того, чтобы обновить все вложенные документы (главы книги), выделите весь документ (Ctrl-A) и нажмите F9.
Если вы используете Microsoft Word 2007, опция Field будет находится в меню Insert\Quick Parts.
-
Казалось бы, что может быть проще - запускаем cmd.eхe и пользуемся командой ren (rename).
Попытка 1:
ren *.* *.*.ext
Результат:
filename => filename..ext
filename.aaa => filename.aaa.ext
filename.aaa.aaa => filename.aaa.aaa.ext
Как видно из примера, файлы не имевшие раширения, получили лишнюю точку.
Попытка 2:
ren * *.ext
Результат:
filename => filename.ext
filename.aaa => filename.ext (ошибка - файл уже существует)
filename.aaa.aaa => filename.aaa.ext
Снова проблема - для файлов с расширением, новое расширение не добавляется, а заменяется.
Попытка 3:
ren *? *.*.ext
Результат:
см. попытку 1
Попытка 4:
ren *? *.ext
Результат:
см. попытку 2
Попытка 5:
ren *? *?.ext
Результат:
filename => filename.ext
filename.aaa => filename.ааа.ext
filename.aaa.aaa => filename.aaa.ааа.ext
Ура! Работает!
Контрольный выстрел:
.aaa => .aaa.eхt
Аналогичная ситуация будет наблюдаться и для команд dir, del, copy, move и т.д. В чем причина столь причудливого поведения утилит командной строки? Утверждается, что корни проблемы уходят в прошлое чуть ли не на 25 лет назад во времена DOSа и его прородителя QDOSа, а кажущаяся текущая непредсказуемость толкования символов * и ? связанна с необходимостью обеспечивать обратную совместимость с некими древними приложениями командной строки.
Кстати, в проблеме с переименованиями существует еще и потенциальная возможность коллизии при добавлении разрешения (просто замените в нашем примере eхt на aaa) - так что если в вашем приложении нужна железная гарантия успешного переименования - прийдется писать код для выбора правильной последовательности переименований самостоятельно. (Думаю, будет достаточно просто упорядочить файлы по убыванию длины).
-
Возможно вы замечали, что при скачивании нескольких больших файлов с одного и того же сайта в Internet Explorer одновременно скчиваются только два файла, а остальные ожидают своей очереди. И, если скорость соединения невелика, для этих ождающих окон сохранения через некоторое время отображается ошибка из-за превышения времени ожидания.
Эта особенность работы браузера вызвана следованием достаточно старому стандарту для HTTP-клиентов. То что казалось разумным 10 лет назад сегодня уже не всегда актуально.
Исправить это недоразумение можно вручную изменив соответствующую опцию в реестре.
Например, следующие параметры увеличивают максимальное число соединений до 16:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]
"MaxConnectionsPerServer"=dword:00000010
"MaxConnectionsPer1_0Server"=dword:0000010
Файл для модификации реестра можно найти на сайте http://www.enhanceie.com/ie/tweaks.asp. Прямая ссылка - http://www.enhanceie.com/dl/fixHTTPMax.reg.
-
Выбрать имя приложению, как известно, одна из сложнейших проблем программостроения. Тем не менее в данном случае я имею в виду не выбор имени вообще, а выбор имени программы для публикации с использованием технологии ClickOnce. Что это за технология - тема отдельной беседы (по-русски довольно подробный обзор есть здесь - http://www.rsdn.ru/article/dotnet/WinForms20.xml#EY1BG, список ресурсов на английском здесь - http://blogs.msdn.com/saurabh/archive/2005/10/28/486106.aspx).
Имя ClickOnce приложения - это параметр, который вы передаете утилитам mage.exe и mageui.exe при генерации манифеста. Это имя отображается в окне установки и скачивания приложения, в стартовом меню, а также в окне добавления/удаления программ. Поскольку все это происходит одновременно, то, пожалуй, имеет смысл включить в имя программы в дополнение к номеру версии также и название вашей компании. Например, Microsoft Word 2007. Таким образом программу будет легче найти в меню удаления. :).
Итак, неофициальные рекомендации:
- Формат [Имя компании] [Полное название приложения] [номер версии]
- Предпочтительно использование английских символов. Использование русских символов теоретически возможно (благодаря использованию XML), но в случае использования автоматической системы сборки приложения создает массу трудности при использовании утилит командной строки и генераторов инсталляций.
- Длина имени ограничена 260 символами. Разумный предел находится в районе 40-50 - иначе во многих случаях название перестанет помещаться на одну сточку.
- Даже из множества ASCII символов на самом деле можно использовать лишь ограниченный набор символов. Запрещены к использованию любые символы, не пригодные для использования в качестве имен файлов (" < > | : * ? \ / (Char)0 - (Char) 31), а также символы # и &.
Пробелы? Пробелы можно :)
-
Splash-screen (по-русски: экран-заставка) - это лицо вашего приложения.
И чтобы не ударить в грязь лицом, следует позаботится, чтобы работа этого экрана-заставки отвечала ожиданиям пользователей.
А пользователи, как правило, ожидают, что пока им демонстрируется приятная графическая картинка с номером версии и названием программы сама программа не тратит времени по напрасну и загружает необходимые данные. После того как экран-заставка закроется пользователи ожидают, что программа будет готова к работе, а не продолжать процесс инициализации.
Эти рассуждения наводят на мысль о необходимости распараллеливания показа заставки и процесса подготовки приложения к работе. И тут начинаются проблемы.
Подход №1. Создаем экран-заставку и в том же потоке исполнения занимаемся нашими вычислениями, загрузкой файлов, вызовами веб-сервисов и т.п. По окончании инициализации закрываем окно и возващаемся в приложения, откуда уже создаем основное окно приложения.
Пример: http://www.codeproject.com/csharp/applicationcontextsplash.asp
Проблема: Если инициализация занимает много времени, окно заставки перестает перерисовываться, переключение между программами проецирует на наше окно куски других окон. Ну вы видели такое.
Подход №2. Создаем два потока - главный и вспомогательный. Вспомогательный поток отображает заставку. Главный производит инициализацию. По окончании инициализации в главном потоке завершаем вспомогательный поток. В главном потоке создаем основное окно приложения.
Пример: http://www.codeproject.com/useritems/usesplashscreen.asp
Проблема: Основное окно оказывается "глубоко" на заднем фоне. Это связано с особенностью оконного менеджера Windows - для него окна созданные в разных потоках приложения не имеют (почти) ничего общего - поэтому их z-ордер оказывается сильно отличным.
Подход №2а. Повторяем описанное в подходе 2, но дополнительно при создании основного окна вызываем функцию this.Activate(); (или SetForegroundWindow() в неуправляемом коде). Этот подход предложен, например, здесь: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=115850. Кстати, интересные попытки обойти логику работы функции SetForegroundWindow() встречаются здесь http://www.rsdn.ru/article/qna/ui/wndsetfg.xml.
Пример: http://www.codeproject.com/csharp/apploadingarticle.asp (здесь следует читать также и комментарии, где как раз и предлагается вызывать this.Activate();)
Проблема: Ситуация улучшилась - основное окно остается на переднем плане. Если только мы не щелкнем на каком-либо другом окне. В этом случае основное окно снова окажется на задворках (а не под этим другим окном) и обреченно замигает на панели задач. Обреченно, потому, что на этом обычно все и останавливаются, тем не менее существует Подход №3. И у него тоже есть своя проблема.
Подход №3. Создаем основной и вспомогательный поток приложения. В основном потоке создаем окно экрана-заставки. Во вспомогательном производим всю необходимую инициализацию. После этого закрываем заставку и, используя подготовленные данные, без задержек открываем главное окно.
Пример: На вскидку ничего не нашел, поэтому оставляется читателю в качестве упражнения.
Проблема: Для реализации такого подхода от нас потребуется отделить инициализационные код в отдельную функцию. А потом передать результаты в другой поток. Это не так весело, как, например, запихнуть весь код в событие OnLoad. Тем не менее это самый красивый с точки зрения пользователей, а также эстетствующих менеджеров проекта :), подход.
Где-то по середине между 1 и 3 подходом находится подход с периодическим просмотром очереди сообщений в перемешку с инициализацией. Что-то вроде этого реализовано, кажется, здесь http://www.codeproject.com/useritems/CustomSplashScreen.asp. Этот подход разумеется не нов, минусы у него достаточно очевидны.
Факультативно, можно почитать рассказ Джастина Роджерса, разработчика из команды IE, о том, как работает ApplicationContext (эдакий wrapper для исполнения приложения) http://weblogs.asp.net/justin_rogers/archive/2004/04/11/111162.aspx.
Да, кстати, ложный путь, указанный в одной из статей на сайте codeproject, стоил мне пары часов анализа исходных текстов CLR в поисках того самого места, где происходит описанное "безобразие" (так и не нашел ;) ):
Solving the z-order problem
The problem with the z-order was caused by running two message loops within the same AppDomain. As soon as the AppDomain recieves the message loop exited message it deactivates the Application sending it to the back of the z-order. This is not normaly a problem as this exited message would indicate the application is closing, but not in this case. Fortunatly, this implementation of a splash screen avoids this problem by never starting a message loop for the splash screen, but rather pumping the messages manually.
-
Поработав в двух разных командах здесь в Microsoft, я обратил внимание, что сколько людей/команд - столько разных стилей работы. Каждый использует подобранное под себя железо - клавиатуры, мышки, мониторы и т.д. Каждый имеет свой собственный набор программных инструментов, которым мастерски владеет. Естественно, бывают периоды обновления, когда порядок нарушается, но в целом эффективность очень высока.
Вот несколько полезых комманд/приемов, которые я перенял у любителей командной строки.
Быстрый запуск - Клавиши <Windows>+<R>, cmd, <Enter>.
Для удобства просмотра длинных распечаток высота буффера экрана всех командных окон установлена в 3000-5000 строк.
cd \ - переход в корень диска
cd .. - переход на уровень выше
<tab> - многократные нажатия вызывают циклическую подстановку подходящих имен фаилов и папок в текущую строку. Например, находясь в корне диска C:\ достаточно набрать cd w, <tab>, \sy, <tab>, <tab>, \dr, <tab>, <tab>, \, <tab>, <tab>, <Enter> чтобы оказаться в C:\WINDOWS\system32\drivers\etc (Зачем вам туда переходить - тема для отдельного рассказа). На первый взгляд может показаться не очевидно, но это экономит время, а также избавляет от необходимости помнить точные имена фаилов и папок. <shift>+<tab> прокручивает имена в обратном порядке.
start <имя файла> - тоже самое, что щелчок на файле в проводнике. Запускает приложение или выполняет ассоцированную с файлом команду.
start . - открывает текущую папку в проводнике.
cls - старая как мир команда очистки экрана.
set - выводит на экран список переменных окружения (по желанию отфильтрованный по шаблону), а также позволяет изменять их значения.
more <имя файла> - показывает содержимое файла на экране по страничкам (похоже на команду type).
tasklist - показывает список запущенных процессов (в том числе их идентификаторы PID)
kill <PID> - аварийно завершает приложение - полезно, например, для зависших программ, и програм, не имеющих пользовательского интерфейса (похожа на команду taskkill).
shutdown /r /t 60 - перезагружает компютер чере 60 секунд. отменить перезагрузку можно быстренько набрав на клавиатуре: shutdown -a
ping <домен или IP-адрес> - проверка соединения с удаленным компютером.
tracert <домен или IP-адрес> - трассировка канала связи с удаленным компютером
ipconfig /all - подробная информация о параметрах сетевой конфигурации
exit - завершение пограммы cmd и закрытие окна командной строки.
<<, >> - перенаправление текстового ввёда одной программы на вход в другую или в файл. например time /t >> time.txt запишет текущее время в файл.
Практически любую незнакомую команду можно безопасно запустить с ключом /? чтобы посмотреть ее синтаксис.
В среде разработки у нас доступно еще очень много других интересных командных утилит, "но мы вам про них не расскажем" :).
-
Dependency Walker (от англ. "обходчик зависимостей") - это гениальная по своей простоте программа для первичного анализа исполняемых файлов и библиотек. Говоря русским языком - это программа-анализатор, собирающая для вас информацию о другой выбранной вами программе, например, о компьютерной игрушке или пользовательском приложении.

Основное назначение Dependency Walker - помочь выяснить, от каких исполняемых файлов и библиотек зависит анализируемое приложение. Это позволяет идентифицировать такие проблемы с приложением, как:
- Отсутствие нужной библиотеки (имя библиотеки будет подсвечено красным в списке слева)
- Не совпадение версий (проблемная библиотека будет подсвечена розовым) - это означает, что некоторые необходимые приложению функции в ней отсутствуют.
- Использование неправильной версии библиотеки - это будет заметно если посмотреть на полные пути к библиотекам в нижней части окна.
Вспомогательные возможности программы:
- Определение целевой операционной системы - DOS/Win16/Win32/Win64/etc, аппаратной архитектуры и графической подсистемы
- Определение точной даты создания приложения/библиотеки
- Определение языка программирования, на котором написано приложение (проще всего это делается по списку зависимостей; например, mscoree.dll с некоторой степенью достоверности соответствует .Net приложению, msvbvm60.dll - Visual Basic 6.0, a msvcr80.dll - Visual C++ 2005).
- Определение типа доступной отладочной информации - CodeView/FPO/PDB
- Определение функций операционной системы, используемых приложением. (например, wininet.dll с некоторой степенью достоверности говорит о прямом доступе к Интернету, ole32.dll о работе с COM-компонентами, user32.dll о работе с окнами, winmm.dll - о проигрывании музыки, а dbghelp.dll о расширенной обработке ошибок).
- Просмотр названий функций, экспортируемых библиотекой - это это бывает полезно при отладке собственных приложений для выявления ошибок с декорированием имен функций (name mangling).
Нетривиальная возможность - это динамический анализ зависимостей. Программы позволяет запускать приложение на исполнение и отслеживать (трассировать) все этапы разрешения имен файлов и функций.
Да, ну и конечно, как и все современные утилиты :), программа интегрирована со справочными системой (по умолчанию это MSDN).
Dependency Walker можно бесплатно загрузить с сайта http://www.dependencywalker.com/ (скорее всего вас интересует самая первая ссылка на этой странице - Download Version 2.1.3623 for X86). Пользователям Visual Studio 2005 ничего загружать не нужно - утилита уже входит в состав пакета. Единственный совет - настроить ее интеграцию с контекстными меню для exe и dll файлов (а также sys, scr, drv, etc.).
-
Научившись эффективно пользоваться функцией поиска и замены в Ворде можно в разы повысить производительность своей работы, одновременно избавившись от часто присущей офисной работе рутины. Далее по тексту "А" => "Б" означает поиск и замену буквы А на букву Б.
Избавляемся от лишних пробелов и знаков табуляции
"^t" => " " - переводим все знаки табуляции в пробелы
" " => " " - заменяем два идущих подряд пробела на один, повторяем этот шаг до тех пор, пока поиск не завершится нулевым числом замен (то же самое можно достигнуть за один шаг, используя подстановочные знаки и выражение "( ){2,}" => " ").
"^p " => "^p" - убираем пробелы, оставшиеся в началах строк.
Удаляем из текста цифры
Устанавливаем галочку напротив "Подстановочные знаки".
"[0-9]" => ""
Аналогичным образом можно, например, изменить форматирование нужного множества символов, выделив поле Замена и указав нужный формат.
Манипулируем частями найденного выражения
Например, мы хотим заменить выражения типа "50 руб." на аналогичное "$50".
Устанавливаем галочку напротив "Подстановочные знаки".
"([0-9]{1,}) руб." => "$\1"
Здесь квадратные скобки означают множество допустимых символов [], фигурные скобки {m,n} обозначают число повторений от m до n - в нашем случае одно и более, круглые скобки используются просто для группировки результата - это позволяет перенести найденное число в поле замены используя его номер - \1.
Меняем форматирование части строки поиска
Например, нам нужно раскрасить слово типтоп так, чтобы тип стало синим, а топ красным по всему тексту. При этом мы не хотим менять цвет слов вроде типовой и стопка.
"типтоп" => "XYZтипXYZтопXYZ" здесь XYZ - любая невстречающаяся в документе комбинация букв или других символов
"XYZтипXYZ" => "XYZтипXYZ" + (синий шрифт)
"XYZтопXYZ" => "XYZтопXYZ" + (красный шрифт)
"XYZ" => "" удаляем наш разделитель XYZ из текста
Подробнее об использовании регулярных выражений в Ворде можно прочитать
по-русски: http://artefact.lib.ru/design/text_khozyainov.shtml
по-английски: http://word.mvps.org/FAQs/General/UsingWildcards.htm
Справочная информация на русском языке доступна здесь: http://office.microsoft.com/ru-ru/word/HP051894331049.aspx?pid=CH010268641049
Добавьте к этому:
1) Работу со стилями
2) Работу с таблицами и графическим файлами
3) Управление изменениями
4) Работу с полями
5) Интеграцию с почтовыми программами
И вы будете чувствовать себя легко и комфортно при выполнении заданий, ранее пугавших своей сложностью и непонятностью. Желаю успехов!
-
Интернет Эксплорер (IE) уже несколько версий подряд поддерживает удобную комбинацию клавиш Ctrl-Enter для добавления префикса "http://www." и суффикса ".com" к набранному вами имени домена. Например, набрав в строке адреса live и нажав Ctrl-Enter, мы попадем на сайт http://www.live.com.
Это удобно, но как же быть если я, например, гораздо чаще набираю в строке адреса домены зоны .ru (т.е. российские)?
В этом случае я могу сэкономить свое время добавив в ключе реестра HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Toolbar\QuickComplete строковое значение QuickComplete, равное "http://www.%s.ru".

Теперь, набрав в строке адреса live и нажав Ctrl-Enter, я попаду на сайт http://www.live.ru/ (который автоматически переадресует меня на правильную страницу для моего региона, и это, кстати, маленький кусочек того, над чем я работаю).
Проведенные эксперименты показывают, что, если набранное мною имя домена уже содержит "http://www.", IE ограничивается добавлением суффикса. Верно и обратное, если суффикс уже добавлен, IE добавляет только префикс.
Об этом и других "секретах" IE я узнал из блога одного из его разработчиков - Джефа Дэвиса, http://blogs.msdn.com/jeffdav/archive/2004/09/09/227502.aspx.
-
Всякий раз, когда я начинаю работать с MS Office на новой машине, первым делом (после отключения персонализирующихся меню) я записываю простенький макрос, позволяющий вставлять в документ текст из других документов и веб-страниц без сохранения форматирования.
Для MS Word 2007 работает макрос:
Sub PasteRaw()
Selection.PasteAndFormat wdFormatPlainText
End Sub
Тот же макрос для MS Outlook 2007 выглядит так:
Sub PasteRaw()
Outlook.ActiveWindow.WordEditor.Application.Selection.PasteAndFormat wdFormatPlainText
End Sub
В последнем случае нужно не забыть добавить в меню Tools\References ссылку на Microsoft Word 12.0 Object Library или заменить константу wdFormatPlainText ее числовым значением 22.
Для удобства можно добавить кнопку для запуска макроса на Панель быстрого доступа (Quick Access Toolbar) и назначить ей понятное название и картинку.