среда, 3 марта 2010 г.

7-ой RichEdit

Как-то рассказывал про розыск новейших версий RichEdit, которые в частности есть и в составе Microsoft Office. В частности тогда брался за жо… разыскивался RichEdit версии 6.0. А 6-ой RichEdit выгодно отличался от версии 4.1 тем, что не только умеет отображать сложные таблицы, но и хоть с переменным успехом, но и редактировать их. По крайней мере вполне сносно манипулирует отдельными столбцами.

В MSDN есть неплохая обзорная статья по разным версиям RichEdit и их отличиям. Правда, уж к слову говоря, Мюррей так тогда и не рассказал про возможности 7-ой версии RichEdit, но вот по неофициальной информации Microsoft все-таки спалилась, что новый RichEdit будет доступен в составе MS Office 2010. А я тут аккурат на днях и скачал его бета-версию. Ну, и конечно же, кинулся выискивать новый RichEdit.

С версиями как всегда неясно всё да туманно. Но два характерных “палева” все-таки на глаза попалось. Хоть и в новом офисе компонент по прежнему называется RichEdit 6.0, но версия самого файла все-таки новая. В 2010-ом офисе она уже 14-ая, а в 2007-ом была 12-ая.Версия RichEdit и версия DLL-файла - найди два отличия

 

 

 

 

 

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

Экспортируемые функции в новой версии RichEdit

Новый RichEdit в жизнь – “за работу, товарищи, за работу” ©. Правда, документацией по RichEdit Microsoft не очень-то озабочена. Найти инфу можно только в вышеупомянутом блоге Мюррея, да и то там она далеко не полная. Но все-же будем надеяться на существенные изменения.

Немного ссылок: на CodeProject.com появилась неплохая статья про использование новейших версий RichEdit  даже в такой старушке как Visual С++ 6.0. В принципе все написано толково – действительно все сводится к манипуляции с именем класса окна. Хотя и в этой статье опущены некоторые моменты: как менять используемую версию RichEdit на лету, непосредственно в коде создания окна да возможные траблы с загрузкой нужных версий DLL. Но в общем и целом, все расписано достаточно грамотно. Одобрям-с, хотя и не ново.

Информации о возможности распространения той или иной версии RichEdit в составе собственных продуктов как не было, так и нет. Помалкивают об этом мелкомягкие, упорно помалкивают. А это очень и очень жаль. Ну на “нет” и суда нет :).

PS: наваять что-ли парочку-троечку статей по использованию RichEdit!?! Все-таки на RSDN.ru эти вопросы поднимаются регулярно…

четверг, 25 февраля 2010 г.

Регистрация, цены vs инвалиды

Как-то был разговор, стоит ли давать бесплатную регистрацию инвалидам. Опять же и на RSDN.ru это вполне горячая тема. В тот раз меня снедали сомнения – а стоит ли? Как в старом фильме: “Где этот чертов инвалид? Ну я инвалид”. Однако некоторое время назад все-таки рискнул пойти по иному пути. Ну хотя бы просто из человеческого любопытства.

А дело было так. Сваливается в почту uninstall feedback вида, что Aml Pages нравится, но вот дороговато немного. Ну и с фразой в конце, что так мол и так, человек является инвалидом. В-общем, все мы люди, все мы человеки. Все понятно – ну действительно, ведь так бывает – хорошо, но мало (денег).

В ответ поинтересовался, какую бы цену предложил сам пользователь, благо емейл для связи он указал. Приходит ответ, что пол-цены годиться. Дальше от пользователя следует такая реплика: Aml Pages ему понравилась; он ценит труд и все-равно хочет отблагодарить; но не считает возможным “обкрадывать” разработчиков аж на пол-цены. Поэтому он предлагает так: в своем онлайн-сообществе он находит второго покупателя, они скидываются на одну цену, но получают два отдельных ключа. Как бы и я не в накладе, и пользователи довольны. К слову, uninstall feedback иногда и таким образом отрабатывает…

Сказано – сделано! Через пару дней приходит оплата за одну копию, но с двумя именами для регистрации. Инвалиды довольны – я тоже. В конце концов, Сполски советует – увеличивайте не число продаж, увеличивайте деньги. Вуаля! Только вот один вопрос: такие уж они “инвалиды”? Инициативные, взвешенные и разумные люди! Воистину, назначить себя инвалидом человек может только сам.

PS: мораль понятие не монетизируемое, но она тоже чего-то да стоит. Всё, конечно, продается, но не всё покупается. И вообще: “делай добро и бросай его в воду”.

понедельник, 22 февраля 2010 г.

Aml Pages vs LeaderTask

Неоднократно уже говорено, что каждый софт должен заниматься своим делом – “хороших” комбайнов не бывает. Кесарево кесарю, а слесарю слесарево. В частности, напрочь не хотелось заниматься планированием и управлением задачами непосредственно в Aml Pages. Как в свое время метко сказал один из моих маститых бета-тестеров – “Aml Pages – это оперативный блокнот”, а какое может быть в блокноте планирование? Наброски, заметки – это да. Но сие не “госплан”. Перепробовал я всяко разного софта для планирования, и в конце концов все же остановился на LeaderTask (однажды упоминал и ToDoList – но уж “исвените пожалста” – в нем не просто убогое юзабилити, как только начинаешь работать с ним хоть чуточку интенсивнее, это уже просто ппц какой-то. Да простят меня авторы ToDoList).

Расписывать фичи LeaderTask можно бесконечно: приличный уровень юзабилити, продуманность софтины, ну и отзывчивый саппорт (отдельное и самое искреннее спасибо Дмитрию Маслову). Но во всех планировщиках есть одно и то же слабое место: прежде чем записать, приходится сначала продумывать как и где разместить новую задачу (проект, ветка и.т.д.), тогда как часто нужно просто по быстрому сбросить заметку. А разгребать детали – проекты, категории, сроки – уже после. Хотя стоит отметить, что в LeaderTask и этот момент вполне удобен.

Но все же, все же, все же. Ну привык я, записать задачку и забыть. Но забыть можно мне, а не тому софту, в который записал. Причем записать нужно шустро, ну нет времени отвлекаться от основной задачи, не до того просто. Посему по-прежнему и пишу в Aml Pages. А там уж, когда время будет, разгребу – благо инструментов в Aml Pages навалом: и запись в липкие листочки, и быстрое открытие документов, и многочисленные фильтры для выборок.

Раньше в процессе разгребания таких записей постоянно приходилось копи-пастить текст из Aml Pages в LeaderTask. Но теперь и с этим покончено – написал себе новый плагин Aml2LeaderTask. Работает как часы: выделяем текст в Aml Pages, правый клик, “Сохранить в LeaderTask” и все готово. Новая задачка уже сохранена в LeaderTask. Да здрям интеграция! Aml Pages и LeaderTask – братья навек!

Разработчикам LeaderTask: во-первых, даешь папку “Входящие” в персональной версии LT! Без нее скинутые извне задачи пока разбирать не так-то удобно. Во-вторых, так держать – LT действительно лидер области!

среда, 10 февраля 2010 г.

Portable-версия – легко и непринужденно

Портабельная версия - быстро и просто Несколько раз пользователи Aml Pages просили меня выпустить портабельную версию программы. Про Aml Maple и вовсе уж говорить не приходится – результаты голосования более чем красноречивы. Но с “Маплей” как раз все было проще – она изначально всю жизнь была именно портабельной, банальный ZIP-архив со всеми нужными файлами (версия с инсталлятором появилась с пару месяцев назад, да и то больше из-за буржуев).

Совсем другое дело с Aml Pages. Мало того, что она 100 лет в обед поставляется с программой установки, так у нее еще и есть определенная организация файлов: плагины в папке Plugins, синтаксическая подсветка рядом с exe-шником и.т.д. Совсем худо в том, что при первом запуске Aml Pages должна совершенно по разному инициализировать некоторые настройки в стандартной версии, и в портабельной. К примеру: отключить автосохранение на флешку, резервные копии, да и выставить сохранение настроек в ini-файл, а вовсе не в реестр Windows.

Можно сколько угодно писать инструкцию, как перенастроить софт для портабельной версии – но пользователи все равно ее не прочтут (нарушат, ошибутся – нужное подчеркнуть). По уму портабельная версия должна сама верно проинициализироваться. Ну свойственно людям ошибаться – и тут ничего не поделаешь. Но вот минимизировать риск ошибки можно, и должно.

Расскажу-ка как я выкрутился с проблемой портабельности в Aml Pages. Тут вот какое дело: в Aml Pages есть прозрачный движок для чтения и записи пользовательских настроек. Ему абсолютно по барабану куда и откуда читать и писать настройки – что в ини-файл, что в реестр Windows. Конечно, у каждого способа есть свои плюсы, и свои минусы. Выбор того или иного варианта производился в конкретной строке кода – затем вся запись и чтение настроек уже были независимы для любой ветки кода.

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

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

  1. Набиваем ZIP-архив всеми необходимыми файлами, ну и если нужно распихиваем их по нужным субдиректориям в архиве.
  2. Добавляем bat-файл с каким-нить “говорящим” названием RUN_PORTABLE.bat. Да еще и специально его именуем в верхнем регистре, дабы пользователю ну просто в глаза бросался.
  3. В батнике пишем банальнейшую инструкцию запуска такого вида:
    бинарник.exe /run_portable
  4. Ну и напоследок не забываем вложить в ZIP-архив вразумительный ReadMe, в котором указываем, что для портабельной версии нужно пущать программу именно через bat-файл.

Уловили в чем фишка? Все крайне просто. Кто обычно пользуются портабельными версиями? Угу –  продвинутые пользователи! Полагаю, в подавляющем большинстве им известно, что такое bat-файл, ну и поясняющий ReadMe лишний раз напомнит. Опять же такие пользователи, как правило не ленятся пошариться по ZIP-архиву, посмотреть что к чему, почитать ReadMe.

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

Согласитесь, по соотношению цена-качество подход впечатляет – 2-3 строки кода, батник и портабельная версия готова. Хотя, есть и ограничения этого подхода – “так-то оно да, а так-то нет” (©). У меня нет COM-объектов, который кровь из носа надо регистрировать. Да и абсолютно пофигистичный код чтения\записи настроек – что в реестр, что в ини-файл – есть уже ну очень давно, да и вылизан до идеала.

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

Cсылка по теме: обсуждение портабельности на RSDN.ru.

PS: вместо дисклаймера – авторство идеи ключа командной строки не мое, подсмотрено где-то в сети. Но все гениальное - просто!

среда, 3 февраля 2010 г.

Бесплатная бета – быть или не быть?

Однажды упоминал, что немцы это почти половина покупок моей Aml Pages на Западе. Угу. Так и было… Сглазил, йоптыть :(. Покупки из Германии как отрезало.

Ну, а тем временем во всю несется бета-тестирование новой версии Aml Pages 9.15. Стоит отметить, что бесплатных бета-версий у меня уже сто лет в обед нет. Со скидкой – это да, беты со скидкой. Но не бесплатны. Но вот какая родилась мысль: а не сделать ли немецкую версию Aml Pages на период бета-тестирования полностью бесплатной, и безо всяких триальных ограничений? Warum nicht, как говориться?

  • Бесплатная версия – что может быть лучше для продвижения?
  • Продаж в Германию все равно нет, так что вроде ничего не теряю.
  • Прямых ссылок на немецкую бета-версию на файлопомойках нет, по той простой причине, что именно немецких бет никогда не выпускалось. Только релизы. Соответственно, новость о бесплатности немецкой беты не разнесется со скоростью света. Хорошо это или плохо – а вот это как посмотреть…
  • Немецкий – это вам не английский, и даже не Си. На немецком народу говорит немало, но и не так чтобы по всему миру: Германия, Швейцария, Чехия, Прибалтика, отчасти Скандинавия и всё-ё-ё-ё. Больше-то и нету никого, можно даже сказать, немецкий это почти что исчезающий язык :).
    С одной стороны бесплатность немецкой беты – это продвижение и именно для германской аудитории. С другой стороны все остальные – включая наших – по боку. Просадки продаж вроде бы быть не должно (ведь беты всходят и заходят, а кушать хочется всегда).

Вот такие вот резоны. Вроде как веские. Вроде как всё в масть. Но все равно в размышлениях… Извечно, немецкий русский вопрос: “что делать?”. И извечно русский ответ: а хрен его знает! :) В общем, думаю.

PS: аккурат годная ссылка в тему вспомнилась: обсуждение вопроса бесплатности бета-версий на RSDN. Тоже дилемма почти Шекспировская – бесплатны беты аль нет, вот в чем вопрос.

пятница, 22 января 2010 г.

Обратная связь или никогда так НЕ делайте

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

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

По ходу писания новой версии доводил до ума взаимодействие Мапли с некоторым капризным софтом. В частности на днях пал и The Bat, на очереди Microsoft Word и остальные. Ну и между делом прислали подобный же репорт на NuSpere PhpEd. ОК! Скачал, поставил, посмотрел. И забыл!

Проходит пара месяцев, ну думаю, пора добить мерзавчика. Запускаю этот PhpEd, а он зараза такая начинает ругаться на истечение триала. Но позвольте! Какого нах такого триала, я им и вовсе не пользовался – тот же PHP-код я обычно пишу в ничуть не менее удобном HippoEdit. Все понятно – привязались, видимо, к дате установки. Ок, период с даты установки давно прошел – да только я так ничем и не пользовался и не пробовал. А тут “давай бабла”. Ага, щазз, уже понес!

Ладно, лиха беда начало. Вижу следующую фичу – запросить продленный триальный ключ. Годиться. Запрашиваю. Описываю ситуацию – что ключ мне нужен исключительно триальный, чтобы проверить совместимость их капризной софтины с моей Маплей.

Получаю ключ. Ввожу. Ан фиг! Оказывается, емейл у меня не от того ключа. Ну, конечно епрст, если я его 15 минут назад запросил и получил именно на этот емейл. Отвечаю на письмо с ключом, на адрес вида JohnDue@nusphere.com. Уп-п-с, в ответ прискакивает репорт от сервера что такого ящика не существует. Ладно, пох! Опять валю в форму на их сайте, пишу что так мол и так, ключ не валиден. Опять ответ, что ключ таки валиден, но уже от VasjaPipkin@NuSphere.com. Ключ валиден – кто б спорил!?! Только вот софтина почему-то считает иначе. Ладно – поехали дальше. Сделал скриншоты: как, куда и откуда ввожу ключ, прокомментировал их прямо в рисунках, гружу скриншоты на тот же адрес VasjaPipkin@NuSphere.com.

И что Вы думаете? Опять двадцать пять - “no such user”. Топаю в форму обратной связи на их сайте – понятное дело, приатачить файл скриншота там попросту нет возможности. Пишу им через форму, так мол и так - как мне отправить скриншоты с моей проблемой? Отвечают: “чувак грузи на support@NuSphere.com”. Ага млин, а то я этот адрес сам еще не догадался проверить. Ладно, сказано – сделано! Зипую скриншоты, отправляю на support@NuSphere.com

Уже догадались что дальше? Все верно – “No Such user support”. Вот так вот! Неделя прошла, а с места не сдвинулись.

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

Обращали ли вы внимание, что любая веб-форма не отличается удобством писания большого текста. Ну, а сохранность написанного!?! Чуть что не так – страницу закрыли, браузер упал – все написанное пером уплыло вместе с [подставь_слово]. В вторых, практически любой почтовик умеет хранить черновики – т.е. Вы можете сочинять свое посланиие сколь угодно долго, чего никакая веб форма отродясь толком не умеет. Наконец, да уважайте если не пользователя своего, то хотя бы его кошелек – он же именно из него Вам платит. А если у него повременка (да, да и такое бывает). Нравится ему писать репорты так как он хочет – ну дык пожалста. Вам-то какая разница, как он их пишет? Зачем линчевать пользователя безо особой на то необходимости?

От себя скажу: что когда-то у меня появилось мыло для поддержки, когда-то форум, когда-то форма обратной связи. И все я переживал как-то – что мол бедная абстрактная Маша_Иванова ни никак не разберется куда писать: в форму, в почту или в форум? Не-а! Нету такой проблемы и вовсе – она (эта самая абстрактная “Маша_Иванова”) и разбираться не будет. Она будет писать туда, куда ей удобнее. А я, со своей стороны, хОчу (ударение на первом слоге) репорт от “Маши Ивановой” – оно мне надо!

Дык какого же, скажите на милость, пользователь должен уважать мое “хочу” и более того пытается, а разработчик пользовательское “хочу” не обязан? Что-то не понял: кто кому денег платит?

В случае с NuSphere все эти проблемы к тому же безо всяких на то веских причин! Только не надо про спам на публичный email! Если эти “разработчеги” из NuSphere не могут со спамом справится, то о чем тут говорить – да и в любом случае это их проблема, а не пользователя.

К слову: у меня есть не просто пользователи Aml Pages, а просто “золотые” пользователи! Мы общаемся уже годами – и все три способа связи распрекрасно сосуществуют вместе. Кого-то больше устраивает форма обратной связи, кому-то нравится форум, кто-то предпочитает почту. И нет никакой проблемы ни спама, ни “проклятья выбора” – а вот фидбек налажен.

Я не PHP-кодер, но как Вы думаете, возгорелся бы я желанием покупать этот PHP-редактор в NuSphere, если бы он был мне нужен? Ответ очевиден. Юзайте HippoEdit – хороший и разный… И бесплатный для соотечественников! И с отзывчивым саппортом! С быстрым баг-фиксом…

Любите природу пользователя – мать Вашу!

PS: как писал выше, этот пост не сегодняшний – в черновиках провалялся уж с середины декабря точно, а опубликован только сейчас.

Так что теперь вполне можно подвести некоторые итоги: проблемы связи с этими “разработчегами” за почти полтора! месяца так и не были решены. Зато от них анонсы и прочий хлам рекламно-новостного характера валится в почтовый ящик теперь просто регулярно. Зачем? Почему? Всего лишь относитесь к пользователю хоть чуточку с уважением, и оно вернется к вам же сторицей, и в том числе и в денежном эквиваленте.

вторник, 29 декабря 2009 г.

Автоматическое обновление и вечный косяк

Большинство современного софта вполне умеет обновлять самое себя через Интернет. Как сделать такое обновление вопрос широких дискуссий. Может быть это будет как в The Bat – просто проверка новой версии на сайте, может как в Google Chrome – скачивание и полностью автоматическая установка новой версии в фоновом режиме. В общем, кто во что горазд.

Но неизменно одно – софтина для обновления обязательно должна выйти в сеть. Без этого никуда. И сколько я перепробовал софта – у всех до единого один и тот же косяк. Если Ваш IE выставлен по умолчанию в offline режим, то софт не может выйти в сеть, и соответственно не может ничего обновить. И не важно из чего это самое “ничего” состоит: из репорта о доступности новой версии, или же это полная установка в фоновом режиме. Обновление не работает и всё тут, самый такой натуральный ППЦФ (“пипец фиче” – фича есть, фича могет, фича модная – только ни хира не работает).

И вот в этом случае, вот совершенно не нужно кивать что мол “только у тебя Гоха IE в вечном оффлайне” (© Arsen). Да мне пофиг! У меня есть свои причины в оффлайне его держать – и причины очень весомые. И тем не менее, несмотря на никакой оффлайновый режим IE, обновление в моей Aml Pages всегда работает.

Поскольку уже подзаколебало писать репорты коллегам – причем коллегам мною весьма уважаемым – про подобные траблы с обновлением, попробую-ка рассказать, как я решал эту проблему в Aml Pages. Опять же да здрям повторное использование кода – будет на что сослаться :), а не кропать заново.

Вкратце: в Aml Pages все обновление сводится к скачке файла с инфой о новых версиях. Дальше уже все на усмотрение пользователя – ставить или нет, посмотреть список изменений и.т.д. Ну да не в этом суть – файл с инфой скачать придется по любому, и обойти оффлайновый режим IE надо.

Оговорю сразу. Существует два вида проверки новой версии: автоматическая по прошествии сколько-то там дней, или ручная, явно запущенная пользователем из команды меню.

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

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

Можно сказать и кратче: есть новая версия? ОК – нужно об этом сказать пользователю. Нет новой версии, нет соединения, поврежден скачанный файл с информацией – все эти подробности ни на хер не нужны. Представьте, сидит себе пользователь, делает что-то свое и вдруг откуда ни возьмись на тебе репорты: “Нет соединения”, “Новых версий не обнаружено”. Да зачем ему вся эта инфа как черт из табакерки – нет и и нет, и нечего пользователя беспокоить.

Автоматическая проверка нужна только для одного: появилась новая версия – скажи, нет новой версии (и не важно по какой причине) - дык и не трахай мне мозг не беспокой меня.

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

И опять все просто до неприличия: раз пользователь сам запустил проверку новой версии, он явно желает увидеть результат своих действий. И вот тут, коллеги, ну не на фиг не нужно показывать информацию вида “не шмагла падключица к сети”. Тем более, что софт может и сам проверить в каком режиме находится IE – в оффлайн или в онлайн. Т.к. если в оффлайн, то эту проблему софт может и сам решить самостоятельно.

Элементарно, Ватсон! Делается это просто – всего лишь единственным вызовом API-функции InternetGoOnline!

    BOOL InternetGoOnline (LPCTSTR lpszURL, HWND hwndParent, DWORD dwReserved)

В первом параметре нужно передать URL, по которому собрались обновляться. Второй параметр это HWND окна нашей софтины, он понадобится для сообщений. Третий параметр MS зарезервировала на будущее. Если есть подключение к сети – функция сразу вернет TRUE, в противном случае – FALSE.
Работает эта достославная функция следующим образом:

  • Если подключение к сети уже есть, она сразу вернет TRUE, причем безо всяких подтверждений. В этом случае можно быть уверенным, что IE уже в онлайн-режиме и начинать коннектиться к сайту.
  • Если подключения нет, то функция выдаст MessageBox “не желаете ли подключиться”. Именно для этого и нужен второй параметр с HWND нашего окна. Если пользователь согласится, то функция выполнит подключение и вернет TRUE. Если пользователь откажется – вернет FALSE.

В автоматической проверке вызовом InternetGoOnline, конечно же, грешить не стоит. Еще чего не хватало, чтобы исключительно вспомогательные и фоновые задания доставали пользователя запросами. Не удалось подключиться, и хрен с ним ладно. Совсем другое дело проверка, запущенная пользователем ручками. В этом случае пользователь принял решение сам, в этот момент его внимание по любому приковано к проверке, и он точно ожидает какого-то отклика. Вот в таком случае, имеет смысл и позвать InternetGoOnline – возможные MessageBox ну никак не смутят пользователя, он все равно ждет ответной реакции от софта. Дык почему б и не спросить, если известно что проблема “на этой стороне”? Это точно лучше, чем сказать невразумительное “ошибка соединения”, тем более что эта “ошибка” решаема здесь и сейчас.

Блин, сколько видел вполне толкового софта – все до единого на этом спотыкаются. И HippoEdit, и LeaderTask и многие другие. Долой непонятки – тем более что их решение, это всего две строки кода.

Вместо дисклаймера: мысль, о том что IE в оффлайн у очень немногих -  совсем не катит. Отмазы это для начальства, а не для пользователей.
Проблема тут вовсе не в дилемме “оффлайн vs онлайн” самой по себе – проблема тут исключительно в последствиях. Почему так, разговор длинный. Но если в двух словах: у кого IE запросто может быть в оффлайне-режиме? Да у гиков! А лично вам нужно чтобы именно гики не могли скачать новейшие апдейты?

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