@Linda-chan

Тег windows в блоге Linda-chan

Linda-chan

VB6 любит твипы. OLE любит химетрики. GDI любит дюймы. Чтобы получить размер картинки в пикселях в StdPicture, нужно всё это конвертировать в миллиметры, потом в дюймы, потом узнавать, что там с DPI у экрана, и результат округлить. Круто же.

Linda-chan

Вчера всю ночь воевала с интересным глюком в своих программах. Короче, есть программа CloudIM, которая использует всякие дропбоксы в качестве транспорта. Когда приходит сообщение, в трее начинает мигать иконка, как других мессенджерах. Кроме того, есть одна утилита, которая запускает на фоне другие утилиты и каждый этап показывает мигающими иконками в трее. Всё это прекрасно мигало в Windows XP, но оказалось, что в Windows 7 просто показывается первый «кадр». Сначала думала, что это как-то связано с тем, что на машину с Нанами, где запускались эти проги, я хожу по RDP, но и с монитором ничего не изменилось. Потом предположила, что это специально сделано в системе, чтобы программы не раздражали пользователя. Короче, начала разбираться. Для начала сделала простую программу, которая показывает окошко и при этом выводит иконку в трэй, а при закрытии окна – убирает иконку. Так же в окне была кнопка, которая меняет иконку на следующую, а сами иконки программа брала из стандартных (те, что выводятся в окнах сообщений вроде красного крестика – их можно специально получить, чтобы в твоей программе они соответствовали тому, что выдаёт система). Что интересно, программа работала нормально. Даже если зажать кнопку энтером, иконки всё равно очень быстро менялись, так что борьбу системы с раздражителями я отбросила. Тогда перешла к натурным испытаниям. Взяла ресурсы у CloudIM и начала использовать иконки оттуда вместо системных. И тут с самонирисованными иконками всё сломалось. Если очень упростить картину, то сначала программа добавляет иконку в трэй через Shell_NotifyIcon() с параметром NIM_ADD. А когда нужно мигать, эта функция вызывается с параметром NIM_MODIFY и манипулятором нужной иконки. Сами иконки заранее грузятся из ресурсов через LoadImage() с указанием размера 16x16 (вдруг есть другие). Так же проверяется, что у нас за система, и если что-то до Windows 2000, иконки выбираются 16-цветные. В итоге программа загружает две иконки и попеременно рисует их в трее. Но, как я уже сказала, всегда рисовалась только первая, а вторая – никогда, хотя куча тестового кода показывала, что все вызовы происходят, и даже в самом окне иконки рисуются нормально. Попутно выяснилось, что если иконка грузится с диска функцией VB6 LoadPicture(), то всё рисуется нормально, а вот LoadImage() даёт такой сбой. Впрочем, потом оказалось, что если LoadImage() вызвать с параметром LR_LOADFROMFILE, то происходит та же проблема. Что-то было не так с самой LoadImage(). Я проверяла кучу кода, поскольку она вызывалась не напрямую, а через прослойки. Попутно попробовала LoadIcon() (она грузит только иконки и только размера 32x32, растягивая и сжимая всё, что не соответствует, если альтернатив нет). Попутно я попыталась не подписывать екзешник, ибо в описании Shell_NotifyIcon() что-то было про подпись, но, правда, в контексте идентификации иконки не по паре «манипулятор родительского окна – ID иконки», а по GUID. Но и это не помогло. Потом обратила внимание на сами иконки. Дело в том, что CloudIM использовала две иконки. В одной (первый кадр) был конвертик 16x16 в вариантах 16 цветов и 256. А во второй была пустота (конвертик появлялся и исчезал при анимации), поэтому там было два изображения: 16x16 и 32x32 с одним только прозрачным фоном. Почему такие размеры? Возможно, я хотела заюзать пустоту где-то ещё, но не стала. Но главное, я сделала обе картинки двухцветными. Чтобы пустота не занимала лишнее место. Вот где-то тут всё и ломалось. Windows 98 прекрасно чередовала 16-цветную картинку и 2-цвентую. Windows XP прекрасно чередовала 256-цветную картинку и 2-цветную. А вот Windows 7 сломалась. Вывела первую, а вторую рисовать отказалась, причём ошибок функция Shell_NotifyIcon() не возвращала никаких. Просто в трее оставалась старая иконка. После того, как я пустую иконку привела в соответствие, всё начало мигать как полагается. В принципе, я сразу подумала, что что-то не так с иконками, и даже заметила различия в форматах, но меня смутила вторая программа, где никаких пустых иконок не было, все иконки однозначно в одном формате, ибо кадры выглядят одинаково, только один залит тёмным цветом, а второй – светлым. Там даже все иконки 16-цветные! Это мне и подпортило отладку. Поэтому, разобравшись с первой программой, я перешла ко второй. Проверила тамошние иконки, потом добавила их в ресурсы тестовой программы. И внезапно оказалось, что всё прекрасно мигает! Я запустила ту самую программу, и оказалось, что там тоже всё прекрасно мигает! Секрет оказался в цветах самих иконок и в длине этапов, которые они обозначали. Как я уже сказала выше, на каждом этапе запускалась утилита, которая что-то делала, а иконка показывала, что она что-то делает. Первый этап, как правило, занимал больше всего времени, а последующие выполнялись заметно быстрее. На машине с Windows XP для утилит работы было больше, а на Windows 7 – заметно меньше. Поэтому последующие этапы на Windows 7 проходили быстро, часто – быстрее времени смены кадра, а оно было примерно 250 мс. с поправкой на тормоза. Тоесть по факту иконка мигала только на первом этапе, а на последующих появлялся первый кадр и исчезал. Что же не так с первым этапом? Если посмотреть на стандартную 16-цветную палитру, то можно заметить там пары цветов типа тёмно-зелёного и светло-зелёного. Все пары образуются подобными значениями в разных компонентах. Тоесть чисто по цифрам там всё сбалансировано. Просто глаз разные цвета воспринимает по-разному. И если отличие светло-зелёного от тёмно-зелёного видно сразу, то тёмно-синий от светло-синего отличается не так разительно и в зависимости от настроек дисплюя может вообще не бросаться в глаза. И по счастливому стечению обстоятельств первый этап обозначался именно синим цветом. Тоесть оно мигало, но это было не заметно. Кстати, пока я испытывала вторую утилиту, внимательно вглядываясь в иконки, я словила ещё один странный глюк. Неожиданно иконка одного из этапов не пропала и в трее образовалось две иконки, которые ещё и жили каждая своей жизнью, хотя иконка должна быть одна: программа не создавала никаких дополнительных. Правда, тут всё было ещё проще: увлёкшись, я прозевала запуск этой утилиты по планировщику, и он пришёлся как раз на тестовый запуск, а проверку, не запущена ли уже копия программы, я сделать забыла.

Linda-chan

Программа, написанная для Windows 1.01 прекрасно стартует и работает в Windows 10.
https://www.transmissionzer...ing/win16-apps-in-c/

Linda-chan

Microsoft не успела прекратить поддержку Windows 7, а нам уже рекомендуют срочно отключить компы с ней от сети. А то мало ли, взорвётся ещё.
https://www.howtogeek.com/5...ws-7-system-in-2020/

Linda-chan

Постоянно забываю про то, как выкинуть запомненные пароли из кэша в Windows 7.
https://spydevices.ru/net_pass/

Linda-chan

Юзерс, бивээ! Сегодня заканчивается поддержка Windows 7. Это значит, что данная операционная система внезапно станет устаревшим дырявым гогном, физически не могущим существовать. Поэтому в течение всего дня компьютеры, на которых установлена Windows 7, будут взрываться, поскольку тоже устареют. Я рекомендую сохранять спокойствие, быть бдительными и ни в коем случае не подходить сегодня к домашним и рабочим ПК. Так же стоит приготовить огнетушитель.

Linda-chan

Когда-то у меня была Windows NT 3.51. Случилось диск от неё проверить в Windows NT 4. Это было большой ошибкой =_= Данные остались, но заставить загружаться систему мне так и не удалось.

Linda-chan

Кажется, делать chkdsk на диске с Windows 7 из Windows XP было не очень правильно. Хотя, кто знает...

Linda-chan

Рэймонд Чен поясняет, чем отличаются нынешние настройки безопасности файлов и прочих объектов от старых настроек. А именно – галочка про наследование настроек от родительских объектов. После чтения этой статьи, в частности, становится ясно, почему в WinFile (который старый File Manager), где используются диалоги настройки безопасности ещё от NT4, нет такой галочки. Так же становится понятна разница в установке безопасности средствами того же WinFile и Проводника. Короче, познавательно.
https://devblogs.microsoft....0200102-00/?p=103287

Linda-chan

Читаю исторический документ про библиотеку CTL3D (3D интерфейс для Windows 3.xx и NT 3.xx). Нашлось забавное.

Since there are a number of released applications that either don't do version checking or install CTL3D.DLL to the wrong directory, we have created a new version of CTL3D, CTL3DV2.DLLwhich applications link to with the CTL3DV2.LIB file. This new DLL name makes it impossible for older versions of CTL3D.DLL ( version 1.x) to effect applications using CTL3DV2.DLL.

MS борется с DLL Hell, пока не очень решительно.

CTL3DV2.DLL will not produce 3D effects unless it is running from either windows\system or the windows directory. This hopefully will encourage developers to correctly install CTL3DV2.DLL with their applications. When CTL3DV2.DLL is run from any other directory it will display the following message box:

MS наступает на грабли. Хотя, да, тогда правильно было все DLL кидать в SYSTEM, не забывая при этом проверять версию специально написанной для этого библиотекой.

Linda-chan

Как заставить панель управления показывать нормальное название скринсейвера, а не имя его екзешника:
https://stackoverflow.com/q...n-the-drop-down-list
Как всё же заставить панель управления показывать нормальное название скринсейвера, а не имя его екзешника:
https://stackoverflow.com/q...own-in-the-drop-down
Вот как раз столкнулась со вторым вариантом: всё есть, строка в ресурсах, файл в System32, а не работает. Оказалось, файл назывался DesktopScreenSaver.SCR. Переименовала в DesktopS.SCR, и тут же всё заработало как надо.

Linda-chan

В Нанами в калькуляторе есть вычислятор для ипотеки.

Linda-chan

Поборола в программе баг, который проявляется в Windows 98. Обратная совместимость at it's best!

Linda-chan

Нашла свой старый ноутбук. Первое впечатление от Windows 98: ЁПТВОЮМАТЬ ВОТ ЭТО ШРИФТЫ ПОЧЕМУ БУКВЫ ТАКИЕ ЧЁТКИЕ ЧТО ЭТО ЗА ШРИФТ ЭТО ЧЁ БЛЯ ТАЙМСНЬЮРОМАН КАК ТАКОЕ МОЖЕТ БЫТЬ ОХУЕТЬ ВЕРНИТЕ МНЕ НУЛЕВЫЕ!!!!!1111111111

Linda-chan

Заработал постинг на Dreamwidth. Сначала они сделали форвардинг на HTTPS, и мой HTTP клиент для прог на VB отвалился (всё руки не дойдут переписать и добавить поддержку HTTPS). Не беда, взяла WinHTTP клиент. Но тут оказалось, что на DW ещё и шифрование подкрутили, а у меня XP. В принципе WinHTTP работает на Нанами, но мне лень запускать постилку на отдельной машине. Попробовала пару костылей, в том числе всёже запуск куска постилки на Нанами через DCOM, но что-то ничего не заработало. В итоге плюнула и запилила вызов WGet из программы. UNIX way, блеать! Осталась, конечно, пара недоработок, но продукт внутренний, и по ходу дела я доведу всё до ума.

Linda-chan

В последнее время при вылете программы системное сообщение начало выглядеть так:

Инструкция по адресу "0x7ed32caf" обратилась к памяти по адресу "0x00000000". Требуемые данные в память не помещены из-за ошибки ввода/вывода "0x75b4b128".

Я имею в виду вторую часть. Раньше она появлялась изредка, но обычно в экзотичных условиях воде глючащего драйвера. А теперь непрерывно =_= Что, пора идти в магазин за новым винтом?

Linda-chan

Если ни с того, ни с сего перестали устанавливаться MSI пакеты, Windows Installer орёт, что система запущена в безопасном режиме, а в журнале событий Application выдаётся «Не удалось подключиться к серверу. Ошибка: 0x80080005», то достаточно сделать вот так:

regsvr32 "C:\Windows\System32\msi.dll"

Linda-chan

Это никакой не трэй, говорили они. Это – notification area, говорили они. Он никогда не назывался треем, это просто имя екзешника с иконками, утверждали они.


И ведь до сих пор утверждают, даже Рэймонд Чен.

Linda-chan

However, so much work had been pushed into the Blackcomb release that it was clear that it couldn’t all be done in one release cycle, so selected portions were extracted into an interim release code named Longhorn, which is the name of a bar situated between the Whistler and Blackcomb mountains.
Longhorn was the code name for Windows Vista.

https://devblogs.microsoft....0190722-00/?p=102724
Теперь понятно, почему Виста получилась такой кривой.

Linda-chan

Попробовала X11 форвардинг по SSH из Линукса в Винду. Необычные ощущения. Особенно от гткаки с дефолтной темой и мыльными шрифтами. Но в общем и целом прикольно.
https://www.howtogeek.com/4...lication-with-putty/
Правильная ссылка на X сервер.
https://sourceforge.net/projects/xming/

Добавить пост

Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
Для форматирования текста используется Markdown.