← All posts tagged Windows

Между прочим, программы, написанные на C и WinAPI, кроссплатформенны и переносимы между несколькими очень разными ОС… разработанными компанией Майкрософт. А именно: между 9x/ME, NT и CE. Рассмотрим их по порядку.
Первое — однопользовательская, поверх DOS’а, развитие идей 16-разрядных виндов. Уже давно сдохло (в 2005 году ещё).
Второе — вполне современная ОС, работает на разном оборудовании (сейчас на x86, amd64, Itanium, ARM, раньше поддерживались ещё Alpha, MIPS и PowerPC).
Третье — ОС реального времени, работает во всяких мобильниках и навигаторах (Windows Phone до версии 7.x включительно была основана на ядре Windows CE).
Таким образом, можно писать программы на C и WinAPI, которые можно скомпилировать под три разных ядра и они будут работать. Более того, между 9x/ME и NT для x86 есть и совместимость на уровне бинарных файлов — одни и те же приложения могут работать на разных ОС без перекомпиляции. А ещё можно писать и Win16-совместимые программы. Можно, но не нужно.

Житель Крайнего Севера в компьютерном магазине:
— У вас операционные системы есть?
— Есть.
— Многозадачные есть?
— Есть.
— Дайте, однако, трехзадачную!

С выходом Windows 7 я думал, что это анекдот про Windows 7 Starter. Теперь я понимаю, что это о Windows Metro: неактивные программы уходят в сон (если у них нет фоновых задач), одновременно максимум можно запустить только две программы (разбив экран пополам). В Windows 8.1 экран можно разбивать и на 3, и на 4 части, так что 8.1 — это четырёхзадачная ОС.

Чудеса обратной совместимости.

Почему система команд 8086 такая кривая, зачем регистры делятся на две половинки (al, ah, Ы, bh, cl, ch), зачем геморрой с сегментными регистрами и т.д.? Потому что когда Intel разрабатывала 8086, 8-битный процессор 8080 с 64K памяти был популярен и под него было написано много софта (например, Staredit, dBASE). Базовый регистр для адресации памяти у него делился на две половинки. Поэтому система команд 8086 была написана таким образом, чтобы программы под него можно было получить простой перекомпиляцией программ под 8080 — любой команде этого процессора можно сопоставить одну или иногда последовательность из нескольких команд процессора 8086. Это присказка, сказка ниже.

DOS разрабатывался таким образом, чтобы иметь совместимость с программами для CP/M, например, похож формат каталоговой записи, PSP комовских файлов, файлы con, prn, nul, com1, к которым можно приписать любое расширение. Т.е. когда был написан DOS, программное обеспечение под него УЖЕ БЫЛО!

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

WinAPI Windows NT в целом повторял WinAPI Windows 3.1, разница была только в разрядности некоторых типов (HANDLE, HWND и др.), но программы, работающие и там, и там, писать было можно. Кроме того, в Windows NT есть подсистема, позволяющая запускать досовские и Win16-приложения. Игры, конечно, не запустишь, но всякое корпоративное ПО шло нормально.

Windows 95 разрабатывалась для обеспечения полной совместимости с DOS, Win16, также поддерживался запуск большинства Win32-приложений из Windows NT. Поэтому вышла такая кривая. Тоже, пользователи, ничего не теряя (запуск досовых и 16-разрядных программ), получали профит, запуская и разрабатывая Win32-приложения (с моделью памяти flat и другими плюшками). Один из примеров совместимости: можно было создать такой ярлык досовской программы (.pif-файл), который при запуске перезагружал бы компьютер, запуская DOS с файлами config.sys и autoexec.bat, указанными в свойствах ярлыка! При последующей перезагрузке снова загружалась Windows.

Даже сейчас в 32-разрядных версиях семёрки и восьмёрки можно ограниченно запускать досовские и Win16-программы.

В голой (сразу после установки) Винде можно программировать.
Во всех Виндах — писать батники. В маздайках (9x/ME) — под command.com, в NT — под cmd.exe. В последних синтаксис помощнее и поинтереснее.
Начиная с Windows 98 можно программировать под WSH (Windows Scripting Host), т.е. на языках JScript (диалект JavaScript) и VBScript (Visual Basic-подобный синтаксис).
Начиная с Windows XP можно программировать на C#, компилятор последнего входит в предустановленный .NET Framework (лежит в %WINDIR%\Microsoft.NET\Framework\…). В более ранних версиях Винды фреймворк надо ставить отдельно.
Начиная с Windows 7 — на PowerShell. В более ранние версии Винды тоже ставится отдельно.

Натягивая сову на глобус.
В Windows 95 OSR2 есть IE3, поддерживающий JavaScript, т.е. можно писать интерактивные web-страницы.
В MS-DOS начиная с 5.0 присутствовал интерпретатор QBasic (не путать с компилятором QuickBASIC).

Если что-то упустил, поправьте.

У меня на компьютере есть виртуальная машина (Windows Virtual PC), в которой у меня установлены Windows ME и Norton SpeedDisk (оба пиратские). Время от времени я её включаю и делаю в ней дефрагментацию. SpeedDisk выполняет качественную оптимизацию файловой системы и показывает красивую карту диска.
На хост-системе (Windows 7, лицензия) установлен Raxco PerfectDisk 11, тоже лицензионный (купил на Софткее).

Не думайте, что у меня виртуалка только для дефрагментации. Я в ней время от времени в первую Халфу играю (детство вспоминаю, первый компьютер был с ME, я на нём играл в первую Халфу). Потом пройдя до конца, запускаю оптимизацию диска и наблюдаю как файлы, старея, переползают с начала в конец раздела (туда SpeedDisk перекладывает файлы, к которым не было обращения более 2 месяцев).

В Linux чуть ли не с 90-х годов была возможность форму элементов управления путём выбора различных тем. В Windows такая возможность появилась, начиная с Windows XP. Соответственно, за всё это время разные умельцы-дизайнеры наклепали большое количество тем оформления окон как под ту, так и под другую платформу. Но почему-то мне почти не попадались темы оформления для Linux, имитирующие классическую тему Windows (да и те, что попадались, были под LXDE и IceVM), и ни разу не попадались темы оформления под обе платформы, имитирующие Windows 3.1! А ведь гуй там красивый.

Третья моя претензия к реализации GTK под Windows. Когда я сворачиваю окно Pidgin'а, в списке окон, перебираемых по Alt+Tab оно оказывается не последним, а следующим. Поэтому Alt-Tab внезапно перекидывает снова на окно Pidgin'а. Грустно, когда кривые реализации ломают привычки.

В Виндах окно можно закрыть мышкой двумя способами: одним кликом мышки по значку [×] в правом верхнем углу экрана и двойным кликом мышки по иконке приложения в левом верхнем углу экрана (однократный клик в эту область показывает системное меню окна: свернуть, развернуть, закрыть…).
Я пользуюсь обоими способами, в зависимости от того, к какому углу ближе мышка (если я в данный момент орудую мышкой: сайты смотрю например).
Однако в Линуксе двукратный клик по значку системного меню не поддерживается (однократный работает), что несколько ломает шаблон. Грустно. :-(

Только что Пиджин явил глюк. Я решил написать пост про особенности GUI. Слово GUI орфография Пиджина подчеркнула. Я вызвал контекстное меню на этом слове и тут программа напрочь зависла. Причём меню не убиралось. Поскольку с таким глюком я ранее ни разу не встречался, то во всём обвиняю кривую реализацию GTK под Windows: она уже у меня вызывала нарекания в связи с поддержкой раскладки Бирмана.

Недавно я писал пост про то, что в юниксах есть отвратительная традиция хранить конфигурацию программы в домашнем каталоге, имя которого стартует с точки (ибо такой у них корявый способ скрытия файлов).
Меня пытались переубедить, что (а) сейчас все программы прячут свою конфигурацию в каталог .config, (б) под Виндами такой же срач.
В ответ на это я предлагаю такой скриншот: img684.imageshack.us . Слева Fedora, справа Windows 7. Каталоги Application Data, Cookies, Local Settings и некоторые другие являются символьными связями и ссылаются на подкаталоги AppData (а это значит, что через пару релизов Винды эти каталоги могут быть удалены). Файлы ntuser.* — это файлы ветки реестра HKEY_CURRENT_USER данного пользователя.

Как я уже писал в предыдущем посте (#1146789), время от времени я использовал компьютер в качестве дорогого радиоприёмника (поскольку слушал там онлайн-радио). Чтобы компьютер выглядел не так уныло, я включал у проигрывателя визуализацию.

Так вот. Winamp умеет при включённой визуализации отключать скринсейвер, и в итоге, сидя на кресле (или на кровати) в другом углу комнаты и читая книжку, я могу время от времени бросать взгляд на компьютер и созерцать психоделические картинки. А Rhythmbox под Линуксом такого не умеет — в итоге я созерцал скринсейвер.

Только что ходил есть (а точнее, чай пить) и мне внезапно вспомнилось четверостишие:

Товарищ, верь — пройдёт пора
Винды и ламерского софта!
И на обломках Майкрософта
Напишут наши имена.

Четверостишие, конечно, баянистое, но я не об этом. Я о том, что когда вернулся к компьютеру, мне по рекомендации пришёл пост #1024258.

В Windows 3.11 была простая и понятная оконная концепция, описываемая одним предложением: на рабочем столе находятся только окна запущеных приложений. Это позже чистое учение исказили еретическими панелями задач, кнопками «Пуск» и рабочим столом как папкой. Грустно.

Via #893037:
Оказывается, можно открывать некоторые папки в Windows буквально несколькими нажатиями клавиш. А именно, вводом короткой последовательности в окошко «Пуск-Выполнить» (оно всплывает по комбинации Win+R):
«\» — открывает корень системного диска (обычно диск С: ),
«.» — открывает профиль пользователя (переменная %userprofile%, обычно C:\Documents and Settings\UserName или C:\Users\UserName),
«..» — открывает каталог с профилями пользователей (C:\Documents and Settings или C:\Users),
«...», «....», да и вообще, сколько угодно точек больше двух — внезапно открывает Мой компьютер (действительно внезапно, т.к. предыдущие пункты объясняются исходя из относительных и абсолютных путей файлов).

О том, как можно сделать собственные короткие имена, много болтовни в комментах к оригинальному посту: #893037.