windows
Отмена пуска
Недавно, в связи с обсуждением адекватности перевода кнопки «Start» → «Пуск» в «Виндоуз 95» в одном из телеграмных чатов, я вспомнил, что в ранних версиях этой системы был забавный баг — кнопку «Пуск» можно было убрать с экрана, закрыв как приложение.
Для этого надо было установить на ней фокус, нажать Alt+- и выбрать пункт «Закрыть». Мы в те годы иногда так подшучивали над друг другом или над студентами в компьютерных классах Университета, где я тогда лаборантил.
Кроме этого «Пуск» можно было ещё и двигать. Например, поставив её посередине панели задач. И это задолго до «Виндоуз 11»! Правда нормально это не работало — при запуске приложений «Пуск» пропадала за ними.
«Гопник-2»: адаптация под Windows
В итоге, вчерашняя мысль адаптировать
Несмотря на то, что «Чат» у меня последней, четвёртой версии, всё равно, даже на простых примерах он допускает совершенно детские ошибки, — не подключает нужные заголовочные файлы (мы программировали на Си), упускает важные части.
На скриншоте у меня как раз такой пример — он не скомпилируется
Вот как в итоге стал выглядеть этот кусок после нескольких уточняющих вопросов и гуглежа:
#ifdef __MINGW32__
HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
DWORD mode = 0;
GetConsoleMode(hStdin, &mode);
if (echo) {
mode &= ~ENABLE_ECHO_INPUT;
} else {
mode |= ENABLE_ECHO_INPUT;
}
SetConsoleMode(hStdin, mode);
int ch = _getch();
if (ch == 0x03) // Ctrl+C
{
printf("Ctrl+C hit, exiting...\n");
gracefulexit();
}
return ch;
#endifКак бы то ни было, с помощью нейросетей
#ifdef __MINGW32__
SetConsoleCP(CP_UTF8);
SetConsoleOutputCP(CP_UTF8);
setvbuf(stdout, nullptr, _IONBF, 0);
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
DWORD mode = 0;
GetConsoleMode(handle, &mode);
SetConsoleMode(handle, mode | ENABLE_VIRTUAL_TERMINAL_PROCESSING);
#endifПришлось полностью выключить буферизацию, чтобы нормально отрабатывал printf с
Насколько я понял то, что написано в интернете, у консоли Виндоуз до сих пор большие проблемы с кодировкой
Из заметных багов — игра падает при попытке загрузки сохранения и совсем не работает ввод русских букв. Второе мне нужно только одном месте (где запрашивается ввод имени игрока), так что есть надежда это починить. Остальное как будто работает.
Как открыть файл в формате HLP
Потребовалось открыть файл в древнем формате HLP. Оказавается сейчас его ничего не открывает, даже операционная система Виндоуз, под которую он
Возможно существует
diff --ignore-blank-lines --minimal -urd a/winhelpcgi/dib2png.c b/winhelpcgi/dib2png.c
--- winhelpcgi-1.0/winhelpcgi/dib2png.c 2004-06-15 11:38:40.000000000 +0400
+++ winhelpcgi-1.0-patched/winhelpcgi/dib2png.c 2018-11-03 13:59:03.405031382 +0300
@@ -85,7 +85,7 @@
/* Set error handling. REQUIRED if you aren't supplying your own
* error hadnling functions in the png_create_write_struct() call.
*/
- if (setjmp(png_ptr->jmpbuf))
+ if (setjmp(png_jmpbuf(png_ptr)))
{
/* If we get here, we had a problem writing the file */
png_destroy_write_struct(&png_ptr, (png_infopp)NULL);
@@ -93,7 +93,7 @@
}
/* Set the I/O callback function to transfer directly to memory */
- png_set_write_fn(png_ptr, (voidp) sbout, user_write_data, NULL);
+ png_set_write_fn(png_ptr, (png_voidp) sbout, user_write_data, NULL);
/* Get access to the windows DIB data */
lpbmi = (LPBITMAPINFOHEADER) GlobalLock(hDIB);Утилита с грехом пополам преобразовала файл в нечитаемый ХТМЛ, который пришлось перекодировать:
/usr/local/bin/winhelpcgi.cgi --tar HELP.HLP |
php -r 'echo mb_convert_encoding(strtr(stream_get_contents(STDIN), ["\0"=>""]),
"CP1252", "HTML-ENTITIES");' > help.htmlПосле этого читать можно, но если
Windows 10
Ну слушайте, «Виндоуз 10» — это
История началась одним прекрасным вечером, когда «восьмёрка» превратилась в «десятку» и первым делом выкинула драйверы обоих наших принтеров. Прекрасно, я водрузил их обратно.
Потом она решило, что нашего у монитора (LG 29EA93)
В декабре перестала работать клавиатура. Причём
А недавно я обнаружил, что «Параметры экрана» и «Персонализация» не запускаются, оказывается это проблема тех, кому не повезло перейти на «десятку»
Windows XP живее всех живых

Сериал «Светлячок», действие которого происходит в 2517 году. На экране управления мусоровозом — Виндоуз ЭксПи (если не ошибаюсь), мастер настройки принтера. Так что, ребята, эта ОС (и шестой эксплорер с ней), не умрёт никогда, по предсказанию фантастов!
Windows Powershell
Вчера ночью смотрел на Windows Powershell. Красивый, мощный, удобный язык командной строки («песню о пиве» я уже написал). Очень понравился, изучается очень быстро, позволяет многое. Основная идея — конвееры, по которым ходят не строки (как в Linux/Unix), а объекты. То есть вы можете получить список процессов, отфильтровать их не как текстовые строки, а как набор объектов — по свойствам, дальше, ну, к пример, отсортировать
Очень хорошо называются командлеты, например,
Язык слаботипизированный, но можно и жёстко задавать тип (например, в параметрах функций), если хочется.
Кардинально решена проблема с безопасностью (язык мощный, сразу спровоцирует написание вирусов) — файлы этого языка (расширение — .ps1) не запускаются, а открываются в блокноте. Запуск команд возможен или из оболочки руками или довольно нетривиальными способами (простой юзер не справится).
Windows 7: repair screen
Ну, раз так, давайте я

Кардинальное различие в том, что когда раньше Windows
Видимо, сейчас (по крайней мере, если физически всё исправно и загрузочный сектор винта цел) ничего такого не надо. Ура.
P.S. Чтобы не гадали
Мне интересно, что бы мне потребовалось сделать, если бы у меня сломался (единственный)
DLL попадают в ад, а SO — в рай

На блоге «Дурдом 2.0» автор критикует замшелую точку зрения, согласно которой, Windows приходится переставлять каждые пару месяцев. И правда — у меня Windows XP, на компьютере за котором я сейчас сижу, установлен с первого мая
Бесполезная надстройка
Не могу не украсть с Cooler:
Источник: «Персональные ЭВМ в инженерной практике». — М.: Радио и связь, 1989г.
«…Одним из примеров громоздкой и, по мнению авторов, бесполезной надстройки является интегрированная система WINDOWS фирмы Microsoft. Эта система занимает почти 1 Мбайт дисковой памяти и рассчитана на преимущественное использование совместно с устройством типа „мышь“… …Таким образом, читатель уже понял, что среди надстроек над ДОС бывают довольно бесполезные системы, которые только выглядят красиво, а на самом деле отнимают время пользователя, память на дисках и оперативную память ЭВМ.
Обманчивая красота таких систем, однако, сильно воздействует на неискушенных пользователей, которые не имели практики работы на машине. Инерция мышления бывает столь сильна, что авторам приходилось наблюдать, как люди, начавшие работать с подобной настройкой, впоследствии с трудом заставляют себя изучать команды ДОС. Хочется предостеречь от этой ошибки читателей…
Отключение Caps в Windows
Я печатаю вслепую, но не десятипальцевым методом, а… в общем, задействую я, в лучшем случае, пальцев шесть и, редко, но бывает — промахиваюсь. Более всего раздражает, когда я промахиваюсь по Shift и попадаю на Caps Lock — особенно, если смотрю не на экран и клавиатуру,
Для меня Caps Lock — клавиша бесполезная, когда мне нужен верхний регистр, я просто зажимаю клавишу Shift и преспокойно печатаю текст оставшимися пальцами. Поэтому, когда я случайно наткнулся на способ программного отключения клавиши Caps Lock в Windows, я немедленно скачал соответствующий файл.
Вкратце: идём в реестр, находим там ключ
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout
и записываем туда ключ «Scancode map» (тип — бинарный) со следующим значением:
00,00,00,00,00,00,00,00,02,00,00,00,00,00,3a,00,00,00,00,00
Хардлинки в WinXP
Я очень часто начинаю разрабатывать проект под Windows и заканчиваю — под Linux или freeBSD. Конечно, даже на уровне PHP, между этими группами операционных систем есть существенные различия. Обычно, они легко преодолеваются. В последнем проекте мне более всего не хватало функции link.
Поэкспериментировав с w32api и ffi, я понял, что этот путь — тупиковый. Побродив по поисковикам, я выяснил, что простейший выход — использовать в качестве заглушки утилиту fsutil из Windows XP. У неё есть параметр «hardlink create», позволяющий создавать ссылки.
if (PHP_OS == 'WINNT' && file_exists($_ENV['windir'].'\system32\fsutil.exe'))
{
function link($target, $link)
{
$cmd = $_ENV['windir'].'\system32\fsutil.exe hardlink create';
exec ($cmd.' "'.$link.'" "'.$target, $out, $ret);
return !$ret;
}
}В случае, если вы будете использовать эту функцию в проекте, будьте осторожны — это всего лишь заглушка.
WinAPI и PHP
Так случилось, что в PHP существует три модуля расширения — два для PHP4 и один для PHP5, позволяющих обращаться к Windows API. Способы их вызова различны, плюс ко всему, положение усугубляется тем, что модули расширения имеют одинаковые имена, документация есть только по первому из них, тогда как в комплект PHP включается второй.
Ниже — результат моей потребности выяснить как же это всё работает. Прежде всего стоит заметить, что w32api не работает с mod_php, если старая версия вызывает ошибку при попытке повторного вызова в то же child, то новая вызывает ошибку сразу. В режиме CGI и с PHP5 я таких экспериментов не проводил.
Итак, ниже — реализация функции link (hard link) для Windows NT. Под CLI пример работает как с PHP5, так и с PHP4. Конечно, для того, чтобы пример заработал, нужна файловая система, поддерживающая hard links. Под моей NTFS5 (Windows XP) ссылки ставятся.
// Written by Evgeny Stepanischev (aka BOLK)
if (PHP_OS == 'WINNT') {
// Модуль расширения FFI для PHP5
if (extension_loaded('ffi') || intval(PHP_VERSION) >= 5 && @dl('php_ffi.dll')) {
function link($target, $link) {
$api = & new ffi("[lib='kernel32.dll'] int " . "CreateHardLinkA( char *link, char *target, long *attr);");
return (bool)$api->CreateHardLinkA($link, $target, NULL);
}
} else
// Модуль расширения w32API для PHP4
if (extension_loaded('w32api') || @dl('php_w32api.dll')) {
// Старая версия модуля
if (function_exists('w32api_register_function')) {
if (!function_exists('CreateHardLinkA')) {
@w32api_register_function('kernel32.dll', 'CreateHardLinkA', 'bool');
}
if (function_exists('CreateHardLinkA')) {
function link($target, $link) {
return CreateHardLinkA($link, $target, NULL);
}
}
} else {
// Новая (примерно с версии PHP 4.3.0)
function link($target, $link) {
$api = & new win32;
$api->registerfunction("bool CreateHardLinkA" . "(string &link, string &target) From kernel32.dll");
return $api->CreateHardLinkA($link, $target);
}
}
}
}Что отвалится после SP2
Документ от Microsoft «Programs that may behave differently in Windows XP Service Pack 2» («Программы, которые, возможно, будут работать иначе в Windows XP после установки SP2).
У меня есть подозрение, что всё дело во встроенном в Windows XP firewall, который несколько расширил свои функции в SP2. В списке есть почти все наиболее известные программы для работы с Сетью — firewall, прокси, IM,
У комсомольцев своя правда
Из «Комсомольской правды»:
Программисту важно уметь разрабатывать приложения Microsoft. NET (MCAD) и знать один из языков программирования — С++, C# или Java — базовые знания по ним дают в вузах. Системный администратор должен уметь обслуживать компьютерные сети, а для этого получить сертификат Microsoft по Windows Server 2003.
Студентам-«лирикам» тоже не стоит отчаиваться: есть программы, которые рассчитаны на тех, кто с <компом> не дружит, но очень хочет. Для начала стоит освоить базовый уровень компьютерной грамотности (офисные программы, Интернети Web-технологии) — это довольно просто.
Так мы узнали, что языка программирования всего три, системные администраторы — это те, кто имеют сертификат Microsoft по Windows 2003, а Интернет
Хибер. Нате
Жаль, но в то время эта задача была практически невыполнимой, а то бы я, возможно, уже сказочно разбогател. :) Или не я. Вряд ли мне принадлежит первенство в рождении этой идеи. Как показала практика, трудность не в сохранении дампа базовой (как тогда это называлось) памяти и содержимого XMS, да и с сохранением состояния контролера клавиатуры и прерываний (как не странно некоторые игры перепрограммировали и то и другое) я бы справился. Мне помешал защищенный режим и оставшееся оборудование.
Сначала на моем пути встал EMM386, этот менеджер VCPI— и EMS-памяти переводил процессор в защищенный режим (protected mode). Программировать под него я не умел, но из того, что знал, я сделал, может быть ошибочный, вывод — я не смогу после восстановления состояния компьютера сделать «так как было». Я решил на защищенный режим «забить» и загружать содержимое EMS уже после старта DOSа и самого EMM386. VCPI я не трогал, да он нигде и не использовался.
Потом появился DOS4GW. Его требовали DOOM и другие игрушки. Эта библиотека (или как это еще назвать?) так же использовала для своих темных дел защищенный режим. Я узнал слово «DPMI». С DPMI так же легко как с EMS я работать не умел, не было документации. Это стало первым гвоздем в гроб моей идеи.
Вторым, и последующими гвоздями, оказалось оборудование. Слово драйвер тогда рождало несколько другие ассоциации, ни о какой универсализации работы с оборудованием речи не шло. Так что нелегкий труд по опросу и сохранению состояния
Шли годы…
Незаметно появилась и вошла в нашу жизнь ОС Windows. Операционная система встала над защищенным режимом. Слово «драйвер» получило другой смысл, прослойка между операционкой и оборудованием… Слова XMS, EMS и VCPI стали забываться, а DPMI — расшифровываться
Идея «
«Здорово», — подумал я, и отправился в недра настроек своей W2K — искать, где у меня спрятан этот самый режим. Найти с первого раза мне его не удалось. Пришлось идти в большой Интернет и читать. Все оказалось просто. Оказывается, по умолчанию возможность использования этого режима отключена. Так исторически сложилось. А для его включения необходимо выполнение двух условий:
- все оборудование, включая материнскую плату, должно уметь работать с ACPI;
- BIOS, который на этот самой плате стоит так же должен знать, что это такое.
Выяснить, как дело обстоит у вас просто — достаточно зайти на «Панель управления» («Control Panel»), там найти «Управление энергопитанием» («Power») и посмотреть, есть ли у вас закладка «Hibernate». Если есть — включайте режим, в списке «
Мне повезло. У меня машина «белой сборки» IBM-IntelliStation-
Ссылки по теме
Hibernate и Win2000
Hibernate и Windows 98
Технология Hibernate и Win2000
Windows 2000. Впечатления
С появлением Windows 2000 все как будто сошли с ума. Даже те, кто до сих пор морщился при слове Microsoft, как будто надели на глаза розовые очки. Я, проработавший на этой системе со времени ее появления, совершенно не замечаю плюсов ее использования перед гораздо более стабильной Windows 95 OSR2.
Что же приводится в качестве аргументов? Система сделана по технологии и на ядре NT. Это не аргумент. Это сообщение, причем несущее очень мало информации. Один тот факт, что первое сделано по технологии второго или с использованием его части, еще ни о чем не говорит.
Монтирование. Первое, что люди вспоминают. Лично мне, наличие этого самого монтирования глубоко фиолетово. Тем более, что эта «новая возможность» на самом деле довольна бородата. В UNIX’ах и прочих *INIX’ах эта возможность была с рождения, так же как и в
Стабильность. Об этом я мог бы сказать много. Матерных слов. Но не буду. Windows 2000 зависает по самым невероятных причинам. Мне, как человеку работающему еще и с Linux Slackware, где крутится Apache, Postgres, MySQL, miniSQL, Sendmail, FTP и т. д., есть с чем сравнивать.
Многопользовательская система. Это вы зря. Для безопасности нужно ограничить запись в реестр. Без возможности записи многие приложения (Photoshop, например) работать не будут. Приходится разрешать запись в некоторые ветки. Вы просто не представляете во сколько разных веток пишут свои данные некоторые приложения. Случается так, что программы буквально прячут свои данные в этом необъятном дереве. Например, серийный номер. Таким образом получается, что нормально работать под ней можно только с правами администратора.
Что еще? Защита от DLL Hell? Не смешите. Через
Microsoft в очередной раз сделала рывок. Только опять не вперед, а в сторону.